From fee434321830d10505a84dc9d9adb223b7f9f1a0 Mon Sep 17 00:00:00 2001 From: Yui T Date: Fri, 10 Oct 2014 16:44:14 -0700 Subject: [PATCH 001/178] Refactoring emitDeclaration, separate emitDeclaration from emitFiles --- src/compiler/emitter.ts | 2429 ++++++++++++++++++++------------------- 1 file changed, 1219 insertions(+), 1210 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index c038cf39868..b683757ccfb 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -41,6 +41,1199 @@ module ts { return isExternalModule(sourceFile) || isDeclarationFile(sourceFile); } + function createTextWriter(newLine: String, trackSymbol: (symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags) => void): EmitTextWriter { + var output = ""; + var indent = 0; + var lineStart = true; + var lineCount = 0; + var linePos = 0; + + function write(s: string) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; + } + } + + function rawWrite(s: string) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } + + function writeLiteral(s: string) { + if (s && s.length) { + write(s); + var lineStartsOfS = getLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; + } + } + } + + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } + } + + function writeKind(text: string, kind: SymbolDisplayPartKind) { + write(text); + } + function writeSymbol(text: string, symbol: Symbol) { + write(text); + } + return { + write: write, + trackSymbol: trackSymbol, + writeKind: writeKind, + writeSymbol: writeSymbol, + rawWrite: rawWrite, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: () => indent++, + decreaseIndent: () => indent--, + getIndent: () => indent, + getTextPos: () => output.length, + getLine: () => lineCount + 1, + getColumn: () => lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1, + getText: () => output, + clear: () => { } + }; + } + + + // Get source text of node in the current source file. Unlike getSourceTextOfNode this function + // doesn't walk the parent chain to find the containing source file, rather it assumes the node is + // in the source file currently being processed. + function getSourceTextOfLocalNode(node: Node, currentSourceFile: SourceFile): string { + var text = currentSourceFile.text; + return text.substring(skipTrivia(text, node.pos), node.end); + } + + function getLineOfLocalPosition(pos: number, currentSourceFile: SourceFile) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } + + function emitNewLineBeforeLeadingComments(node: TextRange, leadingComments: CommentRange[], writer: EmitTextWriter, currentSourceFile: SourceFile) { + // If the leading comments start on different line than the start of node, write new line + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && + getLineOfLocalPosition(node.pos, currentSourceFile) !== getLineOfLocalPosition(leadingComments[0].pos, currentSourceFile)) { + writer.writeLine(); + } + } + + function emitComments(comments: CommentRange[], trailingSeparator: boolean, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string, + writeComment: (comment: CommentRange, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string) => void) { + var emitLeadingSpace = !trailingSeparator; + forEach(comments, comment => { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(comment, writer, currentSourceFile, newLine); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + // Emit leading space to separate comment during next comment emit + emitLeadingSpace = true; + } + }); + } + + function writeCommentRange(comment: CommentRange, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent: number; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, /*character*/1); + + if (pos !== comment.pos) { + // If we are not emitting first line, we need to write the spaces to adjust the alignment + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, /*character*/1), + comment.pos); + } + + // These are number of spaces writer is going to write at current indent + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + + // Number of spaces we want to be writing + // eg: Assume writer indent + // module m { + // /* starts at character 9 this is line 1 + // * starts at character pos 4 line --1 = 8 - 8 + 3 + // More left indented comment */ --2 = 8 - 8 + 2 + // class c { } + // } + // module m { + // /* this is line 1 -- Assume current writer indent 8 + // * line --3 = 8 - 4 + 5 + // More right indented comment */ --4 = 8 - 4 + 11 + // class c { } + // } + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + + // Write indent size string ( in eg 1: = "", 2: "" , 3: string with 8 spaces 4: string with 12 spaces + writer.rawWrite(indentSizeSpaceString); + + // Emit the single spaces (in eg: 1: 3 spaces, 2: 2 spaces, 3: 1 space, 4: 3 spaces) + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + // No spaces to emit write empty string + writer.rawWrite(""); + } + } + + // Write the comment line text + writeTrimmedCurrentLine(pos, nextLineStart); + + pos = nextLineStart; + } + } + else { + // Single line comment of style //.... + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + + function writeTrimmedCurrentLine(pos: number, nextLineStart: number) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + // trimmed forward and ending spaces text + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + // Empty string - make sure we write empty line + writer.writeLiteral(newLine); + } + } + + function calculateIndent(pos: number, end: number) { + var currentLineIndent = 0; + for (; pos < end && isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { + if (currentSourceFile.text.charCodeAt(pos) === CharacterCodes.tab) { + // Tabs = TabSize = indent size and go to next tabStop + currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); + } + else { + // Single space + currentLineIndent++; + } + } + + return currentLineIndent; + } + } + + function getFirstConstructorWithBody(node: ClassDeclaration): ConstructorDeclaration { + return forEach(node.members, member => { + if (member.kind === SyntaxKind.Constructor && (member).body) { + return member; + } + }); + } + + function getAllAccessorDeclarations(node: ClassDeclaration, accessor: AccessorDeclaration) { + var firstAccessor: AccessorDeclaration; + var getAccessor: AccessorDeclaration; + var setAccessor: AccessorDeclaration; + forEach(node.members, (member: Declaration) => { + if ((member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) && + member.name.text === accessor.name.text && + (member.flags & NodeFlags.Static) === (accessor.flags & NodeFlags.Static)) { + if (!firstAccessor) { + firstAccessor = member; + } + + if (member.kind === SyntaxKind.GetAccessor && !getAccessor) { + getAccessor = member; + } + + if (member.kind === SyntaxKind.SetAccessor && !setAccessor) { + setAccessor = member; + } + } + }); + return { + firstAccessor: firstAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + + function getSourceFilePathInNewDir(program: Program, newDirPath: string, sourceFile: SourceFile) { + var compilerHost = program.getCompilerHost(); + var sourceFilePath = getNormalizedPathFromPathComponents(getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); + return combinePaths(newDirPath, sourceFilePath); + } + + function getOwnEmitOutputFilePath(program: Program, sourceFile: SourceFile, extension: string) { + var compilerOptions = program.getCompilerOptions(); + if (compilerOptions.outDir) { + var emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(program, compilerOptions.outDir, sourceFile)); + } + else { + var emitOutputFilePathWithoutExtension = removeFileExtension(sourceFile.filename); + } + + return emitOutputFilePathWithoutExtension + extension; + } + + function writeFile(compilerHost: CompilerHost, diagnostics: Diagnostic[], filename: string, data: string, writeByteOrderMark: boolean) { + compilerHost.writeFile(filename, data, writeByteOrderMark, hostErrorMessage => { + diagnostics.push(createCompilerDiagnostic(Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + }); + } + + function emitDeclarations(resolver: EmitResolver, program: Program, diagnostics: Diagnostic[], jsFilePath: string, root?: SourceFile) { + var newLine = program.getCompilerHost().getNewLine(); + var compilerOptions = program.getCompilerOptions(); + var compilerHost = program.getCompilerHost(); + var writer = createTextWriter(newLine, trackSymbol); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + + var enclosingDeclaration: Node; + var currentSourceFile: SourceFile; + var reportedDeclarationError = false; + + var emitJsDocComments = compilerOptions.removeComments ? function (declaration: Declaration) { } : writeJsDocComments; + + var aliasDeclarationEmitInfo: { + declaration: ImportDeclaration; + outputPos: number; + indent: number; + asynchronousOutput?: string; // If the output for alias was written asynchronously, the corresponding output + }[] = []; + + var getSymbolVisibilityDiagnosticMessage: (symbolAccesibilityResult: SymbolAccessiblityResult) => { + errorNode: Node; + diagnosticMessage: DiagnosticMessage; + typeName?: Identifier + } + + function writeAsychronousImportDeclarations(importDeclarations: ImportDeclaration[]) { + var oldWriter = writer; + forEach(importDeclarations, aliasToWrite => { + var aliasEmitInfo = forEach(aliasDeclarationEmitInfo, declEmitInfo => declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined); + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } + + function trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags) { + var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); + if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { + + // write the aliases + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + // Report error + reportedDeclarationError = true; + var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, + errorInfo.diagnosticMessage, + getSourceTextOfLocalNode(errorInfo.typeName, currentSourceFile), + symbolAccesibilityResult.errorSymbolName, + symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, + errorInfo.diagnosticMessage, + symbolAccesibilityResult.errorSymbolName, + symbolAccesibilityResult.errorModuleName)); + } + } + } + } + + function emitLines(nodes: Node[]) { + for (var i = 0, n = nodes.length; i < n; i++) { + emitNode(nodes[i]); + } + } + + function emitCommaList(nodes: Node[], eachNodeEmitFn: (node: Node) => void) { + var currentWriterPos = writer.getTextPos(); + for (var i = 0, n = nodes.length; i < n; i++) { + if (currentWriterPos !== writer.getTextPos()) { + write(", "); + } + currentWriterPos = writer.getTextPos(); + eachNodeEmitFn(nodes[i]); + } + } + + function writeJsDocComments(declaration: Declaration) { + if (declaration) { + var jsDocComments = getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer, currentSourceFile); + // jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space + emitComments(jsDocComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeCommentRange); + } + } + + function emitSourceTextOfNode(node: Node) { + write(getSourceTextOfLocalNode(node, currentSourceFile)); + } + + function emitSourceFile(node: SourceFile) { + currentSourceFile = node; + enclosingDeclaration = node; + emitLines(node.statements); + } + + function emitExportAssignment(node: ExportAssignment) { + write("export = "); + emitSourceTextOfNode(node.exportName); + write(";"); + writeLine(); + } + + function emitDeclarationFlags(node: Declaration) { + if (node.flags & NodeFlags.Static) { + if (node.flags & NodeFlags.Private) { + write("private "); + } + else if (node.flags & NodeFlags.Protected) { + write("protected "); + } + write("static "); + } + else { + if (node.flags & NodeFlags.Private) { + write("private "); + } + else if (node.flags & NodeFlags.Protected) { + write("protected "); + } + // If the node is parented in the current source file we need to emit export declare or just export + else if (node.parent === currentSourceFile) { + // If the node is exported + if (node.flags & NodeFlags.Export) { + write("export "); + } + + if (node.kind !== SyntaxKind.InterfaceDeclaration) { + write("declare "); + } + } + } + } + + function emitImportDeclaration(node: ImportDeclaration) { + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + + function writeImportDeclaration(node: ImportDeclaration) { + // note usage of writer. methods instead of aliases created, just to make sure we are using + // correct writer especially to handle asynchronous alias writing + emitJsDocComments(node); + if (node.flags & NodeFlags.Export) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(node.name, currentSourceFile)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(node.entityName, currentSourceFile)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(node.externalModuleName, currentSourceFile)); + writer.write(");"); + } + writer.writeLine(); + + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); + if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { + // write the aliases + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + // Report error + reportedDeclarationError = true; + diagnostics.push(createDiagnosticForNode(node, + Diagnostics.Import_declaration_0_is_using_private_name_1, + getSourceTextOfLocalNode(node.name, currentSourceFile), + symbolAccesibilityResult.errorSymbolName)); + } + } + } + + function emitModuleDeclaration(node: ModuleDeclaration) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("module "); + emitSourceTextOfNode(node.name); + while (node.body.kind !== SyntaxKind.ModuleBlock) { + node = node.body; + write("."); + emitSourceTextOfNode(node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines((node.body).statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + + function emitEnumDeclaration(node: EnumDeclaration) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("enum "); + emitSourceTextOfNode(node.name); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + } + } + + function emitEnumMemberDeclaration(node: EnumMember) { + emitJsDocComments(node); + emitSourceTextOfNode(node.name); + var enumMemberValue = resolver.getEnumMemberValue(node); + if (enumMemberValue !== undefined) { + write(" = "); + write(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + + function emitTypeParameters(typeParameters: TypeParameterDeclaration[]) { + function emitTypeParameter(node: TypeParameterDeclaration) { + function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + // Type parameter constraints are named by user so we should always be able to name it + var diagnosticMessage: DiagnosticMessage; + switch (node.parent.kind) { + case SyntaxKind.ClassDeclaration: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + + case SyntaxKind.InterfaceDeclaration: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + + case SyntaxKind.ConstructSignature: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + + case SyntaxKind.CallSignature: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + + case SyntaxKind.Method: + if (node.parent.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + + case SyntaxKind.FunctionDeclaration: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + + default: + Debug.fail("This is unknown parent for type parameter: " + SyntaxKind[node.parent.kind]); + } + + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); + emitSourceTextOfNode(node.name); + // If there is constraint present and this is not a type parameter of the private method emit the constraint + if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { + write(" extends "); + getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + } + + if (typeParameters) { + write("<"); + emitCommaList(typeParameters, emitTypeParameter); + write(">"); + } + } + + function emitHeritageClause(typeReferences: TypeReferenceNode[], isImplementsList: boolean) { + if (typeReferences) { + write(isImplementsList ? " implements " : " extends "); + emitCommaList(typeReferences, emitTypeOfTypeReference); + } + + function emitTypeOfTypeReference(node: Node) { + getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.WriteArrayAsGenericType | TypeFormatFlags.UseTypeOfFunction, writer); + + function getHeritageClauseVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + var diagnosticMessage: DiagnosticMessage; + // Heritage clause is written by user so it can always be named + if (node.parent.kind === SyntaxKind.ClassDeclaration) { + // Class + if (symbolAccesibilityResult.errorModuleName) { + // Module is inaccessible + diagnosticMessage = isImplementsList ? + Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; + } + else { + // Class or Interface implemented/extended is inaccessible + diagnosticMessage = isImplementsList ? + Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : + Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; + } + } + else { + if (symbolAccesibilityResult.errorModuleName) { + // Module is inaccessible + diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; + } + else { + // interface is inaccessible + diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; + } + } + + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: (node.parent).name + }; + } + } + } + + function emitClassDeclaration(node: ClassDeclaration) { + function emitParameterProperties(constructorDeclaration: ConstructorDeclaration) { + if (constructorDeclaration) { + forEach(constructorDeclaration.parameters, param => { + if (param.flags & NodeFlags.AccessibilityModifier) { + emitPropertyDeclaration(param); + } + }); + } + } + + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("class "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + if (node.baseType) { + emitHeritageClause([node.baseType], /*isImplementsList*/ false); + } + emitHeritageClause(node.implementedTypes, /*isImplementsList*/ true); + write(" {"); + writeLine(); + increaseIndent(); + emitParameterProperties(getFirstConstructorWithBody(node)); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + + function emitInterfaceDeclaration(node: InterfaceDeclaration) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("interface "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + emitHeritageClause(node.baseTypes, /*isImplementsList*/ false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + + function emitPropertyDeclaration(node: PropertyDeclaration) { + emitJsDocComments(node); + emitDeclarationFlags(node); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + + function emitVariableDeclaration(node: VariableDeclaration) { + // If we are emitting property it isn't moduleElement and hence we already know it needs to be emitted + // so there is no check needed to see if declaration is visible + if (node.kind !== SyntaxKind.VariableDeclaration || resolver.isDeclarationVisible(node)) { + emitSourceTextOfNode(node.name); + // If optional property emit ? + if (node.kind === SyntaxKind.Property && (node.flags & NodeFlags.QuestionMark)) { + write("?"); + } + if (!(node.flags & NodeFlags.Private)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + } + + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + var diagnosticMessage: DiagnosticMessage; + if (node.kind === SyntaxKind.VariableDeclaration) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit + else if (node.kind === SyntaxKind.Property) { + if (node.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + // Interfaces cannot have types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } + } + + function emitVariableStatement(node: VariableStatement) { + var hasDeclarationWithEmit = forEach(node.declarations, varDeclaration => resolver.isDeclarationVisible(varDeclaration)); + if (hasDeclarationWithEmit) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("var "); + emitCommaList(node.declarations, emitVariableDeclaration); + write(";"); + writeLine(); + } + } + + function emitAccessorDeclaration(node: AccessorDeclaration) { + var accessors = getAllAccessorDeclarations(node.parent, node); + if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); + emitDeclarationFlags(node); + emitSourceTextOfNode(node.name); + if (!(node.flags & NodeFlags.Private)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + write(";"); + writeLine(); + } + + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + var diagnosticMessage: DiagnosticMessage; + if (node.kind === SyntaxKind.SetAccessor) { + // Setters have to have type named and cannot infer it so, the type should always be named + if (node.parent.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : + Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : + Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } + } + + function emitFunctionDeclaration(node: FunctionDeclaration) { + // If we are emitting Method/Constructor it isn't moduleElement and hence already determined to be emitting + // so no need to verify if the declaration is visible + if ((node.kind !== SyntaxKind.FunctionDeclaration || resolver.isDeclarationVisible(node)) && + !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + if (node.kind === SyntaxKind.FunctionDeclaration) { + write("function "); + emitSourceTextOfNode(node.name); + } + else if (node.kind === SyntaxKind.Constructor) { + write("constructor"); + } + else { + emitSourceTextOfNode(node.name); + if (node.flags & NodeFlags.QuestionMark) { + write("?"); + } + } + emitSignatureDeclaration(node); + } + } + + function emitConstructSignatureDeclaration(node: SignatureDeclaration) { + emitJsDocComments(node); + write("new "); + emitSignatureDeclaration(node); + } + + function emitSignatureDeclaration(node: SignatureDeclaration) { + if (node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.IndexSignature) { + // Only index and call signatures are emitted directly, so emit their js doc comments, rest will do that in their own functions + emitJsDocComments(node); + } + emitTypeParameters(node.typeParameters); + if (node.kind === SyntaxKind.IndexSignature) { + write("["); + } + else { + write("("); + } + + // Parameters + emitCommaList(node.parameters, emitParameterDeclaration); + + if (node.kind === SyntaxKind.IndexSignature) { + write("]"); + } + else { + write(")"); + } + + // If this is not a constructor and is not private, emit the return type + if (node.kind !== SyntaxKind.Constructor && !(node.flags & NodeFlags.Private)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + write(";"); + writeLine(); + + function getReturnTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + var diagnosticMessage: DiagnosticMessage; + switch (node.kind) { + case SyntaxKind.ConstructSignature: + // Interfaces cannot have return types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + + case SyntaxKind.CallSignature: + // Interfaces cannot have return types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + + case SyntaxKind.IndexSignature: + // Interfaces cannot have return types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + + case SyntaxKind.Method: + if (node.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : + Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : + Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + // Interfaces cannot have return types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + + case SyntaxKind.FunctionDeclaration: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : + Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : + Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + + default: + Debug.fail("This is unknown kind for signature: " + SyntaxKind[node.kind]); + } + + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node, + }; + } + } + + function emitParameterDeclaration(node: ParameterDeclaration) { + increaseIndent(); + emitJsDocComments(node); + if (node.flags & NodeFlags.Rest) { + write("..."); + } + emitSourceTextOfNode(node.name); + if (node.initializer || (node.flags & NodeFlags.QuestionMark)) { + write("?"); + } + decreaseIndent(); + + if (!(node.parent.flags & NodeFlags.Private)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + var diagnosticMessage: DiagnosticMessage; + switch (node.parent.kind) { + case SyntaxKind.Constructor: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + + case SyntaxKind.ConstructSignature: + // Interfaces cannot have parameter types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + + case SyntaxKind.CallSignature: + // Interfaces cannot have parameter types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + + case SyntaxKind.Method: + if (node.parent.flags & NodeFlags.Static) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + // Interfaces cannot have parameter types that cannot be named + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + + case SyntaxKind.FunctionDeclaration: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? + symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? + Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : + Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : + Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + + default: + Debug.fail("This is unknown parent for parameter: " + SyntaxKind[node.parent.kind]); + } + + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + } + + function emitNode(node: Node) { + switch (node.kind) { + case SyntaxKind.Constructor: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.Method: + return emitFunctionDeclaration(node); + case SyntaxKind.ConstructSignature: + return emitConstructSignatureDeclaration(node); + case SyntaxKind.CallSignature: + case SyntaxKind.IndexSignature: + return emitSignatureDeclaration(node); + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + return emitAccessorDeclaration(node); + case SyntaxKind.VariableStatement: + return emitVariableStatement(node); + case SyntaxKind.Property: + return emitPropertyDeclaration(node); + case SyntaxKind.InterfaceDeclaration: + return emitInterfaceDeclaration(node); + case SyntaxKind.ClassDeclaration: + return emitClassDeclaration(node); + case SyntaxKind.EnumMember: + return emitEnumMemberDeclaration(node); + case SyntaxKind.EnumDeclaration: + return emitEnumDeclaration(node); + case SyntaxKind.ModuleDeclaration: + return emitModuleDeclaration(node); + case SyntaxKind.ImportDeclaration: + return emitImportDeclaration(node); + case SyntaxKind.ExportAssignment: + return emitExportAssignment(node); + case SyntaxKind.SourceFile: + return emitSourceFile(node); + } + } + + function tryResolveScriptReference(sourceFile: SourceFile, reference: FileReference) { + var referenceFileName = normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename)); + return program.getSourceFile(referenceFileName); + } + + // Contains the reference paths that needs to go in the declaration file. + // Collecting this separately because reference paths need to be first thing in the declaration file + // and we could be collecting these paths from multiple files into single one with --out option + var referencePathsOutput = ""; + function writeReferencePath(referencedFile: SourceFile) { + var declFileName = referencedFile.flags & NodeFlags.DeclarationFile + ? referencedFile.filename // Declaration file, use declaration file name + : shouldEmitToOwnFile(referencedFile, compilerOptions) + ? getOwnEmitOutputFilePath(program, referencedFile, ".d.ts") // Own output file so get the .d.ts file + : removeFileExtension(compilerOptions.out) + ".d.ts";// Global out file + + declFileName = getRelativePathToDirectoryOrUrl( + getDirectoryPath(normalizeSlashes(jsFilePath)), + declFileName, + compilerHost.getCurrentDirectory(), + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ false); + + referencePathsOutput += "/// " + newLine; + } + + if (root) { + // Emitting just a single file, so emit references in this file only + if (!compilerOptions.noResolve) { + var addedGlobalFileReference = false; + forEach(root.referencedFiles, fileReference => { + var referencedFile = tryResolveScriptReference(root, fileReference); + + // All the references that are not going to be part of same file + if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference + 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 + + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + } + + emitNode(root); + } + else { + // Emit references corresponding to this file + var emittedReferencedFiles: SourceFile[] = []; + forEach(program.getSourceFiles(), sourceFile => { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + // Check what references need to be added + if (!compilerOptions.noResolve) { + forEach(sourceFile.referencedFiles, fileReference => { + var referencedFile = tryResolveScriptReference(sourceFile, fileReference); + + // If the reference file is a declaration file or an external module, emit that reference + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && + !contains(emittedReferencedFiles, referencedFile))) { // If the file reference was not already emitted + + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + } + + emitNode(sourceFile); + } + }); + } + + // TODO(shkamat): Should we not write any declaration file if any of them can produce error, + // or should we just not write this file like we are doing now + if (!reportedDeclarationError) { + var declarationOutput = referencePathsOutput; + var synchronousDeclarationOutput = writer.getText(); + // apply additions + var appliedSyncOutputPos = 0; + forEach(aliasDeclarationEmitInfo, aliasEmitInfo => { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(compilerHost, diagnostics, removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + } + } + // targetSourceFile is when users only want one file in entire project to be emitted. This is used in compilerOnSave feature export function emitFiles(resolver: EmitResolver, targetSourceFile?: SourceFile): EmitResult { var program = resolver.getProgram(); @@ -50,280 +1243,15 @@ module ts { var diagnostics: Diagnostic[] = []; var newLine = program.getCompilerHost().getNewLine(); - function getSourceFilePathInNewDir(newDirPath: string, sourceFile: SourceFile) { - var sourceFilePath = getNormalizedPathFromPathComponents(getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); - sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); - return combinePaths(newDirPath, sourceFilePath); - } - - function getOwnEmitOutputFilePath(sourceFile: SourceFile, extension: string) { - if (compilerOptions.outDir) { - var emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile)); - } - else { - var emitOutputFilePathWithoutExtension = removeFileExtension(sourceFile.filename); - } - - return emitOutputFilePathWithoutExtension + extension; - } - - function getFirstConstructorWithBody(node: ClassDeclaration): ConstructorDeclaration { - return forEach(node.members, member => { - if (member.kind === SyntaxKind.Constructor && (member).body) { - return member; - } - }); - } - - function getAllAccessorDeclarations(node: ClassDeclaration, accessor: AccessorDeclaration) { - var firstAccessor: AccessorDeclaration; - var getAccessor: AccessorDeclaration; - var setAccessor: AccessorDeclaration; - forEach(node.members, (member: Declaration) => { - if ((member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) && - member.name.text === accessor.name.text && - (member.flags & NodeFlags.Static) === (accessor.flags & NodeFlags.Static)) { - if (!firstAccessor) { - firstAccessor = member; - } - - if (member.kind === SyntaxKind.GetAccessor && !getAccessor) { - getAccessor = member; - } - - if (member.kind === SyntaxKind.SetAccessor && !setAccessor) { - setAccessor = member; - } - } - }); - return { - firstAccessor: firstAccessor, - getAccessor: getAccessor, - setAccessor: setAccessor - }; - } - - function createTextWriter(trackSymbol: (symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags)=> void): EmitTextWriter { - var output = ""; - var indent = 0; - var lineStart = true; - var lineCount = 0; - var linePos = 0; - - function write(s: string) { - if (s && s.length) { - if (lineStart) { - output += getIndentString(indent); - lineStart = false; - } - output += s; - } - } - - function rawWrite(s: string) { - if (s !== undefined) { - if (lineStart) { - lineStart = false; - } - output += s; - } - } - - function writeLiteral(s: string) { - if (s && s.length) { - write(s); - var lineStartsOfS = getLineStarts(s); - if (lineStartsOfS.length > 1) { - lineCount = lineCount + lineStartsOfS.length - 1; - linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; - } - } - } - - function writeLine() { - if (!lineStart) { - output += newLine; - lineCount++; - linePos = output.length; - lineStart = true; - } - } - - function writeKind(text: string, kind: SymbolDisplayPartKind) { - write(text); - } - function writeSymbol(text: string, symbol: Symbol) { - write(text); - } - return { - write: write, - trackSymbol: trackSymbol, - writeKind: writeKind, - writeSymbol: writeSymbol, - rawWrite: rawWrite, - writeLiteral: writeLiteral, - writeLine: writeLine, - increaseIndent: () => indent++, - decreaseIndent: () => indent--, - getIndent: () => indent, - getTextPos: () => output.length, - getLine: () => lineCount + 1, - getColumn: () => lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1, - getText: () => output, - clear: () => { } - }; - } - - // Get source text of node in the current source file. Unlike getSourceTextOfNode this function - // doesn't walk the parent chain to find the containing source file, rather it assumes the node is - // in the source file currently being processed. - var currentSourceFile: SourceFile; - function getSourceTextOfLocalNode(node: Node): string { - var text = currentSourceFile.text; - return text.substring(skipTrivia(text, node.pos), node.end); - } - - function getLineOfLocalPosition(pos: number) { - return currentSourceFile.getLineAndCharacterFromPosition(pos).line; - } - - function writeFile(filename: string, data: string, writeByteOrderMark: boolean) { - compilerHost.writeFile(filename, data, writeByteOrderMark, hostErrorMessage => { - diagnostics.push(createCompilerDiagnostic(Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); - }); - } - - function emitComments(comments: CommentRange[], trailingSeparator: boolean, writer: EmitTextWriter, writeComment: (comment: CommentRange, writer: EmitTextWriter) => void) { - var emitLeadingSpace = !trailingSeparator; - forEach(comments, comment => { - if (emitLeadingSpace) { - writer.write(" "); - emitLeadingSpace = false; - } - writeComment(comment, writer); - if (comment.hasTrailingNewLine) { - writer.writeLine(); - } - else if (trailingSeparator) { - writer.write(" "); - } - else { - // Emit leading space to separate comment during next comment emit - emitLeadingSpace = true; - } - }); - } - - function emitNewLineBeforeLeadingComments(node: TextRange, leadingComments: CommentRange[], writer: EmitTextWriter) { - // If the leading comments start on different line than the start of node, write new line - if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && - getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { - writer.writeLine(); - } - } - - function writeCommentRange(comment: CommentRange, writer: EmitTextWriter) { - if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk) { - var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); - var firstCommentLineIndent: number; - for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { - var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, /*character*/1); - - if (pos !== comment.pos) { - // If we are not emitting first line, we need to write the spaces to adjust the alignment - if (firstCommentLineIndent === undefined) { - firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, /*character*/1), - comment.pos); - } - - // These are number of spaces writer is going to write at current indent - var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); - - // Number of spaces we want to be writing - // eg: Assume writer indent - // module m { - // /* starts at character 9 this is line 1 - // * starts at character pos 4 line --1 = 8 - 8 + 3 - // More left indented comment */ --2 = 8 - 8 + 2 - // class c { } - // } - // module m { - // /* this is line 1 -- Assume current writer indent 8 - // * line --3 = 8 - 4 + 5 - // More right indented comment */ --4 = 8 - 4 + 11 - // class c { } - // } - var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); - if (spacesToEmit > 0) { - var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); - var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); - - // Write indent size string ( in eg 1: = "", 2: "" , 3: string with 8 spaces 4: string with 12 spaces - writer.rawWrite(indentSizeSpaceString); - - // Emit the single spaces (in eg: 1: 3 spaces, 2: 2 spaces, 3: 1 space, 4: 3 spaces) - while (numberOfSingleSpacesToEmit) { - writer.rawWrite(" "); - numberOfSingleSpacesToEmit--; - } - } - else { - // No spaces to emit write empty string - writer.rawWrite(""); - } - } - - // Write the comment line text - writeTrimmedCurrentLine(pos, nextLineStart); - - pos = nextLineStart; - } - } - else { - // Single line comment of style //.... - writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); - } - - function writeTrimmedCurrentLine(pos: number, nextLineStart: number) { - var end = Math.min(comment.end, nextLineStart - 1); - var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); - if (currentLineText) { - // trimmed forward and ending spaces text - writer.write(currentLineText); - if (end !== comment.end) { - writer.writeLine(); - } - } - else { - // Empty string - make sure we write empty line - writer.writeLiteral(newLine); - } - } - - function calculateIndent(pos: number, end: number) { - var currentLineIndent = 0; - for (; pos < end && isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { - if (currentSourceFile.text.charCodeAt(pos) === CharacterCodes.tab) { - // Tabs = TabSize = indent size and go to next tabStop - currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); - } - else { - // Single space - currentLineIndent++; - } - } - - return currentLineIndent; - } - } - function emitJavaScript(jsFilePath: string, root?: SourceFile) { - var writer = createTextWriter(trackSymbol); + var writer = createTextWriter(newLine, trackSymbol); var write = writer.write; var writeLine = writer.writeLine; var increaseIndent = writer.increaseIndent; var decreaseIndent = writer.decreaseIndent; + var currentSourceFile: SourceFile; + var extendsEmitted = false; /** write emitted output to disk*/ @@ -599,7 +1527,7 @@ module ts { function writeCommentRangeWithMap(comment: CommentRange, writer: EmitTextWriter) { recordSourceMapSpan(comment.pos); - writeCommentRange(comment, writer); + writeCommentRange(comment, writer, currentSourceFile, newLine); recordSourceMapSpan(comment.end); } @@ -632,7 +1560,7 @@ module ts { function writeJavaScriptAndSourceMapFile(emitOutput: string, writeByteOrderMark: boolean) { // Write source map file encodeLastRecordedSourceMapSpan(); - writeFile(sourceMapData.sourceMapFilePath, serializeSourceMapContents( + writeFile(compilerHost, diagnostics, sourceMapData.sourceMapFilePath, serializeSourceMapContents( 3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, @@ -671,7 +1599,7 @@ module ts { if (root) { // emitting single module file // For modules or multiple emit files the mapRoot will have directory structure like the sources // So if src\a.ts and src\lib\b.ts are compiled together user would be moving the maps into mapRoot\a.js.map and mapRoot\lib\b.js.map - sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); + sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(program, sourceMapDir, root)); } if (!isRootedDiskPath(sourceMapDir) && !isUrl(sourceMapDir)) { @@ -717,7 +1645,7 @@ module ts { } function writeJavaScriptFile(emitOutput: string, writeByteOrderMark: boolean) { - writeFile(jsFilePath, emitOutput, writeByteOrderMark); + writeFile(compilerHost, diagnostics, jsFilePath, emitOutput, writeByteOrderMark); } function emitTokenText(tokenKind: SyntaxKind, startPos: number, emitFn?: () => void) { @@ -793,7 +1721,7 @@ module ts { } function emitLiteral(node: LiteralExpression) { - var text = getSourceTextOfLocalNode(node); + var text = getSourceTextOfLocalNode(node, currentSourceFile); if (node.kind === SyntaxKind.StringLiteral && compilerOptions.sourceMap) { writer.writeLiteral(text); } @@ -815,7 +1743,7 @@ module ts { write(node.text); } else { - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(node, currentSourceFile)); } write("\""); @@ -860,7 +1788,7 @@ module ts { write("."); } } - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(node, currentSourceFile)); } function emitThis(node: Node) { @@ -2198,9 +3126,9 @@ module ts { function emitLeadingDeclarationComments(node: Node) { var leadingComments = getLeadingCommentsToEmit(node); - emitNewLineBeforeLeadingComments(node, leadingComments, writer); + emitNewLineBeforeLeadingComments(node, leadingComments, writer, currentSourceFile); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(leadingComments, /*trailingSeparator*/ true, writer, writeComment); + emitComments(leadingComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); } function emitTrailingDeclarationComments(node: Node) { @@ -2208,7 +3136,7 @@ module ts { if (node.parent.kind === SyntaxKind.SourceFile || node.end !== node.parent.end) { var trailingComments = getTrailingCommentRanges(currentSourceFile.text, node.end); // trailing comments are emitted at space/*trailing comment1 */space/*trailing comment*/ - emitComments(trailingComments, /*trailingSeparator*/ false, writer, writeComment); + emitComments(trailingComments, /*trailingSeparator*/ false, writer, currentSourceFile, newLine, writeComment); } } @@ -2222,9 +3150,9 @@ module ts { // get the leading comments from the node leadingComments = getLeadingCommentRanges(currentSourceFile.text, pos); } - emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); + emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer, currentSourceFile); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(leadingComments, /*trailingSeparator*/ true, writer, writeComment); + emitComments(leadingComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); } function emitDetachedCommentsAtPosition(node: TextRange) { @@ -2235,8 +3163,8 @@ module ts { forEach(leadingComments, comment => { if (lastComment) { - var lastCommentLine = getLineOfLocalPosition(lastComment.end); - var commentLine = getLineOfLocalPosition(comment.pos); + var lastCommentLine = getLineOfLocalPosition(lastComment.end, currentSourceFile); + var commentLine = getLineOfLocalPosition(comment.pos, currentSourceFile); if (commentLine >= lastCommentLine + 2) { // There was a blank line between the last comment and this comment. This @@ -2254,12 +3182,12 @@ module ts { // All comments look like they could have been part of the copyright header. Make // sure there is at least one blank line between it and the node. If not, it's not // a copyright header. - var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); - var astLine = getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node.pos)); + var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end, currentSourceFile); + var astLine = getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node.pos), currentSourceFile); if (astLine >= lastCommentLine + 2) { // Valid detachedComments - emitNewLineBeforeLeadingComments(node, leadingComments, writer); - emitComments(detachedComments, /*trailingSeparator*/ true, writer, writeComment); + emitNewLineBeforeLeadingComments(node, leadingComments, writer, currentSourceFile); + emitComments(detachedComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; if (detachedCommentsInfo) { detachedCommentsInfo.push(currentDetachedCommentInfo); @@ -2289,9 +3217,9 @@ module ts { } } - emitNewLineBeforeLeadingComments(node, pinnedComments, writer); + emitNewLineBeforeLeadingComments(node, pinnedComments, writer, currentSourceFile); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(pinnedComments, /*trailingSeparator*/ true, writer, writeComment); + emitComments(pinnedComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); } if (compilerOptions.sourceMap) { @@ -2313,931 +3241,12 @@ module ts { writeEmittedFiles(writer.getText(), /*writeByteOrderMark*/ compilerOptions.emitBOM); } - function emitDeclarations(jsFilePath: string, root?: SourceFile) { - var writer = createTextWriter(trackSymbol); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; - - var enclosingDeclaration: Node; - var reportedDeclarationError = false; - - var emitJsDocComments = compilerOptions.removeComments ? function (declaration: Declaration) { } : writeJsDocComments; - - var aliasDeclarationEmitInfo: { - declaration: ImportDeclaration; - outputPos: number; - indent: number; - asynchronousOutput?: string; // If the output for alias was written asynchronously, the corresponding output - }[] = []; - - var getSymbolVisibilityDiagnosticMessage: (symbolAccesibilityResult: SymbolAccessiblityResult) => { - errorNode: Node; - diagnosticMessage: DiagnosticMessage; - typeName?: Identifier - } - - function writeAsychronousImportDeclarations(importDeclarations: ImportDeclaration[]) { - var oldWriter = writer; - forEach(importDeclarations, aliasToWrite => { - var aliasEmitInfo = forEach(aliasDeclarationEmitInfo, declEmitInfo => declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined); - writer = createTextWriter(trackSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); - } - - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); - }); - writer = oldWriter; - } - - function trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags) { - var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); - if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { - - // write the aliases - if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - // Report error - reportedDeclarationError = true; - var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); - if (errorInfo) { - if (errorInfo.typeName) { - diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, - errorInfo.diagnosticMessage, - getSourceTextOfLocalNode(errorInfo.typeName), - symbolAccesibilityResult.errorSymbolName, - symbolAccesibilityResult.errorModuleName)); - } - else { - diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, - errorInfo.diagnosticMessage, - symbolAccesibilityResult.errorSymbolName, - symbolAccesibilityResult.errorModuleName)); - } - } - } - } - - function emitLines(nodes: Node[]) { - for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); - } - } - - function emitCommaList(nodes: Node[], eachNodeEmitFn: (node: Node) => void) { - var currentWriterPos = writer.getTextPos(); - for (var i = 0, n = nodes.length; i < n; i++) { - if (currentWriterPos !== writer.getTextPos()) { - write(", "); - } - currentWriterPos = writer.getTextPos(); - eachNodeEmitFn(nodes[i]); - } - } - - function writeJsDocComments(declaration: Declaration) { - if (declaration) { - var jsDocComments = getJsDocComments(declaration, currentSourceFile); - emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); - // jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(jsDocComments, /*trailingSeparator*/ true, writer, writeCommentRange); - } - } - - function emitSourceTextOfNode(node: Node) { - write(getSourceTextOfLocalNode(node)); - } - - function emitSourceFile(node: SourceFile) { - currentSourceFile = node; - enclosingDeclaration = node; - emitLines(node.statements); - } - - function emitExportAssignment(node: ExportAssignment) { - write("export = "); - emitSourceTextOfNode(node.exportName); - write(";"); - writeLine(); - } - - function emitDeclarationFlags(node: Declaration) { - if (node.flags & NodeFlags.Static) { - if (node.flags & NodeFlags.Private) { - write("private "); - } - else if (node.flags & NodeFlags.Protected) { - write("protected "); - } - write("static "); - } - else { - if (node.flags & NodeFlags.Private) { - write("private "); - } - else if (node.flags & NodeFlags.Protected) { - write("protected "); - } - // If the node is parented in the current source file we need to emit export declare or just export - else if (node.parent === currentSourceFile) { - // If the node is exported - if (node.flags & NodeFlags.Export) { - write("export "); - } - - if (node.kind !== SyntaxKind.InterfaceDeclaration) { - write("declare "); - } - } - } - } - - function emitImportDeclaration(node: ImportDeclaration) { - var nodeEmitInfo = { - declaration: node, - outputPos: writer.getTextPos(), - indent: writer.getIndent(), - hasWritten: resolver.isDeclarationVisible(node) - }; - aliasDeclarationEmitInfo.push(nodeEmitInfo); - if (nodeEmitInfo.hasWritten) { - writeImportDeclaration(node); - } - } - - function writeImportDeclaration(node: ImportDeclaration) { - // note usage of writer. methods instead of aliases created, just to make sure we are using - // correct writer especially to handle asynchronous alias writing - emitJsDocComments(node); - if (node.flags & NodeFlags.Export) { - writer.write("export "); - } - writer.write("import "); - writer.write(getSourceTextOfLocalNode(node.name)); - writer.write(" = "); - if (node.entityName) { - checkEntityNameAccessible(); - writer.write(getSourceTextOfLocalNode(node.entityName)); - writer.write(";"); - } - else { - writer.write("require("); - writer.write(getSourceTextOfLocalNode(node.externalModuleName)); - writer.write(");"); - } - writer.writeLine(); - - function checkEntityNameAccessible() { - var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); - if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { - // write the aliases - if (symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - // Report error - reportedDeclarationError = true; - diagnostics.push(createDiagnosticForNode(node, - Diagnostics.Import_declaration_0_is_using_private_name_1, - getSourceTextOfLocalNode(node.name), - symbolAccesibilityResult.errorSymbolName)); - } - } - } - - function emitModuleDeclaration(node: ModuleDeclaration) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("module "); - emitSourceTextOfNode(node.name); - while (node.body.kind !== SyntaxKind.ModuleBlock) { - node = node.body; - write("."); - emitSourceTextOfNode(node.name); - } - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - write(" {"); - writeLine(); - increaseIndent(); - emitLines((node.body).statements); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - - function emitEnumDeclaration(node: EnumDeclaration) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("enum "); - emitSourceTextOfNode(node.name); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - } - } - - function emitEnumMemberDeclaration(node: EnumMember) { - emitJsDocComments(node); - emitSourceTextOfNode(node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); - if (enumMemberValue !== undefined) { - write(" = "); - write(enumMemberValue.toString()); - } - write(","); - writeLine(); - } - - function emitTypeParameters(typeParameters: TypeParameterDeclaration[]) { - function emitTypeParameter(node: TypeParameterDeclaration) { - function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - // Type parameter constraints are named by user so we should always be able to name it - var diagnosticMessage: DiagnosticMessage; - switch (node.parent.kind) { - case SyntaxKind.ClassDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; - break; - - case SyntaxKind.InterfaceDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; - break; - - case SyntaxKind.ConstructSignature: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - - case SyntaxKind.CallSignature: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - - case SyntaxKind.Method: - if (node.parent.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - - case SyntaxKind.FunctionDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - - default: - Debug.fail("This is unknown parent for type parameter: " + SyntaxKind[node.parent.kind]); - } - - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - - increaseIndent(); - emitJsDocComments(node); - decreaseIndent(); - emitSourceTextOfNode(node.name); - // If there is constraint present and this is not a type parameter of the private method emit the constraint - if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { - write(" extends "); - getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } - } - - if (typeParameters) { - write("<"); - emitCommaList(typeParameters, emitTypeParameter); - write(">"); - } - } - - function emitHeritageClause(typeReferences: TypeReferenceNode[], isImplementsList: boolean) { - if (typeReferences) { - write(isImplementsList ? " implements " : " extends "); - emitCommaList(typeReferences, emitTypeOfTypeReference); - } - - function emitTypeOfTypeReference(node: Node) { - getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.WriteArrayAsGenericType | TypeFormatFlags.UseTypeOfFunction, writer); - - function getHeritageClauseVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage: DiagnosticMessage; - // Heritage clause is written by user so it can always be named - if (node.parent.kind === SyntaxKind.ClassDeclaration) { - // Class - if (symbolAccesibilityResult.errorModuleName) { - // Module is inaccessible - diagnosticMessage = isImplementsList ? - Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - // Class or Interface implemented/extended is inaccessible - diagnosticMessage = isImplementsList ? - Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : - Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } - } - else { - if (symbolAccesibilityResult.errorModuleName) { - // Module is inaccessible - diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - // interface is inaccessible - diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } - } - - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: (node.parent).name - }; - } - } - } - - function emitClassDeclaration(node: ClassDeclaration) { - function emitParameterProperties(constructorDeclaration: ConstructorDeclaration) { - if (constructorDeclaration) { - forEach(constructorDeclaration.parameters, param => { - if (param.flags & NodeFlags.AccessibilityModifier) { - emitPropertyDeclaration(param); - } - }); - } - } - - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("class "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - if (node.baseType) { - emitHeritageClause([node.baseType], /*isImplementsList*/ false); - } - emitHeritageClause(node.implementedTypes, /*isImplementsList*/ true); - write(" {"); - writeLine(); - increaseIndent(); - emitParameterProperties(getFirstConstructorWithBody(node)); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - - function emitInterfaceDeclaration(node: InterfaceDeclaration) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("interface "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - emitHeritageClause(node.baseTypes, /*isImplementsList*/ false); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - - function emitPropertyDeclaration(node: PropertyDeclaration) { - emitJsDocComments(node); - emitDeclarationFlags(node); - emitVariableDeclaration(node); - write(";"); - writeLine(); - } - - function emitVariableDeclaration(node: VariableDeclaration) { - // If we are emitting property it isn't moduleElement and hence we already know it needs to be emitted - // so there is no check needed to see if declaration is visible - if (node.kind !== SyntaxKind.VariableDeclaration || resolver.isDeclarationVisible(node)) { - emitSourceTextOfNode(node.name); - // If optional property emit ? - if (node.kind === SyntaxKind.Property && (node.flags & NodeFlags.QuestionMark)) { - write("?"); - } - if (!(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } - } - - function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage: DiagnosticMessage; - if (node.kind === SyntaxKind.VariableDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; - } - // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit - else if (node.kind === SyntaxKind.Property) { - if (node.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.kind === SyntaxKind.ClassDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else { - // Interfaces cannot have types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; - } - } - - return diagnosticMessage !== undefined ? { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - } : undefined; - } - } - - function emitVariableStatement(node: VariableStatement) { - var hasDeclarationWithEmit = forEach(node.declarations, varDeclaration => resolver.isDeclarationVisible(varDeclaration)); - if (hasDeclarationWithEmit) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("var "); - emitCommaList(node.declarations, emitVariableDeclaration); - write(";"); - writeLine(); - } - } - - function emitAccessorDeclaration(node: AccessorDeclaration) { - var accessors = getAllAccessorDeclarations(node.parent, node); - if (node === accessors.firstAccessor) { - emitJsDocComments(accessors.getAccessor); - emitJsDocComments(accessors.setAccessor); - emitDeclarationFlags(node); - emitSourceTextOfNode(node.name); - if (!(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } - write(";"); - writeLine(); - } - - function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage: DiagnosticMessage; - if (node.kind === SyntaxKind.SetAccessor) { - // Setters have to have type named and cannot infer it so, the type should always be named - if (node.parent.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.parameters[0], - typeName: node.name - }; - } - else { - if (node.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : - Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : - Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name, - typeName: undefined - }; - } - } - } - - function emitFunctionDeclaration(node: FunctionDeclaration) { - // If we are emitting Method/Constructor it isn't moduleElement and hence already determined to be emitting - // so no need to verify if the declaration is visible - if ((node.kind !== SyntaxKind.FunctionDeclaration || resolver.isDeclarationVisible(node)) && - !resolver.isImplementationOfOverload(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - if (node.kind === SyntaxKind.FunctionDeclaration) { - write("function "); - emitSourceTextOfNode(node.name); - } - else if (node.kind === SyntaxKind.Constructor) { - write("constructor"); - } - else { - emitSourceTextOfNode(node.name); - if (node.flags & NodeFlags.QuestionMark) { - write("?"); - } - } - emitSignatureDeclaration(node); - } - } - - function emitConstructSignatureDeclaration(node: SignatureDeclaration) { - emitJsDocComments(node); - write("new "); - emitSignatureDeclaration(node); - } - - function emitSignatureDeclaration(node: SignatureDeclaration) { - if (node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.IndexSignature) { - // Only index and call signatures are emitted directly, so emit their js doc comments, rest will do that in their own functions - emitJsDocComments(node); - } - emitTypeParameters(node.typeParameters); - if (node.kind === SyntaxKind.IndexSignature) { - write("["); - } - else { - write("("); - } - - // Parameters - emitCommaList(node.parameters, emitParameterDeclaration); - - if (node.kind === SyntaxKind.IndexSignature) { - write("]"); - } - else { - write(")"); - } - - // If this is not a constructor and is not private, emit the return type - if (node.kind !== SyntaxKind.Constructor && !(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } - write(";"); - writeLine(); - - function getReturnTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage: DiagnosticMessage; - switch (node.kind) { - case SyntaxKind.ConstructSignature: - // Interfaces cannot have return types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - - case SyntaxKind.CallSignature: - // Interfaces cannot have return types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - - case SyntaxKind.IndexSignature: - // Interfaces cannot have return types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - - case SyntaxKind.Method: - if (node.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : - Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; - } - else if (node.parent.kind === SyntaxKind.ClassDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : - Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; - } - else { - // Interfaces cannot have return types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; - } - break; - - case SyntaxKind.FunctionDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : - Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : - Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; - break; - - default: - Debug.fail("This is unknown kind for signature: " + SyntaxKind[node.kind]); - } - - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name || node, - }; - } - } - - function emitParameterDeclaration(node: ParameterDeclaration) { - increaseIndent(); - emitJsDocComments(node); - if (node.flags & NodeFlags.Rest) { - write("..."); - } - emitSourceTextOfNode(node.name); - if (node.initializer || (node.flags & NodeFlags.QuestionMark)) { - write("?"); - } - decreaseIndent(); - - if (!(node.parent.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } - - function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage: DiagnosticMessage; - switch (node.parent.kind) { - case SyntaxKind.Constructor: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; - break; - - case SyntaxKind.ConstructSignature: - // Interfaces cannot have parameter types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - - case SyntaxKind.CallSignature: - // Interfaces cannot have parameter types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - - case SyntaxKind.Method: - if (node.parent.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - // Interfaces cannot have parameter types that cannot be named - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - - case SyntaxKind.FunctionDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - - default: - Debug.fail("This is unknown parent for parameter: " + SyntaxKind[node.parent.kind]); - } - - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - } - - function emitNode(node: Node) { - switch (node.kind) { - case SyntaxKind.Constructor: - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.Method: - return emitFunctionDeclaration(node); - case SyntaxKind.ConstructSignature: - return emitConstructSignatureDeclaration(node); - case SyntaxKind.CallSignature: - case SyntaxKind.IndexSignature: - return emitSignatureDeclaration(node); - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - return emitAccessorDeclaration(node); - case SyntaxKind.VariableStatement: - return emitVariableStatement(node); - case SyntaxKind.Property: - return emitPropertyDeclaration(node); - case SyntaxKind.InterfaceDeclaration: - return emitInterfaceDeclaration(node); - case SyntaxKind.ClassDeclaration: - return emitClassDeclaration(node); - case SyntaxKind.EnumMember: - return emitEnumMemberDeclaration(node); - case SyntaxKind.EnumDeclaration: - return emitEnumDeclaration(node); - case SyntaxKind.ModuleDeclaration: - return emitModuleDeclaration(node); - case SyntaxKind.ImportDeclaration: - return emitImportDeclaration(node); - case SyntaxKind.ExportAssignment: - return emitExportAssignment(node); - case SyntaxKind.SourceFile: - return emitSourceFile(node); - } - } - - function tryResolveScriptReference(sourceFile: SourceFile, reference: FileReference) { - var referenceFileName = normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename)); - return program.getSourceFile(referenceFileName); - } - - // Contains the reference paths that needs to go in the declaration file. - // Collecting this separately because reference paths need to be first thing in the declaration file - // and we could be collecting these paths from multiple files into single one with --out option - var referencePathsOutput = ""; - function writeReferencePath(referencedFile: SourceFile) { - var declFileName = referencedFile.flags & NodeFlags.DeclarationFile - ? referencedFile.filename // Declaration file, use declaration file name - : shouldEmitToOwnFile(referencedFile, compilerOptions) - ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") // Own output file so get the .d.ts file - : removeFileExtension(compilerOptions.out) + ".d.ts";// Global out file - - declFileName = getRelativePathToDirectoryOrUrl( - getDirectoryPath(normalizeSlashes(jsFilePath)), - declFileName, - compilerHost.getCurrentDirectory(), - compilerHost.getCanonicalFileName, - /*isAbsolutePathAnUrl*/ false); - - referencePathsOutput += "/// " + newLine; - } - - if (root) { - // Emitting just a single file, so emit references in this file only - if (!compilerOptions.noResolve) { - var addedGlobalFileReference = false; - forEach(root.referencedFiles, fileReference => { - var referencedFile = tryResolveScriptReference(root, fileReference); - - // All the references that are not going to be part of same file - if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference - 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 - - writeReferencePath(referencedFile); - if (!isExternalModuleOrDeclarationFile(referencedFile)) { - addedGlobalFileReference = true; - } - } - }); - } - - emitNode(root); - } - else { - // Emit references corresponding to this file - var emittedReferencedFiles: SourceFile[] = []; - forEach(program.getSourceFiles(), sourceFile => { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - // Check what references need to be added - if (!compilerOptions.noResolve) { - forEach(sourceFile.referencedFiles, fileReference => { - var referencedFile = tryResolveScriptReference(sourceFile, fileReference); - - // If the reference file is a declaration file or an external module, emit that reference - if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && - !contains(emittedReferencedFiles, referencedFile))) { // If the file reference was not already emitted - - writeReferencePath(referencedFile); - emittedReferencedFiles.push(referencedFile); - } - }); - } - - emitNode(sourceFile); - } - }); - } - - // TODO(shkamat): Should we not write any declaration file if any of them can produce error, - // or should we just not write this file like we are doing now - if (!reportedDeclarationError) { - var declarationOutput = referencePathsOutput; - var synchronousDeclarationOutput = writer.getText(); - // apply additions - var appliedSyncOutputPos = 0; - forEach(aliasDeclarationEmitInfo, aliasEmitInfo => { - if (aliasEmitInfo.asynchronousOutput) { - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); - declarationOutput += aliasEmitInfo.asynchronousOutput; - appliedSyncOutputPos = aliasEmitInfo.outputPos; - } - }); - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); - writeFile(removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); - } - } - var hasSemanticErrors = resolver.hasSemanticErrors(); function emitFile(jsFilePath: string, sourceFile?: SourceFile) { emitJavaScript(jsFilePath, sourceFile); if (!hasSemanticErrors && compilerOptions.declaration) { - emitDeclarations(jsFilePath, sourceFile); + emitDeclarations(resolver, program, diagnostics, jsFilePath, sourceFile); } } @@ -3245,7 +3254,7 @@ module ts { // No targetSourceFile is specified (e.g. calling emitter from batch compiler) forEach(program.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(program, sourceFile, ".js"); emitFile(jsFilePath, sourceFile); } }); @@ -3258,7 +3267,7 @@ module ts { // targetSourceFile is specified (e.g calling emitter from language service or calling getSemanticDiagnostic from language service) if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { // If shouldEmitToOwnFile returns true or targetSourceFile is an external module file, then emit targetSourceFile in its own output file - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(program, targetSourceFile, ".js"); emitFile(jsFilePath, targetSourceFile); } else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { From cc48fc3efd09d2b92ea6d423b5b6df9c972315ae Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Oct 2014 10:53:57 -0700 Subject: [PATCH 002/178] Refactoring parameters formatting --- src/compiler/checker.ts | 4 +- src/compiler/emitter.ts | 89 ++++++++++++++++++++--------------------- src/compiler/types.ts | 2 +- 3 files changed, 47 insertions(+), 48 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 952600b6017..4ffcc52ff3f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -923,7 +923,7 @@ module ts { } } - function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName: EntityName): SymbolAccessiblityResult { + function isImportDeclarationEntityNameReferenceDeclarationVisible(entityName: EntityName): SymbolAccessiblityResult { var firstIdentifier = getFirstIdentifier(entityName); var firstIdentifierName = identifierToString(firstIdentifier); var symbolOfNameSpace = resolveName(entityName.parent, (firstIdentifier).text, SymbolFlags.Namespace, Diagnostics.Cannot_find_name_0, firstIdentifierName); @@ -7695,7 +7695,7 @@ module ts { writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, isSymbolAccessible: isSymbolAccessible, - isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile, + isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, getConstantValue: getConstantValue, }; checkProgram(); diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index b683757ccfb..0e6faed45a4 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -112,36 +112,35 @@ module ts { }; } - // Get source text of node in the current source file. Unlike getSourceTextOfNode this function // doesn't walk the parent chain to find the containing source file, rather it assumes the node is // in the source file currently being processed. - function getSourceTextOfLocalNode(node: Node, currentSourceFile: SourceFile): string { + function getSourceTextOfLocalNode(currentSourceFile: SourceFile, node: Node): string { var text = currentSourceFile.text; return text.substring(skipTrivia(text, node.pos), node.end); } - function getLineOfLocalPosition(pos: number, currentSourceFile: SourceFile) { + function getLineOfLocalPosition(currentSourceFile: SourceFile, pos: number) { return currentSourceFile.getLineAndCharacterFromPosition(pos).line; } - function emitNewLineBeforeLeadingComments(node: TextRange, leadingComments: CommentRange[], writer: EmitTextWriter, currentSourceFile: SourceFile) { + function emitNewLineBeforeLeadingComments(currentSourceFile: SourceFile, writer: EmitTextWriter, node: TextRange, leadingComments: CommentRange[]) { // If the leading comments start on different line than the start of node, write new line if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && - getLineOfLocalPosition(node.pos, currentSourceFile) !== getLineOfLocalPosition(leadingComments[0].pos, currentSourceFile)) { + getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) { writer.writeLine(); } } - function emitComments(comments: CommentRange[], trailingSeparator: boolean, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string, - writeComment: (comment: CommentRange, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string) => void) { + function emitComments(currentSourceFile: SourceFile, writer: EmitTextWriter, comments: CommentRange[], trailingSeparator: boolean, newLine: string, + writeComment: (currentSourceFile: SourceFile, writer: EmitTextWriter, comment: CommentRange, newLine: string) => void) { var emitLeadingSpace = !trailingSeparator; forEach(comments, comment => { if (emitLeadingSpace) { writer.write(" "); emitLeadingSpace = false; } - writeComment(comment, writer, currentSourceFile, newLine); + writeComment(currentSourceFile, writer, comment, newLine); if (comment.hasTrailingNewLine) { writer.writeLine(); } @@ -155,7 +154,7 @@ module ts { }); } - function writeCommentRange(comment: CommentRange, writer: EmitTextWriter, currentSourceFile: SourceFile, newLine: string) { + function writeCommentRange(currentSourceFile: SourceFile, writer: EmitTextWriter, comment: CommentRange, newLine: string){ if (currentSourceFile.text.charCodeAt(comment.pos + 1) === CharacterCodes.asterisk) { var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); var firstCommentLineIndent: number; @@ -286,17 +285,17 @@ module ts { }; } - function getSourceFilePathInNewDir(program: Program, newDirPath: string, sourceFile: SourceFile) { + function getSourceFilePathInNewDir(sourceFile: SourceFile, program: Program, newDirPath: string) { var compilerHost = program.getCompilerHost(); var sourceFilePath = getNormalizedPathFromPathComponents(getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); return combinePaths(newDirPath, sourceFilePath); } - function getOwnEmitOutputFilePath(program: Program, sourceFile: SourceFile, extension: string) { + function getOwnEmitOutputFilePath(sourceFile: SourceFile, program: Program, extension: string){ var compilerOptions = program.getCompilerOptions(); if (compilerOptions.outDir) { - var emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(program, compilerOptions.outDir, sourceFile)); + var emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(sourceFile, program, compilerOptions.outDir)); } else { var emitOutputFilePathWithoutExtension = removeFileExtension(sourceFile.filename); @@ -311,7 +310,7 @@ module ts { }); } - function emitDeclarations(resolver: EmitResolver, program: Program, diagnostics: Diagnostic[], jsFilePath: string, root?: SourceFile) { + function emitDeclarations(program: Program, resolver: EmitResolver, diagnostics: Diagnostic[], jsFilePath: string, root?: SourceFile) { var newLine = program.getCompilerHost().getNewLine(); var compilerOptions = program.getCompilerOptions(); var compilerHost = program.getCompilerHost(); @@ -372,7 +371,7 @@ module ts { if (errorInfo.typeName) { diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, - getSourceTextOfLocalNode(errorInfo.typeName, currentSourceFile), + getSourceTextOfLocalNode(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); } @@ -406,14 +405,14 @@ module ts { function writeJsDocComments(declaration: Declaration) { if (declaration) { var jsDocComments = getJsDocComments(declaration, currentSourceFile); - emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments); // jsDoc comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(jsDocComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeCommentRange); + emitComments(currentSourceFile, writer, jsDocComments, /*trailingSeparator*/ true, newLine, writeCommentRange); } } function emitSourceTextOfNode(node: Node) { - write(getSourceTextOfLocalNode(node, currentSourceFile)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } function emitSourceFile(node: SourceFile) { @@ -481,22 +480,22 @@ module ts { writer.write("export "); } writer.write("import "); - writer.write(getSourceTextOfLocalNode(node.name, currentSourceFile)); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.name)); writer.write(" = "); if (node.entityName) { checkEntityNameAccessible(); - writer.write(getSourceTextOfLocalNode(node.entityName, currentSourceFile)); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.entityName)); writer.write(";"); } else { writer.write("require("); - writer.write(getSourceTextOfLocalNode(node.externalModuleName, currentSourceFile)); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.externalModuleName)); writer.write(");"); } writer.writeLine(); function checkEntityNameAccessible() { - var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisible(node.entityName); if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { // write the aliases if (symbolAccesibilityResult.aliasesToMakeVisible) { @@ -508,7 +507,7 @@ module ts { reportedDeclarationError = true; diagnostics.push(createDiagnosticForNode(node, Diagnostics.Import_declaration_0_is_using_private_name_1, - getSourceTextOfLocalNode(node.name, currentSourceFile), + getSourceTextOfLocalNode(currentSourceFile, node.name), symbolAccesibilityResult.errorSymbolName)); } } @@ -1155,7 +1154,7 @@ module ts { var declFileName = referencedFile.flags & NodeFlags.DeclarationFile ? referencedFile.filename // Declaration file, use declaration file name : shouldEmitToOwnFile(referencedFile, compilerOptions) - ? getOwnEmitOutputFilePath(program, referencedFile, ".d.ts") // Own output file so get the .d.ts file + ? getOwnEmitOutputFilePath(referencedFile, program, ".d.ts") // Own output file so get the .d.ts file : removeFileExtension(compilerOptions.out) + ".d.ts";// Global out file declFileName = getRelativePathToDirectoryOrUrl( @@ -1525,9 +1524,9 @@ module ts { sourceMapNameIndices.pop(); }; - function writeCommentRangeWithMap(comment: CommentRange, writer: EmitTextWriter) { + function writeCommentRangeWithMap(curentSourceFile: SourceFile, writer: EmitTextWriter, comment: CommentRange, newLine: string) { recordSourceMapSpan(comment.pos); - writeCommentRange(comment, writer, currentSourceFile, newLine); + writeCommentRange(currentSourceFile, writer, comment, newLine); recordSourceMapSpan(comment.end); } @@ -1599,7 +1598,7 @@ module ts { if (root) { // emitting single module file // For modules or multiple emit files the mapRoot will have directory structure like the sources // So if src\a.ts and src\lib\b.ts are compiled together user would be moving the maps into mapRoot\a.js.map and mapRoot\lib\b.js.map - sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(program, sourceMapDir, root)); + sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(root, program, sourceMapDir)); } if (!isRootedDiskPath(sourceMapDir) && !isUrl(sourceMapDir)) { @@ -1721,7 +1720,7 @@ module ts { } function emitLiteral(node: LiteralExpression) { - var text = getSourceTextOfLocalNode(node, currentSourceFile); + var text = getSourceTextOfLocalNode(currentSourceFile, node); if (node.kind === SyntaxKind.StringLiteral && compilerOptions.sourceMap) { writer.writeLiteral(text); } @@ -1743,7 +1742,7 @@ module ts { write(node.text); } else { - write(getSourceTextOfLocalNode(node, currentSourceFile)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } write("\""); @@ -1788,7 +1787,7 @@ module ts { write("."); } } - write(getSourceTextOfLocalNode(node, currentSourceFile)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } function emitThis(node: Node) { @@ -3126,9 +3125,9 @@ module ts { function emitLeadingDeclarationComments(node: Node) { var leadingComments = getLeadingCommentsToEmit(node); - emitNewLineBeforeLeadingComments(node, leadingComments, writer, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(leadingComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); + emitComments(currentSourceFile, writer, leadingComments, /*trailingSeparator*/ true, newLine, writeComment); } function emitTrailingDeclarationComments(node: Node) { @@ -3136,7 +3135,7 @@ module ts { if (node.parent.kind === SyntaxKind.SourceFile || node.end !== node.parent.end) { var trailingComments = getTrailingCommentRanges(currentSourceFile.text, node.end); // trailing comments are emitted at space/*trailing comment1 */space/*trailing comment*/ - emitComments(trailingComments, /*trailingSeparator*/ false, writer, currentSourceFile, newLine, writeComment); + emitComments(currentSourceFile, writer, trailingComments, /*trailingSeparator*/ false, newLine, writeComment); } } @@ -3150,9 +3149,9 @@ module ts { // get the leading comments from the node leadingComments = getLeadingCommentRanges(currentSourceFile.text, pos); } - emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(leadingComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); + emitComments(currentSourceFile, writer, leadingComments, /*trailingSeparator*/ true, newLine, writeComment); } function emitDetachedCommentsAtPosition(node: TextRange) { @@ -3163,8 +3162,8 @@ module ts { forEach(leadingComments, comment => { if (lastComment) { - var lastCommentLine = getLineOfLocalPosition(lastComment.end, currentSourceFile); - var commentLine = getLineOfLocalPosition(comment.pos, currentSourceFile); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, lastComment.end); + var commentLine = getLineOfLocalPosition(currentSourceFile, comment.pos); if (commentLine >= lastCommentLine + 2) { // There was a blank line between the last comment and this comment. This @@ -3182,12 +3181,12 @@ module ts { // All comments look like they could have been part of the copyright header. Make // sure there is at least one blank line between it and the node. If not, it's not // a copyright header. - var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end, currentSourceFile); - var astLine = getLineOfLocalPosition(skipTrivia(currentSourceFile.text, node.pos), currentSourceFile); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(currentSourceFile, skipTrivia(currentSourceFile.text, node.pos)); if (astLine >= lastCommentLine + 2) { // Valid detachedComments - emitNewLineBeforeLeadingComments(node, leadingComments, writer, currentSourceFile); - emitComments(detachedComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); + emitComments(currentSourceFile, writer, detachedComments, /*trailingSeparator*/ true, newLine, writeComment); var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; if (detachedCommentsInfo) { detachedCommentsInfo.push(currentDetachedCommentInfo); @@ -3217,9 +3216,9 @@ module ts { } } - emitNewLineBeforeLeadingComments(node, pinnedComments, writer, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments); // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space - emitComments(pinnedComments, /*trailingSeparator*/ true, writer, currentSourceFile, newLine, writeComment); + emitComments(currentSourceFile, writer, pinnedComments, /*trailingSeparator*/ true, newLine, writeComment); } if (compilerOptions.sourceMap) { @@ -3246,7 +3245,7 @@ module ts { function emitFile(jsFilePath: string, sourceFile?: SourceFile) { emitJavaScript(jsFilePath, sourceFile); if (!hasSemanticErrors && compilerOptions.declaration) { - emitDeclarations(resolver, program, diagnostics, jsFilePath, sourceFile); + emitDeclarations(program, resolver, diagnostics, jsFilePath, sourceFile); } } @@ -3254,7 +3253,7 @@ module ts { // No targetSourceFile is specified (e.g. calling emitter from batch compiler) forEach(program.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(program, sourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, program, ".js"); emitFile(jsFilePath, sourceFile); } }); @@ -3267,7 +3266,7 @@ module ts { // targetSourceFile is specified (e.g calling emitter from language service or calling getSemanticDiagnostic from language service) if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { // If shouldEmitToOwnFile returns true or targetSourceFile is an external module file, then emit targetSourceFile in its own output file - var jsFilePath = getOwnEmitOutputFilePath(program, targetSourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); emitFile(jsFilePath, targetSourceFile); } else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 2a291c828cd..289f07b040a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -725,7 +725,7 @@ module ts { writeTypeAtLocation(location: Node, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): SymbolAccessiblityResult; - isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName: EntityName): SymbolAccessiblityResult; + isImportDeclarationEntityNameReferenceDeclarationVisible(entityName: EntityName): SymbolAccessiblityResult; // Returns the constant value this property access resolves to, or 'undefined' if it does // resolve to a constant. From 848bfe716060822168fdb1103ae9a3d0e9c73435 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Oct 2014 12:41:26 -0700 Subject: [PATCH 003/178] Update language service to use getDeclarationDiagnostics instead of emitFile to get declaration errors --- src/compiler/checker.ts | 24 ++++++++++++++++++++++++ src/compiler/emitter.ts | 7 +++++++ src/compiler/types.ts | 1 + src/services/services.ts | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4ffcc52ff3f..41ef9264c0b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -71,6 +71,7 @@ module ts { var checker: TypeChecker = { getProgram: () => program, getDiagnostics: getDiagnostics, + getDeclarationDiagnostics: getDeclarationDiagnosticsFromSourceFile, getGlobalDiagnostics: getGlobalDiagnostics, getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), @@ -7038,6 +7039,29 @@ module ts { return getSortedDiagnostics(); } + function getDeclarationDiagnosticsFromSourceFile(targetSourceFile: SourceFile): Diagnostic[] { + var resolver: EmitResolver = { + getProgram: () => program, + getLocalNameOfContainer: getLocalNameOfContainer, + getExpressionNamePrefix: getExpressionNamePrefix, + getExportAssignmentName: getExportAssignmentName, + isReferencedImportDeclaration: isReferencedImportDeclaration, + getNodeCheckFlags: getNodeCheckFlags, + getEnumMemberValue: getEnumMemberValue, + isTopLevelValueImportedViaEntityName: isTopLevelValueImportedViaEntityName, + hasSemanticErrors: hasSemanticErrors, + isDeclarationVisible: isDeclarationVisible, + isImplementationOfOverload: isImplementationOfOverload, + writeTypeAtLocation: writeTypeAtLocation, + writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, + isSymbolAccessible: isSymbolAccessible, + isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, + getConstantValue: getConstantValue, + }; + checkProgram(); + return getDeclarationDiagnostics(program, resolver, targetSourceFile); + } + function getGlobalDiagnostics(): Diagnostic[] { return filter(getSortedDiagnostics(), d => !d.file); } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 0e6faed45a4..edf026cb513 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1233,6 +1233,13 @@ module ts { } } + export function getDeclarationDiagnostics(program: Program, resolver: EmitResolver, targetSourceFile: SourceFile): Diagnostic[] { + var diagnostics: Diagnostic[] = []; + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); + emitDeclarations(program, resolver, diagnostics, jsFilePath, targetSourceFile); + return diagnostics; + } + // targetSourceFile is when users only want one file in entire project to be emitted. This is used in compilerOnSave feature export function emitFiles(resolver: EmitResolver, targetSourceFile?: SourceFile): EmitResult { var program = resolver.getProgram(); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 289f07b040a..70d33634d09 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -624,6 +624,7 @@ module ts { export interface TypeChecker { getProgram(): Program; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getNodeCount(): number; getIdentifierCount(): number; diff --git a/src/services/services.ts b/src/services/services.ts index 42f6160bd3e..6059a20233a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2206,7 +2206,7 @@ module ts { // Get emitter-diagnostics requires calling TypeChecker.emitFiles so we have to define CompilerHost.writer which does nothing because emitFiles function has side effects defined by CompilerHost.writer var savedWriter = writer; writer = (filename: string, data: string, writeByteOrderMark: boolean) => { }; - allDiagnostics = allDiagnostics.concat(checker.emitFiles(targetSourceFile).errors); + allDiagnostics = allDiagnostics.concat(checker.getDeclarationDiagnostics(targetSourceFile)); writer = savedWriter; } return allDiagnostics From 75949578ff56622ed841999425dab60044016f02 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Oct 2014 14:25:12 -0700 Subject: [PATCH 004/178] Add test case to make sure that we only report an error from target file --- .../fourslash/getDeclarationDiagnostics.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/cases/fourslash/getDeclarationDiagnostics.ts diff --git a/tests/cases/fourslash/getDeclarationDiagnostics.ts b/tests/cases/fourslash/getDeclarationDiagnostics.ts new file mode 100644 index 00000000000..3e87e0748b8 --- /dev/null +++ b/tests/cases/fourslash/getDeclarationDiagnostics.ts @@ -0,0 +1,20 @@ +/// + +// @declaration: true +// @out: true + +// @Filename: inputFile1.ts +//// module m { +//// export class C implements I { } +//// interface I { } +//// } /*1*/ + +// @Filename: input2.ts +//// var x = "hello world"; /*2*/ + +debugger; +goTo.marker("1"); +verify.numberOfErrorsInCurrentFile(1); + +goTo.marker("2"); +verify.numberOfErrorsInCurrentFile(0); From e556eaf513a83f1a085da0fe9545d16985b0da81 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 13 Oct 2014 16:00:37 -0700 Subject: [PATCH 005/178] Address code review --- src/compiler/checker.ts | 29 +++++-------------- .../fourslash/getDeclarationDiagnostics.ts | 1 - 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 41ef9264c0b..7df1bc1b6f1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7040,24 +7040,7 @@ module ts { } function getDeclarationDiagnosticsFromSourceFile(targetSourceFile: SourceFile): Diagnostic[] { - var resolver: EmitResolver = { - getProgram: () => program, - getLocalNameOfContainer: getLocalNameOfContainer, - getExpressionNamePrefix: getExpressionNamePrefix, - getExportAssignmentName: getExportAssignmentName, - isReferencedImportDeclaration: isReferencedImportDeclaration, - getNodeCheckFlags: getNodeCheckFlags, - getEnumMemberValue: getEnumMemberValue, - isTopLevelValueImportedViaEntityName: isTopLevelValueImportedViaEntityName, - hasSemanticErrors: hasSemanticErrors, - isDeclarationVisible: isDeclarationVisible, - isImplementationOfOverload: isImplementationOfOverload, - writeTypeAtLocation: writeTypeAtLocation, - writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, - isSymbolAccessible: isSymbolAccessible, - isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, - getConstantValue: getConstantValue, - }; + var resolver = createResolver(); checkProgram(); return getDeclarationDiagnostics(program, resolver, targetSourceFile); } @@ -7703,8 +7686,8 @@ module ts { writeType(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags); } - function invokeEmitter(targetSourceFile?: SourceFile) { - var resolver: EmitResolver = { + function createResolver(): EmitResolver { + return { getProgram: () => program, getLocalNameOfContainer: getLocalNameOfContainer, getExpressionNamePrefix: getExpressionNamePrefix, @@ -7721,7 +7704,11 @@ module ts { isSymbolAccessible: isSymbolAccessible, isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, getConstantValue: getConstantValue, - }; + } + } + + function invokeEmitter(targetSourceFile?: SourceFile) { + var resolver = createResolver(); checkProgram(); return emitFiles(resolver, targetSourceFile); } diff --git a/tests/cases/fourslash/getDeclarationDiagnostics.ts b/tests/cases/fourslash/getDeclarationDiagnostics.ts index 3e87e0748b8..693261d62b4 100644 --- a/tests/cases/fourslash/getDeclarationDiagnostics.ts +++ b/tests/cases/fourslash/getDeclarationDiagnostics.ts @@ -12,7 +12,6 @@ // @Filename: input2.ts //// var x = "hello world"; /*2*/ -debugger; goTo.marker("1"); verify.numberOfErrorsInCurrentFile(1); From a870b068342165f299d619833f0fc159e186ed5e Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Mon, 13 Oct 2014 18:25:51 -0700 Subject: [PATCH 006/178] Fix signature help crash when requested outside argument list --- src/services/formatting/smartIndenter.ts | 2 +- src/services/signatureHelp.ts | 8 ++------ src/services/utilities.ts | 16 +++++++++------- .../fourslash/noSignatureHelpOnNewKeyword.ts | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index 79b238c893d..12d36dd4d2b 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -108,7 +108,7 @@ module ts.formatting { function getActualIndentationForListItemBeforeComma(commaToken: Node, sourceFile: SourceFile, options: TypeScript.FormattingOptions): number { // previous token is comma that separates items in list - find the previous item and try to derive indentation from it var commaItemInfo = findListItemInfo(commaToken); - Debug.assert(commaItemInfo.listItemIndex > 0); + Debug.assert(commaItemInfo && commaItemInfo.listItemIndex > 0); // The item we're interested in is right before the comma return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options); } diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 273cfda99b8..d9d221ee65d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -226,12 +226,8 @@ module ts.SignatureHelp { }; } - if (node.kind === SyntaxKind.GreaterThanToken - || node.kind === SyntaxKind.CloseParenToken - || node === parent.func) { - return undefined; - } - + // findListItemInfo can return undefined if we are not in parent's argument list + // or type argument list. return findListItemInfo(node); } diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 4ceb20fdcee..5b77a2b84a5 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -7,6 +7,15 @@ module ts { export function findListItemInfo(node: Node): ListItemInfo { var syntaxList = findContainingList(node); + + // It is possible at this point for syntaxList to be undefined, either if + // node.parent had no list child, or if none of its list children contained + // the span of node. If this happens, return undefined. The caller should + // handle this case. + if (!syntaxList) { + return undefined; + } + var children = syntaxList.getChildren(); var index = indexOf(children, node); @@ -32,13 +41,6 @@ module ts { } }); - // syntaxList should not be undefined here. If it is, there is a problem. Find out if - // there at least is a child that is a list. - if (!syntaxList) { - Debug.assert(findChildOfKind(node.parent, SyntaxKind.SyntaxList), - "Node of kind " + SyntaxKind[node.parent.kind] + " has no list children"); - } - return syntaxList; } diff --git a/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts b/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts new file mode 100644 index 00000000000..30314b1c665 --- /dev/null +++ b/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts @@ -0,0 +1,14 @@ +/// + +////class Foo { } +////new/*1*/ Foo +////new /*2*/Foo(/*3*/) + +goTo.marker('1'); +verify.not.signatureHelpPresent(); + +goTo.marker('2'); +verify.not.signatureHelpPresent(); + +goTo.marker('3'); +verify.signatureHelpPresent(); \ No newline at end of file From 8b4bbb9311cb193ed1e310668c78da47d103078b Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 14 Oct 2014 11:23:36 -0700 Subject: [PATCH 007/178] Comment examples of when findListItemInfo can return undefined --- src/services/signatureHelp.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index d9d221ee65d..e9375818c11 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -227,7 +227,11 @@ module ts.SignatureHelp { } // findListItemInfo can return undefined if we are not in parent's argument list - // or type argument list. + // or type argument list. This includes cases where the cursor is: + // - To the right of the closing paren + // - Between the type arguments and the arguments (greater than token) + // - On the target of the call (parent.func) + // - On the 'new' keyword in a 'new' expression return findListItemInfo(node); } From ac68f93189499a2837b5a9944dba55c977710691 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 14 Oct 2014 12:16:26 -0700 Subject: [PATCH 008/178] Addres code review --- src/compiler/checker.ts | 8 +++--- src/compiler/emitter.ts | 59 ++++++++++++++++++++++++---------------- src/services/services.ts | 4 --- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7df1bc1b6f1..4adc69f43d7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -71,7 +71,7 @@ module ts { var checker: TypeChecker = { getProgram: () => program, getDiagnostics: getDiagnostics, - getDeclarationDiagnostics: getDeclarationDiagnosticsFromSourceFile, + getDeclarationDiagnostics: getDeclarationDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getNodeCount: () => sum(program.getSourceFiles(), "nodeCount"), getIdentifierCount: () => sum(program.getSourceFiles(), "identifierCount"), @@ -7039,10 +7039,10 @@ module ts { return getSortedDiagnostics(); } - function getDeclarationDiagnosticsFromSourceFile(targetSourceFile: SourceFile): Diagnostic[] { + function getDeclarationDiagnostics(targetSourceFile: SourceFile): Diagnostic[] { var resolver = createResolver(); - checkProgram(); - return getDeclarationDiagnostics(program, resolver, targetSourceFile); + checkSourceFile(targetSourceFile); + return ts.getDeclarationDiagnostics(program, resolver, targetSourceFile); } function getGlobalDiagnostics(): Diagnostic[] { diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index edf026cb513..008f4f49331 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -15,6 +15,13 @@ module ts { getIndent(): number; } + interface aliasDeclaration { + declaration: ImportDeclaration; + outputPos: number; + indent: number; + asynchronousOutput?: string; // If the output for alias was written asynchronously, the corresponding output + } + var indentStrings: string[] = ["", " "]; export function getIndentString(level: number) { if (indentStrings[level] === undefined) { @@ -326,12 +333,7 @@ module ts { var emitJsDocComments = compilerOptions.removeComments ? function (declaration: Declaration) { } : writeJsDocComments; - var aliasDeclarationEmitInfo: { - declaration: ImportDeclaration; - outputPos: number; - indent: number; - asynchronousOutput?: string; // If the output for alias was written asynchronously, the corresponding output - }[] = []; + var aliasDeclarationEmitInfo: aliasDeclaration[] = []; var getSymbolVisibilityDiagnosticMessage: (symbolAccesibilityResult: SymbolAccessiblityResult) => { errorNode: Node; @@ -1213,26 +1215,29 @@ module ts { } }); } - - // TODO(shkamat): Should we not write any declaration file if any of them can produce error, - // or should we just not write this file like we are doing now - if (!reportedDeclarationError) { - var declarationOutput = referencePathsOutput; - var synchronousDeclarationOutput = writer.getText(); - // apply additions - var appliedSyncOutputPos = 0; - forEach(aliasDeclarationEmitInfo, aliasEmitInfo => { - if (aliasEmitInfo.asynchronousOutput) { - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); - declarationOutput += aliasEmitInfo.asynchronousOutput; - appliedSyncOutputPos = aliasEmitInfo.outputPos; - } - }); - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); - writeFile(compilerHost, diagnostics, removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + return { + reportedDeclarationError: reportedDeclarationError, + aliasDeclarationEmitInfo: aliasDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + declarationOutput: referencePathsOutput, } } + function writeDeclarationToFile(compilerHost: CompilerHost, compilerOptions: CompilerOptions, diagnostics: Diagnostic[], aliasDeclarationEmitInfo: aliasDeclaration[], + synchronousDeclarationOutput: string, jsFilePath: string, declarationOutput: string) { + // apply additions + var appliedSyncOutputPos = 0; + forEach(aliasDeclarationEmitInfo, aliasEmitInfo => { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(compilerHost, diagnostics, removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + } + export function getDeclarationDiagnostics(program: Program, resolver: EmitResolver, targetSourceFile: SourceFile): Diagnostic[] { var diagnostics: Diagnostic[] = []; var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); @@ -3252,7 +3257,13 @@ module ts { function emitFile(jsFilePath: string, sourceFile?: SourceFile) { emitJavaScript(jsFilePath, sourceFile); if (!hasSemanticErrors && compilerOptions.declaration) { - emitDeclarations(program, resolver, diagnostics, jsFilePath, sourceFile); + var emitDeclarationResult = emitDeclarations(program, resolver, diagnostics, jsFilePath, sourceFile); + // TODO(shkamat): Should we not write any declaration file if any of them can produce error, + // or should we just not write this file like we are doing now + if (!emitDeclarationResult.reportedDeclarationError) { + writeDeclarationToFile(compilerHost, compilerOptions, diagnostics, emitDeclarationResult.aliasDeclarationEmitInfo, emitDeclarationResult.synchronousDeclarationOutput, + jsFilePath, emitDeclarationResult.declarationOutput); + } } } diff --git a/src/services/services.ts b/src/services/services.ts index 6059a20233a..a7e95365fe0 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2203,11 +2203,7 @@ module ts { var allDiagnostics = checker.getDiagnostics(targetSourceFile); if (compilerOptions.declaration) { // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface - // Get emitter-diagnostics requires calling TypeChecker.emitFiles so we have to define CompilerHost.writer which does nothing because emitFiles function has side effects defined by CompilerHost.writer - var savedWriter = writer; - writer = (filename: string, data: string, writeByteOrderMark: boolean) => { }; allDiagnostics = allDiagnostics.concat(checker.getDeclarationDiagnostics(targetSourceFile)); - writer = savedWriter; } return allDiagnostics } From c02cc7ca1575499e30c405c3cb74febf3147c7f1 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 20 Oct 2014 13:18:32 -0700 Subject: [PATCH 009/178] use getCanonicalFileName in the language service when searching for files --- src/services/services.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index c250082580a..a83fb7e0e75 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2018,8 +2018,12 @@ module ts { localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); } + function getCanonicalFileName(filename: string) { + return useCaseSensitivefilenames ? filename : filename.toLowerCase(); + } + function getSourceFile(filename: string): SourceFile { - return lookUp(sourceFilesByName, filename); + return lookUp(sourceFilesByName, getCanonicalFileName(filename)); } function getFullTypeCheckChecker() { @@ -2105,7 +2109,7 @@ module ts { var filename = oldSourceFiles[i].filename; if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) { documentRegistry.releaseDocument(filename, oldSettings); - delete sourceFilesByName[filename]; + delete sourceFilesByName[getCanonicalFileName(filename)]; } } } @@ -2148,7 +2152,7 @@ module ts { } // Remember the new sourceFile - sourceFilesByName[filename] = sourceFile; + sourceFilesByName[getCanonicalFileName(filename)] = sourceFile; } // Now create a new compiler From 8392ff49bd35d4ec2d31e167c1eeca02cf55798b Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 21 Oct 2014 09:58:19 -0700 Subject: [PATCH 010/178] Update LKG --- bin/tsc.js | 2951 +++++++++++-------- bin/typescriptServices.js | 5826 +++++++++++++++++++++++-------------- 2 files changed, 5231 insertions(+), 3546 deletions(-) diff --git a/bin/tsc.js b/bin/tsc.js index 07cccb86d1b..f706bebc0ff 100644 --- a/bin/tsc.js +++ b/bin/tsc.js @@ -19,6 +19,7 @@ var ts; Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." }, Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." }, _0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." }, + A_file_cannot_have_a_reference_to_itself: { code: 1006, category: 1 /* Error */, key: "A file cannot have a reference to itself." }, Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, @@ -127,6 +128,7 @@ var ts; Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + An_enum_member_cannot_have_a_numeric_name: { code: 1151, category: 1 /* Error */, key: "An enum member cannot have a numeric name." }, Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, @@ -274,6 +276,7 @@ var ts; Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: 1 /* Error */, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: 1 /* Error */, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, @@ -758,14 +761,14 @@ var ts; return result; } } - function getLeadingComments(text, pos) { + function getLeadingCommentRanges(text, pos) { return getCommentRanges(text, pos, false); } - ts.getLeadingComments = getLeadingComments; - function getTrailingComments(text, pos) { + ts.getLeadingCommentRanges = getLeadingCommentRanges; + function getTrailingCommentRanges(text, pos) { return getCommentRanges(text, pos, true); } - ts.getTrailingComments = getTrailingComments; + ts.getTrailingCommentRanges = getTrailingCommentRanges; function isIdentifierStart(ch, languageVersion) { return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); } @@ -1560,6 +1563,8 @@ var ts; SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.CaretEqualsToken] = "LastPunctuation"; SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.EndOfFileToken] = "FirstToken"; SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.StringKeyword] = "LastToken"; + SyntaxKind[SyntaxKind["FirstTriviaToken"] = SyntaxKind.SingleLineCommentTrivia] = "FirstTriviaToken"; + SyntaxKind[SyntaxKind["LastTriviaToken"] = SyntaxKind.WhitespaceTrivia] = "LastTriviaToken"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -1592,8 +1597,17 @@ var ts; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 0x00000002] = "UseTypeOfFunction"; TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 0x00000004] = "NoTruncation"; + TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 0x00000008] = "WriteArrowStyleSignature"; + TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 0x00000010] = "WriteOwnNameForAnyLike"; + TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 0x00000020] = "WriteTypeArgumentsOfSignature"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; + (function (SymbolFormatFlags) { + SymbolFormatFlags[SymbolFormatFlags["None"] = 0x00000000] = "None"; + SymbolFormatFlags[SymbolFormatFlags["WriteTypeParametersOrArguments"] = 0x00000001] = "WriteTypeParametersOrArguments"; + SymbolFormatFlags[SymbolFormatFlags["UseOnlyExternalAliasing"] = 0x00000002] = "UseOnlyExternalAliasing"; + })(ts.SymbolFormatFlags || (ts.SymbolFormatFlags = {})); + var SymbolFormatFlags = ts.SymbolFormatFlags; (function (SymbolAccessibility) { SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible"; SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible"; @@ -1667,6 +1681,7 @@ var ts; NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 0x00000010] = "SuperInstance"; NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 0x00000020] = "SuperStatic"; NodeCheckFlags[NodeCheckFlags["ContextChecked"] = 0x00000040] = "ContextChecked"; + NodeCheckFlags[NodeCheckFlags["EnumValuesComputed"] = 0x00000080] = "EnumValuesComputed"; })(ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); var NodeCheckFlags = ts.NodeCheckFlags; (function (TypeFlags) { @@ -1844,6 +1859,31 @@ var ts; CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; })(ts.CharacterCodes || (ts.CharacterCodes = {})); var CharacterCodes = ts.CharacterCodes; + (function (SymbolDisplayPartKind) { + SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword"; + SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak"; + SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator"; + SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation"; + SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space"; + SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text"; + SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral"; + })(ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {})); + var SymbolDisplayPartKind = ts.SymbolDisplayPartKind; })(ts || (ts = {})); var ts; (function (ts) { @@ -1851,8 +1891,9 @@ var ts; var result; if (array) { for (var i = 0, len = array.length; i < len; i++) { - if (result = callback(array[i])) + if (result = callback(array[i])) { break; + } } } return result; @@ -1880,6 +1921,18 @@ var ts; return -1; } ts.indexOf = indexOf; + function countWhere(array, predicate) { + var count = 0; + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + if (predicate(array[i])) { + count++; + } + } + } + return count; + } + ts.countWhere = countWhere; function filter(array, f) { if (array) { var result = []; @@ -2020,10 +2073,7 @@ var ts; } ts.localizedDiagnosticMessages = undefined; function getLocaleSpecificMessage(message) { - if (ts.localizedDiagnosticMessages) { - message = ts.localizedDiagnosticMessages[message]; - } - return message; + return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message] ? ts.localizedDiagnosticMessages[message] : message; } ts.getLocaleSpecificMessage = getLocaleSpecificMessage; function createFileDiagnostic(file, start, length, message) { @@ -2244,14 +2294,14 @@ var ts; return getNormalizedPathComponents(pathOrUrl, currentDirectory); } } - function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, isAbsolutePathAnUrl) { + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { directoryComponents.length--; } for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { break; } } @@ -2295,6 +2345,37 @@ var ts; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; + var supportedExtensions = [".d.ts", ".ts", ".js"]; + function removeFileExtension(path) { + for (var i = 0; i < supportedExtensions.length; i++) { + var ext = supportedExtensions[i]; + if (fileExtensionIs(path, ext)) { + return path.substr(0, path.length - ext.length); + } + } + return path; + } + ts.removeFileExtension = removeFileExtension; + var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\\\u2028\u2029\u0085]/g; + var escapedCharsMap = { + "\t": "\\t", + "\v": "\\v", + "\f": "\\f", + "\b": "\\b", + "\0": "\\0", + "\r": "\\r", + "\n": "\\n", + "\"": "\\\"", + "\u2028": "\\u2028", + "\u2029": "\\u2029", + "\u0085": "\\u0085" + }; + function escapeString(s) { + return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, function (c) { + return escapedCharsMap[c] || c; + }) : s; + } + ts.escapeString = escapeString; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -2561,17 +2642,6 @@ var ts; node.flags = flags; return node; } - var moduleExtensions = [".d.ts", ".ts", ".js"]; - function getModuleNameFromFilename(filename) { - for (var i = 0; i < moduleExtensions.length; i++) { - var ext = moduleExtensions[i]; - var len = filename.length - ext.length; - if (len > 0 && filename.substr(len) === ext) - return filename.substr(0, len); - } - return filename; - } - ts.getModuleNameFromFilename = getModuleNameFromFilename; function getSourceFileOfNode(node) { while (node && node.kind !== 182 /* SourceFile */) node = node.parent; @@ -2592,15 +2662,15 @@ var ts; return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); } ts.getTokenPosOfNode = getTokenPosOfNode; - function getSourceTextOfNodeFromSourceText(sourceText, node) { + function getTextOfNodeFromSourceText(sourceText, node) { return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); } - ts.getSourceTextOfNodeFromSourceText = getSourceTextOfNodeFromSourceText; - function getSourceTextOfNode(node) { + ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText; + function getTextOfNode(node) { var text = getSourceFileOfNode(node).text; return text.substring(ts.skipTrivia(text, node.pos), node.end); } - ts.getSourceTextOfNode = getSourceTextOfNode; + ts.getTextOfNode = getTextOfNode; function escapeIdentifier(identifier) { return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; } @@ -2610,7 +2680,7 @@ var ts; } ts.unescapeIdentifier = unescapeIdentifier; function identifierToString(identifier) { - return identifier.kind === 115 /* Missing */ ? "(Missing)" : getSourceTextOfNode(identifier); + return identifier.kind === 115 /* Missing */ ? "(Missing)" : getTextOfNode(identifier); } ts.identifierToString = identifierToString; function createDiagnosticForNode(node, message, arg0, arg1, arg2) { @@ -2648,6 +2718,10 @@ var ts; return file.externalModuleIndicator !== undefined; } ts.isExternalModule = isExternalModule; + function isDeclarationFile(file) { + return (file.flags & 1024 /* DeclarationFile */) !== 0; + } + ts.isDeclarationFile = isDeclarationFile; function isPrologueDirective(node) { return node.kind === 151 /* ExpressionStatement */ && node.expression.kind === 7 /* StringLiteral */; } @@ -2659,17 +2733,18 @@ var ts; ts.Debug.assert(isPrologueDirective(node)); return node.expression.text === "use strict"; } - function getLeadingCommentsOfNode(node, sourceFileOfNode) { + function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { + sourceFileOfNode = sourceFileOfNode || getSourceFileOfNode(node); if (node.kind === 118 /* Parameter */ || node.kind === 117 /* TypeParameter */) { - return ts.concatenate(ts.getTrailingComments(sourceFileOfNode.text, node.pos), ts.getLeadingComments(sourceFileOfNode.text, node.pos)); + return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos)); } else { - return ts.getLeadingComments(sourceFileOfNode.text, node.pos); + return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos); } } - ts.getLeadingCommentsOfNode = getLeadingCommentsOfNode; + ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; function getJsDocComments(node, sourceFileOfNode) { - return ts.filter(getLeadingCommentsOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); + return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); function isJsDocComment(comment) { return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47 /* slash */; } @@ -3088,12 +3163,6 @@ var ts; ModifierContext[ModifierContext["ClassMembers"] = 2] = "ClassMembers"; ModifierContext[ModifierContext["Parameters"] = 3] = "Parameters"; })(ModifierContext || (ModifierContext = {})); - var TrailingCommaBehavior; - (function (TrailingCommaBehavior) { - TrailingCommaBehavior[TrailingCommaBehavior["Disallow"] = 0] = "Disallow"; - TrailingCommaBehavior[TrailingCommaBehavior["Allow"] = 1] = "Allow"; - TrailingCommaBehavior[TrailingCommaBehavior["Preserve"] = 2] = "Preserve"; - })(TrailingCommaBehavior || (TrailingCommaBehavior = {})); var ControlBlockContext; (function (ControlBlockContext) { ControlBlockContext[ControlBlockContext["NotNested"] = 0] = "NotNested"; @@ -3104,6 +3173,10 @@ var ts; return ts.SyntaxKind.FirstKeyword <= token && token <= ts.SyntaxKind.LastKeyword; } ts.isKeyword = isKeyword; + function isTrivia(token) { + return ts.SyntaxKind.FirstTriviaToken <= token && token <= ts.SyntaxKind.LastTriviaToken; + } + ts.isTrivia = isTrivia; function isModifier(token) { switch (token) { case 102 /* PublicKeyword */: @@ -3364,7 +3437,9 @@ var ts; return finishNode(node); } error(ts.Diagnostics.Identifier_expected); - return createMissingNode(); + var node = createMissingNode(); + node.text = ""; + return node; } function parseIdentifier() { return createIdentifier(isIdentifier()); @@ -3416,7 +3491,7 @@ var ts; case 14 /* TypeParameters */: return isIdentifier(); case 10 /* ArgumentExpressions */: - return isExpression(); + return token === 18 /* CommaToken */ || isExpression(); case 12 /* ArrayLiteralMembers */: return token === 18 /* CommaToken */ || isExpression(); case 13 /* Parameters */: @@ -3516,7 +3591,7 @@ var ts; parsingContext = saveParsingContext; return result; } - function parseDelimitedList(kind, parseElement, trailingCommaBehavior) { + function parseDelimitedList(kind, parseElement, allowTrailingComma) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var result = []; @@ -3537,16 +3612,6 @@ var ts; error(ts.Diagnostics._0_expected, ","); } else if (isListTerminator(kind)) { - if (commaStart >= 0) { - if (trailingCommaBehavior === 0 /* Disallow */) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); - } - } - else if (trailingCommaBehavior === 2 /* Preserve */) { - result.push(createNode(147 /* OmittedExpression */)); - } - } break; } else { @@ -3557,6 +3622,14 @@ var ts; nextToken(); } } + if (commaStart >= 0) { + if (!allowTrailingComma) { + if (file.syntacticErrors.length === errorCountBeforeParsingList) { + grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + result.hasTrailingComma = true; + } result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; @@ -3576,7 +3649,7 @@ var ts; } function parseBracketedList(kind, parseElement, startToken, endToken) { if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, 0 /* Disallow */); + var result = parseDelimitedList(kind, parseElement, false); parseExpected(endToken); return result; } @@ -4247,10 +4320,10 @@ var ts; nextToken(); var operand = parseUnaryExpression(); if (isInStrictMode) { - if ((token === 33 /* PlusPlusToken */ || token === 34 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { + if ((operator === 33 /* PlusPlusToken */ || operator === 34 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { reportInvalidUseInStrictMode(operand); } - else if (token === 68 /* DeleteKeyword */ && operand.kind === 59 /* Identifier */) { + else if (operator === 68 /* DeleteKeyword */ && operand.kind === 59 /* Identifier */) { grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); } } @@ -4335,7 +4408,7 @@ var ts; else { parseExpected(11 /* OpenParenToken */); } - callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); parseExpected(12 /* CloseParenToken */); expr = finishNode(callExpr); continue; @@ -4399,15 +4472,29 @@ var ts; parseExpected(12 /* CloseParenToken */); return finishNode(node); } + function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic) { + if (token === 18 /* CommaToken */) { + if (omittedExpressionDiagnostic) { + var errorStart = scanner.getTokenPos(); + var errorLength = scanner.getTextPos() - errorStart; + grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic); + } + return createNode(147 /* OmittedExpression */); + } + return parseAssignmentExpression(); + } function parseArrayLiteralElement() { - return token === 18 /* CommaToken */ ? createNode(147 /* OmittedExpression */) : parseAssignmentExpression(); + return parseAssignmentExpressionOrOmittedExpression(undefined); + } + function parseArgumentExpression() { + return parseAssignmentExpressionOrOmittedExpression(ts.Diagnostics.Argument_expression_expected); } function parseArrayLiteral() { var node = createNode(132 /* ArrayLiteral */); parseExpected(13 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) node.flags |= 256 /* MultiLine */; - node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, 2 /* Preserve */); + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, true); parseExpected(14 /* CloseBracketToken */); return finishNode(node); } @@ -4440,8 +4527,7 @@ var ts; if (scanner.hasPrecedingLineBreak()) { node.flags |= 256 /* MultiLine */; } - var trailingCommaBehavior = languageVersion === 0 /* ES3 */ ? 1 /* Allow */ : 2 /* Preserve */; - node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, trailingCommaBehavior); + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, true); parseExpected(10 /* CloseBraceToken */); var seen = {}; var Property = 1; @@ -4515,7 +4601,7 @@ var ts; parseExpected(82 /* NewKeyword */); node.func = parseCallAndAccess(parsePrimaryExpression(), true); if (parseOptional(11 /* OpenParenToken */) || token === 19 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); parseExpected(12 /* CloseParenToken */); } return finishNode(node); @@ -4852,7 +4938,7 @@ var ts; node.label = parseIdentifier(); parseExpected(46 /* ColonToken */); if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { - grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); + grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); } labelledStatementInfo.addLabel(node.label); node.statement = isLabel() ? parseLabelledStatement() : parseStatementWithLabelSet(); @@ -4985,7 +5071,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(flags, noIn) { - return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, 0 /* Disallow */); + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, false); } function parseVariableStatement(pos, flags) { var node = createNode(149 /* VariableStatement */, pos); @@ -5324,7 +5410,7 @@ var ts; var implementsKeywordLength; if (parseOptional(96 /* ImplementsKeyword */)) { implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); } var errorCountBeforeClassBody = file.syntacticErrors.length; if (parseExpected(9 /* OpenBraceToken */)) { @@ -5350,7 +5436,7 @@ var ts; var extendsKeywordLength; if (parseOptional(73 /* ExtendsKeyword */)) { extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); } var errorCountBeforeInterfaceBody = file.syntacticErrors.length; node.members = parseTypeLiteral().members; @@ -5399,7 +5485,7 @@ var ts; parseExpected(71 /* EnumKeyword */); node.name = parseIdentifier(); if (parseExpected(9 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, 1 /* Allow */); + node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, true); parseExpected(10 /* CloseBraceToken */); } else { @@ -5593,15 +5679,16 @@ var ts; } else { var matchResult = ts.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, ts.Diagnostics.Invalid_reference_directive_syntax); } else { referencedFiles.push({ - pos: range.pos, - end: range.end, + pos: start, + end: end, filename: matchResult[3] }); } @@ -5704,6 +5791,9 @@ var ts; else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; } + else if (refFile && host.getCanonicalFileName(filename) === host.getCanonicalFileName(refFile.filename)) { + diagnostic = ts.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))) { @@ -5754,7 +5844,8 @@ var ts; } function processReferencedFiles(file, basePath) { ts.forEach(file.referencedFiles, function (ref) { - processSourceFile(ts.normalizePath(ts.combinePaths(basePath, ref.filename)), false, file, ref.pos, ref.end); + var referencedFilename = ts.isRootedDiskPath(ref.filename) ? ref.filename : ts.combinePaths(basePath, ref.filename); + processSourceFile(ts.normalizePath(referencedFilename), false, file, ref.pos, ref.end); }); } function processImportedModules(file, basePath) { @@ -5777,7 +5868,7 @@ var ts; } } } - else if (node.kind === 177 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || file.flags & 1024 /* DeclarationFile */)) { + else if (node.kind === 177 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || isDeclarationFile(file))) { forEachChild(node.body, function (node) { if (node.kind === 179 /* ImportDeclaration */ && node.externalModuleName) { var nameLiteral = node.externalModuleName; @@ -5927,7 +6018,10 @@ var ts; if (node.name) { node.name.parent = node; } - file.semanticErrors.push(ts.createDiagnosticForNode(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + ts.forEach(symbol.declarations, function (declaration) { + file.semanticErrors.push(ts.createDiagnosticForNode(declaration.name, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(declaration))); + }); + file.semanticErrors.push(ts.createDiagnosticForNode(node.name, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -6145,7 +6239,7 @@ var ts; break; case 182 /* SourceFile */: if (ts.isExternalModule(node)) { - bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.getModuleNameFromFilename(node.filename) + '"'); + bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.removeFileExtension(node.filename) + '"'); break; } default: @@ -6167,11 +6261,12 @@ var ts; } return indentStrings[level]; } + ts.getIndentString = getIndentString; function getIndentSize() { return indentStrings[1].length; } function shouldEmitToOwnFile(sourceFile, compilerOptions) { - if (!(sourceFile.flags & 1024 /* DeclarationFile */)) { + if (!ts.isDeclarationFile(sourceFile)) { if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { return true; } @@ -6181,9 +6276,902 @@ var ts; } ts.shouldEmitToOwnFile = shouldEmitToOwnFile; function isExternalModuleOrDeclarationFile(sourceFile) { - return ts.isExternalModule(sourceFile) || (sourceFile.flags & 1024 /* DeclarationFile */) !== 0; + return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile); } ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile; + function createTextWriter(newLine, trackSymbol) { + var output = ""; + var indent = 0; + var lineStart = true; + var lineCount = 0; + var linePos = 0; + function write(s) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; + } + } + function rawWrite(s) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } + function writeLiteral(s) { + if (s && s.length) { + write(s); + var lineStartsOfS = ts.getLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; + } + } + } + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } + } + function writeKind(text, kind) { + write(text); + } + function writeSymbol(text, symbol) { + write(text); + } + return { + write: write, + trackSymbol: trackSymbol, + writeKind: writeKind, + writeSymbol: writeSymbol, + rawWrite: rawWrite, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: function () { return indent++; }, + decreaseIndent: function () { return indent--; }, + getIndent: function () { return indent; }, + getTextPos: function () { return output.length; }, + getLine: function () { return lineCount + 1; }, + getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, + getText: function () { return output; }, + clear: function () { + } + }; + } + function getSourceTextOfLocalNode(currentSourceFile, node) { + var text = currentSourceFile.text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + function getLineOfLocalPosition(currentSourceFile, pos) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } + function emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments) { + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) { + writer.writeLine(); + } + } + function emitComments(currentSourceFile, writer, comments, trailingSeparator, newLine, writeComment) { + var emitLeadingSpace = !trailingSeparator; + ts.forEach(comments, function (comment) { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(currentSourceFile, writer, comment, newLine); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + emitLeadingSpace = true; + } + }); + } + function writeCommentRange(currentSourceFile, writer, comment, newLine) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + if (pos !== comment.pos) { + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + } + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(pos, nextLineStart); + pos = nextLineStart; + } + } + else { + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + function writeTrimmedCurrentLine(pos, nextLineStart) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + writer.writeLiteral(newLine); + } + } + function calculateIndent(pos, end) { + var currentLineIndent = 0; + for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { + if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { + currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); + } + else { + currentLineIndent++; + } + } + return currentLineIndent; + } + } + function getFirstConstructorWithBody(node) { + return ts.forEach(node.members, function (member) { + if (member.kind === 121 /* Constructor */ && member.body) { + return member; + } + }); + } + function getAllAccessorDeclarations(node, accessor) { + var firstAccessor; + var getAccessor; + var setAccessor; + ts.forEach(node.members, function (member) { + if ((member.kind === 122 /* GetAccessor */ || member.kind === 123 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) { + if (!firstAccessor) { + firstAccessor = member; + } + if (member.kind === 122 /* GetAccessor */ && !getAccessor) { + getAccessor = member; + } + if (member.kind === 123 /* SetAccessor */ && !setAccessor) { + setAccessor = member; + } + } + }); + return { + firstAccessor: firstAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + function getSourceFilePathInNewDir(sourceFile, program, newDirPath) { + var compilerHost = program.getCompilerHost(); + var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); + return ts.combinePaths(newDirPath, sourceFilePath); + } + function getOwnEmitOutputFilePath(sourceFile, program, extension) { + var compilerOptions = program.getCompilerOptions(); + if (compilerOptions.outDir) { + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, program, compilerOptions.outDir)); + } + else { + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename); + } + return emitOutputFilePathWithoutExtension + extension; + } + function writeFile(compilerHost, diagnostics, filename, data, writeByteOrderMark) { + compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + }); + } + function emitDeclarations(program, resolver, diagnostics, jsFilePath, root) { + var newLine = program.getCompilerHost().getNewLine(); + var compilerOptions = program.getCompilerOptions(); + var compilerHost = program.getCompilerHost(); + var writer = createTextWriter(newLine, trackSymbol); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var enclosingDeclaration; + var currentSourceFile; + var reportedDeclarationError = false; + var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { + } : writeJsDocComments; + var aliasDeclarationEmitInfo = []; + var getSymbolVisibilityDiagnosticMessage; + function writeAsychronousImportDeclarations(importDeclarations) { + var oldWriter = writer; + ts.forEach(importDeclarations, function (aliasToWrite) { + var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } + function trackSymbol(symbol, enclosingDeclaration, meaning) { + var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + reportedDeclarationError = true; + var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + } + } + } + function emitLines(nodes) { + for (var i = 0, n = nodes.length; i < n; i++) { + emitNode(nodes[i]); + } + } + function emitCommaList(nodes, eachNodeEmitFn) { + var currentWriterPos = writer.getTextPos(); + for (var i = 0, n = nodes.length; i < n; i++) { + if (currentWriterPos !== writer.getTextPos()) { + write(", "); + } + currentWriterPos = writer.getTextPos(); + eachNodeEmitFn(nodes[i]); + } + } + function writeJsDocComments(declaration) { + if (declaration) { + var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments); + emitComments(currentSourceFile, writer, jsDocComments, true, newLine, writeCommentRange); + } + } + function emitSourceTextOfNode(node) { + write(getSourceTextOfLocalNode(currentSourceFile, node)); + } + function emitSourceFile(node) { + currentSourceFile = node; + enclosingDeclaration = node; + emitLines(node.statements); + } + function emitExportAssignment(node) { + write("export = "); + emitSourceTextOfNode(node.exportName); + write(";"); + writeLine(); + } + function emitDeclarationFlags(node) { + if (node.flags & 128 /* Static */) { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.flags & 64 /* Protected */) { + write("protected "); + } + write("static "); + } + else { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.flags & 64 /* Protected */) { + write("protected "); + } + else if (node.parent === currentSourceFile) { + if (node.flags & 1 /* Export */) { + write("export "); + } + if (node.kind !== 175 /* InterfaceDeclaration */) { + write("declare "); + } + } + } + } + function emitImportDeclaration(node) { + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + function writeImportDeclaration(node) { + emitJsDocComments(node); + if (node.flags & 1 /* Export */) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.name)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.entityName)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.externalModuleName)); + writer.write(");"); + } + writer.writeLine(); + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisible(node.entityName); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + reportedDeclarationError = true; + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(currentSourceFile, node.name), symbolAccesibilityResult.errorSymbolName)); + } + } + } + function emitModuleDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("module "); + emitSourceTextOfNode(node.name); + while (node.body.kind !== 178 /* ModuleBlock */) { + node = node.body; + write("."); + emitSourceTextOfNode(node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitEnumDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("enum "); + emitSourceTextOfNode(node.name); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + } + } + function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); + emitSourceTextOfNode(node.name); + var enumMemberValue = resolver.getEnumMemberValue(node); + if (enumMemberValue !== undefined) { + write(" = "); + write(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + function emitTypeParameters(typeParameters) { + function emitTypeParameter(node) { + function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 174 /* ClassDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + case 175 /* InterfaceDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* Method */: + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for type parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); + emitSourceTextOfNode(node.name); + if (node.constraint && (node.parent.kind !== 120 /* Method */ || !(node.parent.flags & 32 /* Private */))) { + write(" extends "); + getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + if (typeParameters) { + write("<"); + emitCommaList(typeParameters, emitTypeParameter); + write(">"); + } + } + function emitHeritageClause(typeReferences, isImplementsList) { + if (typeReferences) { + write(isImplementsList ? " implements " : " extends "); + emitCommaList(typeReferences, emitTypeOfTypeReference); + } + function emitTypeOfTypeReference(node) { + getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); + function getHeritageClauseVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.parent.kind === 174 /* ClassDeclaration */) { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; + } + } + else { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; + } + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.parent.name + }; + } + } + } + function emitClassDeclaration(node) { + function emitParameterProperties(constructorDeclaration) { + if (constructorDeclaration) { + ts.forEach(constructorDeclaration.parameters, function (param) { + if (param.flags & ts.NodeFlags.AccessibilityModifier) { + emitPropertyDeclaration(param); + } + }); + } + } + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("class "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + if (node.baseType) { + emitHeritageClause([node.baseType], false); + } + emitHeritageClause(node.implementedTypes, true); + write(" {"); + writeLine(); + increaseIndent(); + emitParameterProperties(getFirstConstructorWithBody(node)); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitInterfaceDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("interface "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + emitHeritageClause(node.baseTypes, false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitPropertyDeclaration(node) { + emitJsDocComments(node); + emitDeclarationFlags(node); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + function emitVariableDeclaration(node) { + if (node.kind !== 171 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + emitSourceTextOfNode(node.name); + if (node.kind === 119 /* Property */ && (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 171 /* VariableDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + else if (node.kind === 119 /* Property */) { + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } + } + function emitVariableStatement(node) { + var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); + if (hasDeclarationWithEmit) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("var "); + emitCommaList(node.declarations, emitVariableDeclaration); + write(";"); + writeLine(); + } + } + function emitAccessorDeclaration(node) { + var accessors = getAllAccessorDeclarations(node.parent, node); + if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); + emitDeclarationFlags(node); + emitSourceTextOfNode(node.name); + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + } + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 123 /* SetAccessor */) { + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } + } + function emitFunctionDeclaration(node) { + if ((node.kind !== 172 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + if (node.kind === 172 /* FunctionDeclaration */) { + write("function "); + emitSourceTextOfNode(node.name); + } + else if (node.kind === 121 /* Constructor */) { + write("constructor"); + } + else { + emitSourceTextOfNode(node.name); + if (node.flags & 4 /* QuestionMark */) { + write("?"); + } + } + emitSignatureDeclaration(node); + } + } + function emitConstructSignatureDeclaration(node) { + emitJsDocComments(node); + write("new "); + emitSignatureDeclaration(node); + } + function emitSignatureDeclaration(node) { + if (node.kind === 124 /* CallSignature */ || node.kind === 126 /* IndexSignature */) { + emitJsDocComments(node); + } + emitTypeParameters(node.typeParameters); + if (node.kind === 126 /* IndexSignature */) { + write("["); + } + else { + write("("); + } + emitCommaList(node.parameters, emitParameterDeclaration); + if (node.kind === 126 /* IndexSignature */) { + write("]"); + } + else { + write(")"); + } + if (node.kind !== 121 /* Constructor */ && !(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + function getReturnTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 126 /* IndexSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 120 /* Method */: + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node + }; + } + } + function emitParameterDeclaration(node) { + increaseIndent(); + emitJsDocComments(node); + if (node.flags & 8 /* Rest */) { + write("..."); + } + emitSourceTextOfNode(node.name); + if (node.initializer || (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + decreaseIndent(); + if (!(node.parent.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 121 /* Constructor */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* Method */: + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + } + function emitNode(node) { + switch (node.kind) { + case 121 /* Constructor */: + case 172 /* FunctionDeclaration */: + case 120 /* Method */: + return emitFunctionDeclaration(node); + case 125 /* ConstructSignature */: + return emitConstructSignatureDeclaration(node); + case 124 /* CallSignature */: + case 126 /* IndexSignature */: + return emitSignatureDeclaration(node); + case 122 /* GetAccessor */: + case 123 /* SetAccessor */: + return emitAccessorDeclaration(node); + case 149 /* VariableStatement */: + return emitVariableStatement(node); + case 119 /* Property */: + return emitPropertyDeclaration(node); + case 175 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); + case 174 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 181 /* EnumMember */: + return emitEnumMemberDeclaration(node); + case 176 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 177 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 179 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 180 /* ExportAssignment */: + return emitExportAssignment(node); + case 182 /* SourceFile */: + return emitSourceFile(node); + } + } + function tryResolveScriptReference(sourceFile, reference) { + var referenceFileName = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); + return program.getSourceFile(referenceFileName); + } + var referencePathsOutput = ""; + function writeReferencePath(referencedFile) { + var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, program, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; + declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, false); + referencePathsOutput += "/// " + newLine; + } + if (root) { + if (!compilerOptions.noResolve) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = tryResolveScriptReference(root, fileReference); + if (referencedFile && ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference)) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + } + emitNode(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + if (!compilerOptions.noResolve) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = tryResolveScriptReference(sourceFile, fileReference); + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile))) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + } + emitNode(sourceFile); + } + }); + } + return { + reportedDeclarationError: reportedDeclarationError, + aliasDeclarationEmitInfo: aliasDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + declarationOutput: referencePathsOutput + }; + } + function writeDeclarationToFile(compilerHost, compilerOptions, diagnostics, aliasDeclarationEmitInfo, synchronousDeclarationOutput, jsFilePath, declarationOutput) { + var appliedSyncOutputPos = 0; + ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(compilerHost, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + } + function getDeclarationDiagnostics(program, resolver, targetSourceFile) { + var diagnostics = []; + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); + emitDeclarations(program, resolver, diagnostics, jsFilePath, targetSourceFile); + return diagnostics; + } + ts.getDeclarationDiagnostics = getDeclarationDiagnostics; function emitFiles(resolver, targetSourceFile) { var program = resolver.getProgram(); var compilerHost = program.getCompilerHost(); @@ -6191,207 +7179,13 @@ var ts; var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; var diagnostics = []; var newLine = program.getCompilerHost().getNewLine(); - function getSourceFilePathInNewDir(newDirPath, sourceFile) { - var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); - sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); - return ts.combinePaths(newDirPath, sourceFilePath); - } - function getOwnEmitOutputFilePath(sourceFile, extension) { - if (compilerOptions.outDir) { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile)); - } - else { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(sourceFile.filename); - } - return emitOutputFilePathWithoutExtension + extension; - } - function getFirstConstructorWithBody(node) { - return ts.forEach(node.members, function (member) { - if (member.kind === 121 /* Constructor */ && member.body) { - return member; - } - }); - } - function getAllAccessorDeclarations(node, accessor) { - var firstAccessor; - var getAccessor; - var setAccessor; - ts.forEach(node.members, function (member) { - if ((member.kind === 122 /* GetAccessor */ || member.kind === 123 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) { - if (!firstAccessor) { - firstAccessor = member; - } - if (member.kind === 122 /* GetAccessor */ && !getAccessor) { - getAccessor = member; - } - if (member.kind === 123 /* SetAccessor */ && !setAccessor) { - setAccessor = member; - } - } - }); - return { - firstAccessor: firstAccessor, - getAccessor: getAccessor, - setAccessor: setAccessor - }; - } - function createTextWriter(writeSymbol) { - var output = ""; - var indent = 0; - var lineStart = true; - var lineCount = 0; - var linePos = 0; - function write(s) { - if (s && s.length) { - if (lineStart) { - output += getIndentString(indent); - lineStart = false; - } - output += s; - } - } - function rawWrite(s) { - if (s !== undefined) { - if (lineStart) { - lineStart = false; - } - output += s; - } - } - function writeLiteral(s) { - if (s && s.length) { - write(s); - var lineStartsOfS = ts.getLineStarts(s); - if (lineStartsOfS.length > 1) { - lineCount = lineCount + lineStartsOfS.length - 1; - linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; - } - } - } - function writeLine() { - if (!lineStart) { - output += newLine; - lineCount++; - linePos = output.length; - lineStart = true; - } - } - return { - write: write, - writeSymbol: writeSymbol, - rawWrite: rawWrite, - writeLiteral: writeLiteral, - writeLine: writeLine, - increaseIndent: function () { return indent++; }, - decreaseIndent: function () { return indent--; }, - getIndent: function () { return indent; }, - getTextPos: function () { return output.length; }, - getLine: function () { return lineCount + 1; }, - getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, - getText: function () { return output; } - }; - } - var currentSourceFile; - function getSourceTextOfLocalNode(node) { - var text = currentSourceFile.text; - return text.substring(ts.skipTrivia(text, node.pos), node.end); - } - function getLineOfLocalPosition(pos) { - return currentSourceFile.getLineAndCharacterFromPosition(pos).line; - } - function writeFile(filename, data, writeByteOrderMark) { - compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { - diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); - }); - } - function emitComments(comments, trailingSeparator, writer, writeComment) { - var emitLeadingSpace = !trailingSeparator; - ts.forEach(comments, function (comment) { - if (emitLeadingSpace) { - writer.write(" "); - emitLeadingSpace = false; - } - writeComment(comment, writer); - if (comment.hasTrailingNewLine) { - writer.writeLine(); - } - else if (trailingSeparator) { - writer.write(" "); - } - else { - emitLeadingSpace = true; - } - }); - } - function emitNewLineBeforeLeadingComments(node, leadingComments, writer) { - if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { - writer.writeLine(); - } - } - function writeCommentRange(comment, writer) { - if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { - var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); - var firstCommentLineIndent; - for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { - var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); - if (pos !== comment.pos) { - if (firstCommentLineIndent === undefined) { - firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); - } - var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); - var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); - if (spacesToEmit > 0) { - var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); - var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); - writer.rawWrite(indentSizeSpaceString); - while (numberOfSingleSpacesToEmit) { - writer.rawWrite(" "); - numberOfSingleSpacesToEmit--; - } - } - else { - writer.rawWrite(""); - } - } - writeTrimmedCurrentLine(pos, nextLineStart); - pos = nextLineStart; - } - } - else { - writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); - } - function writeTrimmedCurrentLine(pos, nextLineStart) { - var end = Math.min(comment.end, nextLineStart - 1); - var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); - if (currentLineText) { - writer.write(currentLineText); - if (end !== comment.end) { - writer.writeLine(); - } - } - else { - writer.writeLiteral(newLine); - } - } - function calculateIndent(pos, end) { - var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { - if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { - currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); - } - else { - currentLineIndent++; - } - } - return currentLineIndent; - } - } function emitJavaScript(jsFilePath, root) { - var writer = createTextWriter(writeSymbol); + var writer = createTextWriter(newLine, trackSymbol); var write = writer.write; var writeLine = writer.writeLine; var increaseIndent = writer.increaseIndent; var decreaseIndent = writer.decreaseIndent; + var currentSourceFile; var extendsEmitted = false; var writeEmittedFiles = writeJavaScriptFile; var emitLeadingComments = compilerOptions.removeComments ? function (node) { @@ -6417,7 +7211,7 @@ var ts; var scopeEmitEnd = function () { }; var sourceMapData; - function writeSymbol(symbol, enclosingDeclaration, meaning) { + function trackSymbol(symbol, enclosingDeclaration, meaning) { } function initializeEmitterWithSourceMaps() { var sourceMapDir; @@ -6523,7 +7317,7 @@ var ts; } function recordNewSourceFileStart(node) { var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir; - sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), true)); + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; sourceMapData.inputSourceFileNames.push(node.filename); } @@ -6564,25 +7358,11 @@ var ts; sourceMapNameIndices.pop(); } ; - function writeCommentRangeWithMap(comment, writer) { + function writeCommentRangeWithMap(curentSourceFile, writer, comment, newLine) { recordSourceMapSpan(comment.pos); - writeCommentRange(comment, writer); + writeCommentRange(currentSourceFile, writer, comment, newLine); recordSourceMapSpan(comment.end); } - var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\u2028\u2029\u0085]/g; - var escapedCharsMap = { - "\t": "\\t", - "\v": "\\v", - "\f": "\\f", - "\b": "\\b", - "\0": "\\0", - "\r": "\\r", - "\n": "\\n", - "\"": "\\\"", - "\u2028": "\\u2028", - "\u2029": "\\u2029", - "\u0085": "\\u0085" - }; function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings) { if (typeof JSON !== "undefined") { return JSON.stringify({ @@ -6594,26 +7374,21 @@ var ts; mappings: mappings }); } - return "{\"version\":" + version + ",\"file\":\"" + escapeString(file) + "\",\"sourceRoot\":\"" + escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + escapeString(mappings) + "\"}"; - function escapeString(s) { - return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, function (c) { - return escapedCharsMap[c] || c; - }) : s; - } + return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\"}"; function serializeStringArray(list) { var output = ""; for (var i = 0, n = list.length; i < n; i++) { if (i) { output += ","; } - output += "\"" + escapeString(list[i]) + "\""; + output += "\"" + ts.escapeString(list[i]) + "\""; } return output; } } function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) { encodeLastRecordedSourceMapSpan(); - writeFile(sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false); + writeFile(compilerHost, diagnostics, sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false); sourceMapDataList.push(sourceMapData); writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark); } @@ -6636,11 +7411,11 @@ var ts; if (compilerOptions.mapRoot) { sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); if (root) { - sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); + sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(root, program, sourceMapDir)); } if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir); - sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), true); + sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true); } else { sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); @@ -6672,7 +7447,7 @@ var ts; writeComment = writeCommentRangeWithMap; } function writeJavaScriptFile(emitOutput, writeByteOrderMark) { - writeFile(jsFilePath, emitOutput, writeByteOrderMark); + writeFile(compilerHost, diagnostics, jsFilePath, emitOutput, writeByteOrderMark); } function emitTokenText(tokenKind, startPos, emitFn) { var tokenString = ts.tokenToString(tokenKind); @@ -6690,25 +7465,42 @@ var ts; emit(node); } } - function emitCommaList(nodes, count) { - if (!(count >= 0)) - count = nodes.length; - if (nodes) { - for (var i = 0; i < count; i++) { - if (i) - write(", "); - emit(nodes[i]); + function emitTrailingCommaIfPresent(nodeList, isMultiline) { + if (nodeList.hasTrailingComma) { + write(","); + if (isMultiline) { + writeLine(); } } } - function emitMultiLineList(nodes) { + function emitCommaList(nodes, includeTrailingComma, count) { + if (!(count >= 0)) { + count = nodes.length; + } + if (nodes) { + for (var i = 0; i < count; i++) { + if (i) { + write(", "); + } + emit(nodes[i]); + } + if (includeTrailingComma) { + emitTrailingCommaIfPresent(nodes, false); + } + } + } + function emitMultiLineList(nodes, includeTrailingComma) { if (nodes) { for (var i = 0; i < nodes.length; i++) { - if (i) + if (i) { write(","); + } writeLine(); emit(nodes[i]); } + if (includeTrailingComma) { + emitTrailingCommaIfPresent(nodes, true); + } } } function emitLines(nodes) { @@ -6721,7 +7513,7 @@ var ts; } } function emitLiteral(node) { - var text = getSourceTextOfLocalNode(node); + var text = getSourceTextOfLocalNode(currentSourceFile, node); if (node.kind === 7 /* StringLiteral */ && compilerOptions.sourceMap) { writer.writeLiteral(text); } @@ -6739,7 +7531,7 @@ var ts; write(node.text); } else { - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } write("\""); } @@ -6781,7 +7573,7 @@ var ts; write("."); } } - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } function emitThis(node) { if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { @@ -6807,14 +7599,14 @@ var ts; if (node.flags & 256 /* MultiLine */) { write("["); increaseIndent(); - emitMultiLineList(node.elements); + emitMultiLineList(node.elements, true); decreaseIndent(); writeLine(); write("]"); } else { write("["); - emitCommaList(node.elements); + emitCommaList(node.elements, true); write("]"); } } @@ -6825,14 +7617,14 @@ var ts; else if (node.flags & 256 /* MultiLine */) { write("{"); increaseIndent(); - emitMultiLineList(node.properties); + emitMultiLineList(node.properties, compilerOptions.target >= 1 /* ES5 */); decreaseIndent(); writeLine(); write("}"); } else { write("{ "); - emitCommaList(node.properties); + emitCommaList(node.properties, compilerOptions.target >= 1 /* ES5 */); write(" }"); } } @@ -6844,14 +7636,15 @@ var ts; emitTrailingComments(node); } function emitPropertyAccess(node) { - var text = resolver.getPropertyAccessSubstitution(node); - if (text) { - write(text); - return; + var constantValue = resolver.getConstantValue(node); + if (constantValue !== undefined) { + write(constantValue.toString() + " /* " + ts.identifierToString(node.right) + " */"); + } + else { + emit(node.left); + write("."); + emit(node.right); } - emit(node.left); - write("."); - emit(node.right); } function emitIndexedAccess(node) { emit(node.object); @@ -6874,13 +7667,13 @@ var ts; emitThis(node.func); if (node.arguments.length) { write(", "); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); } write(")"); } else { write("("); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); write(")"); } } @@ -6889,7 +7682,7 @@ var ts; emit(node.func); if (node.arguments) { write("("); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); write(")"); } } @@ -7028,7 +7821,7 @@ var ts; if (node.declarations) { emitToken(92 /* VarKeyword */, endPos); write(" "); - emitCommaList(node.declarations); + emitCommaList(node.declarations, false); } if (node.initializer) { emit(node.initializer); @@ -7162,7 +7955,7 @@ var ts; emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) write("var "); - emitCommaList(node.declarations); + emitCommaList(node.declarations, false); write(";"); emitTrailingComments(node); } @@ -7262,7 +8055,7 @@ var ts; increaseIndent(); write("("); if (node) { - emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); + emitCommaList(node.parameters, false, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); } write(")"); decreaseIndent(); @@ -7986,7 +8779,7 @@ var ts; return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos; } function getLeadingCommentsWithoutDetachedComments() { - var leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); if (detachedCommentsInfo.length - 1) { detachedCommentsInfo.pop(); } @@ -8002,20 +8795,20 @@ var ts; leadingComments = getLeadingCommentsWithoutDetachedComments(); } else { - leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + leadingComments = ts.getLeadingCommentRangesOfNode(node, currentSourceFile); } return leadingComments; } } function emitLeadingDeclarationComments(node) { var leadingComments = getLeadingCommentsToEmit(node); - emitNewLineBeforeLeadingComments(node, leadingComments, writer); - emitComments(leadingComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); + emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment); } function emitTrailingDeclarationComments(node) { if (node.parent.kind === 182 /* SourceFile */ || node.end !== node.parent.end) { - var trailingComments = ts.getTrailingComments(currentSourceFile.text, node.end); - emitComments(trailingComments, false, writer, writeComment); + var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, node.end); + emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment); } } function emitLeadingCommentsOfLocalPosition(pos) { @@ -8024,20 +8817,20 @@ var ts; leadingComments = getLeadingCommentsWithoutDetachedComments(); } else { - leadingComments = ts.getLeadingComments(currentSourceFile.text, pos); + leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos); } - emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); - emitComments(leadingComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments); + emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment); } function emitDetachedCommentsAtPosition(node) { - var leadingComments = ts.getLeadingComments(currentSourceFile.text, node.pos); + var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos); if (leadingComments) { var detachedComments = []; var lastComment; ts.forEach(leadingComments, function (comment) { if (lastComment) { - var lastCommentLine = getLineOfLocalPosition(lastComment.end); - var commentLine = getLineOfLocalPosition(comment.pos); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, lastComment.end); + var commentLine = getLineOfLocalPosition(currentSourceFile, comment.pos); if (commentLine >= lastCommentLine + 2) { return detachedComments; } @@ -8046,11 +8839,11 @@ var ts; lastComment = comment; }); if (detachedComments.length) { - var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); - var astLine = getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node.pos)); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos)); if (astLine >= lastCommentLine + 2) { - emitNewLineBeforeLeadingComments(node, leadingComments, writer); - emitComments(detachedComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); + emitComments(currentSourceFile, writer, detachedComments, true, newLine, writeComment); var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; if (detachedCommentsInfo) { detachedCommentsInfo.push(currentDetachedCommentInfo); @@ -8072,8 +8865,8 @@ var ts; return true; } } - emitNewLineBeforeLeadingComments(node, pinnedComments, writer); - emitComments(pinnedComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments); + emitComments(currentSourceFile, writer, pinnedComments, true, newLine, writeComment); } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); @@ -8091,700 +8884,35 @@ var ts; writeLine(); writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); } - function emitDeclarations(jsFilePath, root) { - var writer = createTextWriter(writeSymbol); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; - var enclosingDeclaration; - var reportedDeclarationError = false; - var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { - } : writeJsDocComments; - var aliasDeclarationEmitInfo = []; - var getSymbolVisibilityDiagnosticMessage; - function writeAsychronousImportDeclarations(importDeclarations) { - var oldWriter = writer; - ts.forEach(importDeclarations, function (aliasToWrite) { - var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); - writer = createTextWriter(writeSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); - } - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); - }); - writer = oldWriter; - } - function writeSymbol(symbol, enclosingDeclaration, meaning) { - var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); - if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { - resolver.writeSymbol(symbol, enclosingDeclaration, meaning, writer); - if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - reportedDeclarationError = true; - var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); - if (errorInfo) { - if (errorInfo.typeName) { - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); - } - else { - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); - } - } - } - } - function emitLines(nodes) { - for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); - } - } - function emitCommaList(nodes, eachNodeEmitFn) { - var currentWriterPos = writer.getTextPos(); - for (var i = 0, n = nodes.length; i < n; i++) { - if (currentWriterPos !== writer.getTextPos()) { - write(", "); - } - currentWriterPos = writer.getTextPos(); - eachNodeEmitFn(nodes[i]); - } - } - function writeJsDocComments(declaration) { - if (declaration) { - var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); - emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); - emitComments(jsDocComments, true, writer, writeCommentRange); - } - } - function emitSourceTextOfNode(node) { - write(getSourceTextOfLocalNode(node)); - } - function emitSourceFile(node) { - currentSourceFile = node; - enclosingDeclaration = node; - emitLines(node.statements); - } - function emitExportAssignment(node) { - write("export = "); - emitSourceTextOfNode(node.exportName); - write(";"); - writeLine(); - } - function emitDeclarationFlags(node) { - if (node.flags & 128 /* Static */) { - if (node.flags & 32 /* Private */) { - write("private "); - } - else if (node.flags & 64 /* Protected */) { - write("protected "); - } - write("static "); - } - else { - if (node.flags & 32 /* Private */) { - write("private "); - } - else if (node.flags & 64 /* Protected */) { - write("protected "); - } - else if (node.parent === currentSourceFile) { - if (node.flags & 1 /* Export */) { - write("export "); - } - if (node.kind !== 175 /* InterfaceDeclaration */) { - write("declare "); - } - } - } - } - function emitImportDeclaration(node) { - var nodeEmitInfo = { - declaration: node, - outputPos: writer.getTextPos(), - indent: writer.getIndent(), - hasWritten: resolver.isDeclarationVisible(node) - }; - aliasDeclarationEmitInfo.push(nodeEmitInfo); - if (nodeEmitInfo.hasWritten) { - writeImportDeclaration(node); - } - } - function writeImportDeclaration(node) { - emitJsDocComments(node); - if (node.flags & 1 /* Export */) { - writer.write("export "); - } - writer.write("import "); - writer.write(getSourceTextOfLocalNode(node.name)); - writer.write(" = "); - if (node.entityName) { - checkEntityNameAccessible(); - writer.write(getSourceTextOfLocalNode(node.entityName)); - writer.write(";"); - } - else { - writer.write("require("); - writer.write(getSourceTextOfLocalNode(node.externalModuleName)); - writer.write(");"); - } - writer.writeLine(); - function checkEntityNameAccessible() { - var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); - if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { - if (symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - reportedDeclarationError = true; - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName)); - } - } - } - function emitModuleDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("module "); - emitSourceTextOfNode(node.name); - while (node.body.kind !== 178 /* ModuleBlock */) { - node = node.body; - write("."); - emitSourceTextOfNode(node.name); - } - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.body.statements); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitEnumDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("enum "); - emitSourceTextOfNode(node.name); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - } - } - function emitEnumMemberDeclaration(node) { - emitJsDocComments(node); - emitSourceTextOfNode(node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); - if (enumMemberValue !== undefined) { - write(" = "); - write(enumMemberValue.toString()); - } - write(","); - writeLine(); - } - function emitTypeParameters(typeParameters) { - function emitTypeParameter(node) { - function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.parent.kind) { - case 174 /* ClassDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; - break; - case 175 /* InterfaceDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; - break; - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 120 /* Method */: - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - default: - ts.Debug.fail("This is unknown parent for type parameter: " + ts.SyntaxKind[node.parent.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - increaseIndent(); - emitJsDocComments(node); - decreaseIndent(); - emitSourceTextOfNode(node.name); - if (node.constraint && (node.parent.kind !== 120 /* Method */ || !(node.parent.flags & 32 /* Private */))) { - write(" extends "); - getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - } - if (typeParameters) { - write("<"); - emitCommaList(typeParameters, emitTypeParameter); - write(">"); - } - } - function emitHeritageClause(typeReferences, isImplementsList) { - if (typeReferences) { - write(isImplementsList ? " implements " : " extends "); - emitCommaList(typeReferences, emitTypeOfTypeReference); - } - function emitTypeOfTypeReference(node) { - getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); - function getHeritageClauseVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.parent.kind === 174 /* ClassDeclaration */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } - } - else { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.parent.name - }; - } - } - } - function emitClassDeclaration(node) { - function emitParameterProperties(constructorDeclaration) { - if (constructorDeclaration) { - ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & ts.NodeFlags.AccessibilityModifier) { - emitPropertyDeclaration(param); - } - }); - } - } - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("class "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - if (node.baseType) { - emitHeritageClause([node.baseType], false); - } - emitHeritageClause(node.implementedTypes, true); - write(" {"); - writeLine(); - increaseIndent(); - emitParameterProperties(getFirstConstructorWithBody(node)); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitInterfaceDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("interface "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - emitHeritageClause(node.baseTypes, false); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitPropertyDeclaration(node) { - emitJsDocComments(node); - emitDeclarationFlags(node); - emitVariableDeclaration(node); - write(";"); - writeLine(); - } - function emitVariableDeclaration(node) { - if (node.kind !== 171 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { - emitSourceTextOfNode(node.name); - if (node.kind === 119 /* Property */ && (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - if (!(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - } - function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.kind === 171 /* VariableDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; - } - else if (node.kind === 119 /* Property */) { - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; - } - } - return diagnosticMessage !== undefined ? { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - } : undefined; - } - } - function emitVariableStatement(node) { - var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); - if (hasDeclarationWithEmit) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("var "); - emitCommaList(node.declarations, emitVariableDeclaration); - write(";"); - writeLine(); - } - } - function emitAccessorDeclaration(node) { - var accessors = getAllAccessorDeclarations(node.parent, node); - if (node === accessors.firstAccessor) { - emitJsDocComments(accessors.getAccessor); - emitJsDocComments(accessors.setAccessor); - emitDeclarationFlags(node); - emitSourceTextOfNode(node.name); - if (!(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - write(";"); - writeLine(); - } - function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.kind === 123 /* SetAccessor */) { - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.parameters[0], - typeName: node.name - }; - } - else { - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name, - typeName: undefined - }; - } - } - } - function emitFunctionDeclaration(node) { - if ((node.kind !== 172 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - if (node.kind === 172 /* FunctionDeclaration */) { - write("function "); - emitSourceTextOfNode(node.name); - } - else if (node.kind === 121 /* Constructor */) { - write("constructor"); - } - else { - emitSourceTextOfNode(node.name); - if (node.flags & 4 /* QuestionMark */) { - write("?"); - } - } - emitSignatureDeclaration(node); - } - } - function emitConstructSignatureDeclaration(node) { - emitJsDocComments(node); - write("new "); - emitSignatureDeclaration(node); - } - function emitSignatureDeclaration(node) { - if (node.kind === 124 /* CallSignature */ || node.kind === 126 /* IndexSignature */) { - emitJsDocComments(node); - } - emitTypeParameters(node.typeParameters); - if (node.kind === 126 /* IndexSignature */) { - write("["); - } - else { - write("("); - } - emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 126 /* IndexSignature */) { - write("]"); - } - else { - write(")"); - } - if (node.kind !== 121 /* Constructor */ && !(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - write(";"); - writeLine(); - function getReturnTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.kind) { - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 126 /* IndexSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 120 /* Method */: - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; - } - else if (node.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; - break; - default: - ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name || node - }; - } - } - function emitParameterDeclaration(node) { - increaseIndent(); - emitJsDocComments(node); - if (node.flags & 8 /* Rest */) { - write("..."); - } - emitSourceTextOfNode(node.name); - if (node.initializer || (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - decreaseIndent(); - if (!(node.parent.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.parent.kind) { - case 121 /* Constructor */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; - break; - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 120 /* Method */: - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - default: - ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - } - function emitNode(node) { - switch (node.kind) { - case 121 /* Constructor */: - case 172 /* FunctionDeclaration */: - case 120 /* Method */: - return emitFunctionDeclaration(node); - case 125 /* ConstructSignature */: - return emitConstructSignatureDeclaration(node); - case 124 /* CallSignature */: - case 126 /* IndexSignature */: - return emitSignatureDeclaration(node); - case 122 /* GetAccessor */: - case 123 /* SetAccessor */: - return emitAccessorDeclaration(node); - case 149 /* VariableStatement */: - return emitVariableStatement(node); - case 119 /* Property */: - return emitPropertyDeclaration(node); - case 175 /* InterfaceDeclaration */: - return emitInterfaceDeclaration(node); - case 174 /* ClassDeclaration */: - return emitClassDeclaration(node); - case 181 /* EnumMember */: - return emitEnumMemberDeclaration(node); - case 176 /* EnumDeclaration */: - return emitEnumDeclaration(node); - case 177 /* ModuleDeclaration */: - return emitModuleDeclaration(node); - case 179 /* ImportDeclaration */: - return emitImportDeclaration(node); - case 180 /* ExportAssignment */: - return emitExportAssignment(node); - case 182 /* SourceFile */: - return emitSourceFile(node); - } - } - function resolveScriptReference(sourceFile, reference) { - var referenceFileName = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); - return program.getSourceFile(referenceFileName); - } - var referencePathsOutput = ""; - function writeReferencePath(referencedFile) { - var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; - declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); - referencePathsOutput += "/// " + newLine; - } - if (root) { - if (!compilerOptions.noResolve) { - var addedGlobalFileReference = false; - ts.forEach(root.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(root, fileReference); - if ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference) { - writeReferencePath(referencedFile); - if (!isExternalModuleOrDeclarationFile(referencedFile)) { - addedGlobalFileReference = true; - } - } - }); - } - emitNode(root); - } - else { - var emittedReferencedFiles = []; - ts.forEach(program.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - if (!compilerOptions.noResolve) { - ts.forEach(sourceFile.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(sourceFile, fileReference); - if (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile)) { - writeReferencePath(referencedFile); - emittedReferencedFiles.push(referencedFile); - } - }); - } - emitNode(sourceFile); - } - }); - } - if (!reportedDeclarationError) { - var declarationOutput = referencePathsOutput; - var synchronousDeclarationOutput = writer.getText(); - var appliedSyncOutputPos = 0; - ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { - if (aliasEmitInfo.asynchronousOutput) { - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); - declarationOutput += aliasEmitInfo.asynchronousOutput; - appliedSyncOutputPos = aliasEmitInfo.outputPos; - } - }); - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); - writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); - } - } var hasSemanticErrors = resolver.hasSemanticErrors(); function emitFile(jsFilePath, sourceFile) { emitJavaScript(jsFilePath, sourceFile); if (!hasSemanticErrors && compilerOptions.declaration) { - emitDeclarations(jsFilePath, sourceFile); + var emitDeclarationResult = emitDeclarations(program, resolver, diagnostics, jsFilePath, sourceFile); + if (!emitDeclarationResult.reportedDeclarationError) { + writeDeclarationToFile(compilerHost, compilerOptions, diagnostics, emitDeclarationResult.aliasDeclarationEmitInfo, emitDeclarationResult.synchronousDeclarationOutput, jsFilePath, emitDeclarationResult.declarationOutput); + } } } if (targetSourceFile === undefined) { ts.forEach(program.getSourceFiles(), function (sourceFile) { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, program, ".js"); emitFile(jsFilePath, sourceFile); } }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } } else { - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - if (compilerOptions.out) { - emitFile(compilerOptions.out); + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); + emitFile(jsFilePath, targetSourceFile); + } + else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { + emitFile(compilerOptions.out); + } } diagnostics.sort(ts.compareDiagnostics); diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); @@ -8826,6 +8954,27 @@ var ts; return undefined; } ts.getDeclarationOfKind = getDeclarationOfKind; + var stringWriters = []; + function getSingleLineStringWriter() { + if (stringWriters.length == 0) { + var str = ""; + return { + string: function () { return str; }, + writeKind: function (text) { return str += text; }, + writeSymbol: function (text) { return str += text; }, + writeLine: function () { return str += " "; }, + increaseIndent: function () { + }, + decreaseIndent: function () { + }, + clear: function () { return str = ""; }, + trackSymbol: function () { + } + }; + } + return stringWriters.pop(); + } + ts.getSingleLineStringWriter = getSingleLineStringWriter; function createTypeChecker(program, fullTypeCheck) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); @@ -8837,6 +8986,7 @@ var ts; var checker = { getProgram: function () { return program; }, getDiagnostics: getDiagnostics, + getDeclarationDiagnostics: getDeclarationDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, @@ -8856,11 +9006,24 @@ var ts; getTypeOfNode: getTypeOfNode, getApparentType: getApparentType, typeToString: typeToString, + writeType: writeType, symbolToString: symbolToString, + writeSymbol: writeSymbol, getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType, getRootSymbol: getRootSymbol, getContextualType: getContextualType, - getFullyQualifiedName: getFullyQualifiedName + getFullyQualifiedName: getFullyQualifiedName, + getResolvedSignature: getResolvedSignature, + getEnumMemberValue: getEnumMemberValue, + isValidPropertyAccess: isValidPropertyAccess, + getSignatureFromDeclaration: getSignatureFromDeclaration, + writeSignature: writeSignature, + writeTypeParameter: writeTypeParameter, + writeTypeParametersOfSymbol: writeTypeParametersOfSymbol, + isImplementationOfOverload: isImplementationOfOverload, + getAliasedSymbol: resolveImport, + isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; }, + isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; } }; var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); @@ -9400,13 +9563,13 @@ var ts; function getQualifiedLeftMeaning(rightMeaning) { return rightMeaning === ts.SymbolFlags.Value ? ts.SymbolFlags.Value : ts.SymbolFlags.Namespace; } - function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) { function getAccessibleSymbolChainFromSymbolTable(symbols) { function canQualifySymbol(symbolFromSymbolTable, meaning) { if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { return true; } - var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning)); + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing); return !!accessibleParent; } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { @@ -9419,13 +9582,15 @@ var ts; } return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 4194304 /* Import */) { - var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); - if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return [symbolFromSymbolTable]; - } - var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; - if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { - return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return declaration.kind === 179 /* ImportDeclaration */ && declaration.externalModuleName; })) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); + if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + } } } }); @@ -9458,7 +9623,7 @@ var ts; var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); if (accessibleSymbolChain) { var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); if (!hasAccessibleDeclarations) { @@ -9526,139 +9691,157 @@ var ts; return true; } } - function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) { + function isImportDeclarationEntityNameReferenceDeclarationVisible(entityName) { var firstIdentifier = getFirstIdentifier(entityName); var firstIdentifierName = ts.identifierToString(firstIdentifier); var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, ts.SymbolFlags.Namespace, ts.Diagnostics.Cannot_find_name_0, firstIdentifierName); var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: firstIdentifierName }; } + function releaseStringWriter(writer) { + writer.clear(); + stringWriters.push(writer); + } + function writeKeyword(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 5 /* keyword */); + } + function writePunctuation(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 15 /* punctuation */); + } + function writeOperator(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 12 /* operator */); + } + function writeSpace(writer) { + writer.writeKind(" ", 16 /* space */); + } function symbolToString(symbol, enclosingDeclaration, meaning) { - function getSymbolName(symbol) { + var writer = getSingleLineStringWriter(); + writeSymbol(symbol, writer, enclosingDeclaration, meaning); + var result = writer.string(); + releaseStringWriter(writer); + return result; + } + function writeSymbol(symbol, writer, enclosingDeclaration, meaning, flags) { + var parentSymbol; + function writeSymbolName(symbol) { + if (parentSymbol) { + if (flags & 1 /* WriteTypeParametersOrArguments */) { + if (symbol.flags & 8388608 /* Instantiated */) { + writeTypeArguments(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration); + } + else { + writeTypeParametersOfSymbol(parentSymbol, writer, enclosingDeclaration); + } + } + writePunctuation(writer, 15 /* DotToken */); + } + parentSymbol = symbol; if (symbol.declarations && symbol.declarations.length > 0) { var declaration = symbol.declarations[0]; if (declaration.name) { - return ts.identifierToString(declaration.name); + writer.writeSymbol(ts.identifierToString(declaration.name), symbol); + return; } } - return symbol.name; + writer.writeSymbol(symbol.name, symbol); } - if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { - var symbolName; - while (symbol) { - var isFirstName = !symbolName; - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning); - var currentSymbolName; + writer.trackSymbol(symbol, enclosingDeclaration, meaning); + function walkSymbol(symbol, meaning) { + if (symbol) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2 /* UseOnlyExternalAliasing */)); + if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { + walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning)); + } if (accessibleSymbolChain) { - currentSymbolName = ts.map(accessibleSymbolChain, function (accessibleSymbol) { return getSymbolName(accessibleSymbol); }).join("."); + for (var i = 0, n = accessibleSymbolChain.length; i < n; i++) { + writeSymbolName(accessibleSymbolChain[i]); + } } else { - if (!isFirstName && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { - break; + if (!parentSymbol && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { + return; } - currentSymbolName = getSymbolName(symbol); - } - symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { - break; - } - symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); - meaning = getQualifiedLeftMeaning(meaning); - } - return symbolName; - } - return getSymbolName(symbol); - } - function writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, writer) { - writer.write(symbolToString(symbol, enclosingDeclaration, meaning)); - } - function createSingleLineTextWriter(maxLength) { - var result = ""; - var overflow = false; - function write(s) { - if (!overflow) { - result += s; - if (result.length > maxLength) { - result = result.substr(0, maxLength - 3) + "..."; - overflow = true; + if (symbol.flags & 512 /* TypeLiteral */ || symbol.flags & 1024 /* ObjectLiteral */) { + return; + } + writeSymbolName(symbol); } } } - return { - write: write, - writeSymbol: function (symbol, enclosingDeclaration, meaning) { - writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, this); - }, - writeLine: function () { - write(" "); - }, - increaseIndent: function () { - }, - decreaseIndent: function () { - }, - getText: function () { - return result; - } - }; + if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + walkSymbol(symbol, meaning); + return; + } + return writeSymbolName(symbol); } function typeToString(type, enclosingDeclaration, flags) { + var writer = getSingleLineStringWriter(); + writeType(type, writer, enclosingDeclaration, flags); + var result = writer.string(); + releaseStringWriter(writer); var maxLength = compilerOptions.noErrorTruncation || flags & 4 /* NoTruncation */ ? undefined : 100; - var stringWriter = createSingleLineTextWriter(maxLength); - writeTypeToTextWriter(type, enclosingDeclaration, flags, stringWriter); - return stringWriter.getText(); + if (maxLength && result.length >= maxLength) { + result = result.substr(0, maxLength - "...".length) + "..."; + } + return result; } - function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { - var typeStack; - return writeType(type, true); - function writeType(type, allowFunctionOrConstructorTypeLiteral) { + function writeType(type, writer, enclosingDeclaration, flags, typeStack) { + return writeType(type, flags | 8 /* WriteArrowStyleSignature */); + function writeType(type, flags) { if (type.flags & ts.TypeFlags.Intrinsic) { - writer.write(type.intrinsicName); + writer.writeKind(!(flags & 16 /* WriteOwnNameForAnyLike */) && (type.flags & 1 /* Any */) ? "any" : type.intrinsicName, 5 /* keyword */); } else if (type.flags & 4096 /* Reference */) { writeTypeReference(type); } else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { - writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Type); + writeSymbol(type.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Type); } else if (type.flags & 8192 /* Tuple */) { writeTupleType(type); } else if (type.flags & 16384 /* Anonymous */) { - writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral); + writeAnonymousType(type, flags); } else if (type.flags & 256 /* StringLiteral */) { - writer.write(type.text); + writer.writeKind(type.text, 8 /* stringLiteral */); } else { - writer.write("{ ... }"); + writePunctuation(writer, 9 /* OpenBraceToken */); + writeSpace(writer); + writePunctuation(writer, 16 /* DotDotDotToken */); + writeSpace(writer); + writePunctuation(writer, 10 /* CloseBraceToken */); } } function writeTypeList(types) { for (var i = 0; i < types.length; i++) { if (i > 0) { - writer.write(", "); + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); } - writeType(types[i], true); + writeType(types[i], flags | 8 /* WriteArrowStyleSignature */); } } function writeTypeReference(type) { if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { - writeType(type.typeArguments[0], false); - writer.write("[]"); + writeType(type.typeArguments[0], flags & ~8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 13 /* OpenBracketToken */); + writePunctuation(writer, 14 /* CloseBracketToken */); } else { - writer.writeSymbol(type.target.symbol, enclosingDeclaration, ts.SymbolFlags.Type); - writer.write("<"); + writeSymbol(type.target.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Type); + writePunctuation(writer, 19 /* LessThanToken */); writeTypeList(type.typeArguments); - writer.write(">"); + writePunctuation(writer, 20 /* GreaterThanToken */); } } function writeTupleType(type) { - writer.write("["); + writePunctuation(writer, 13 /* OpenBracketToken */); writeTypeList(type.elementTypes); - writer.write("]"); + writePunctuation(writer, 14 /* CloseBracketToken */); } - function writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral) { + function writeAnonymousType(type, flags) { if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { writeTypeofSymbol(type); } @@ -9666,14 +9849,14 @@ var ts; writeTypeofSymbol(type); } else if (typeStack && ts.contains(typeStack, type)) { - writer.write("any"); + writeKeyword(writer, 105 /* AnyKeyword */); } else { if (!typeStack) { typeStack = []; } typeStack.push(type); - writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); + writeLiteralType(type, flags); typeStack.pop(); } function shouldWriteTypeOfFunctionSymbol() { @@ -9687,52 +9870,70 @@ var ts; } } function writeTypeofSymbol(type) { - writer.write("typeof "); - writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Value); + writeKeyword(writer, 91 /* TypeOfKeyword */); + writeSpace(writer); + writeSymbol(type.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Value); } - function writeLiteralType(type, allowFunctionOrConstructorTypeLiteral) { + function writeLiteralType(type, flags) { var resolved = resolveObjectTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { - writer.write("{}"); + writePunctuation(writer, 9 /* OpenBraceToken */); + writePunctuation(writer, 10 /* CloseBraceToken */); return; } - if (allowFunctionOrConstructorTypeLiteral) { + if (flags & 8 /* WriteArrowStyleSignature */) { if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - writeSignature(resolved.callSignatures[0], true); + writeSignature(resolved.callSignatures[0], writer, enclosingDeclaration, flags, typeStack); return; } if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { - writer.write("new "); - writeSignature(resolved.constructSignatures[0], true); + writeKeyword(writer, 82 /* NewKeyword */); + writeSpace(writer); + writeSignature(resolved.constructSignatures[0], writer, enclosingDeclaration, flags, typeStack); return; } } } - writer.write("{"); + writePunctuation(writer, 9 /* OpenBraceToken */); writer.writeLine(); writer.increaseIndent(); for (var i = 0; i < resolved.callSignatures.length; i++) { - writeSignature(resolved.callSignatures[i]); - writer.write(";"); + writeSignature(resolved.callSignatures[i], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } for (var i = 0; i < resolved.constructSignatures.length; i++) { - writer.write("new "); - writeSignature(resolved.constructSignatures[i]); - writer.write(";"); + writeKeyword(writer, 82 /* NewKeyword */); + writeSpace(writer); + writeSignature(resolved.constructSignatures[i], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } if (resolved.stringIndexType) { - writer.write("[x: string]: "); - writeType(resolved.stringIndexType, true); - writer.write(";"); + writePunctuation(writer, 13 /* OpenBracketToken */); + writer.writeKind("x", 13 /* parameterName */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeKeyword(writer, 114 /* StringKeyword */); + writePunctuation(writer, 14 /* CloseBracketToken */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(resolved.stringIndexType, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } if (resolved.numberIndexType) { - writer.write("[x: number]: "); - writeType(resolved.numberIndexType, true); - writer.write(";"); + writePunctuation(writer, 13 /* OpenBracketToken */); + writer.writeKind("x", 13 /* parameterName */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeKeyword(writer, 112 /* NumberKeyword */); + writePunctuation(writer, 14 /* CloseBracketToken */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(resolved.numberIndexType, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } for (var i = 0; i < resolved.properties.length; i++) { @@ -9741,66 +9942,109 @@ var ts; if (p.flags & (8 /* Function */ | 2048 /* Method */) && !getPropertiesOfType(t).length) { var signatures = getSignaturesOfType(t, 0 /* Call */); for (var j = 0; j < signatures.length; j++) { - writer.writeSymbol(p); + writeSymbol(p, writer); if (isOptionalProperty(p)) { - writer.write("?"); + writePunctuation(writer, 45 /* QuestionToken */); } - writeSignature(signatures[j]); - writer.write(";"); + writeSignature(signatures[j], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } } else { - writer.writeSymbol(p); + writeSymbol(p, writer); if (isOptionalProperty(p)) { - writer.write("?"); + writePunctuation(writer, 45 /* QuestionToken */); } - writer.write(": "); - writeType(t, true); - writer.write(";"); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(t, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } } writer.decreaseIndent(); - writer.write("}"); + writePunctuation(writer, 10 /* CloseBraceToken */); } - function writeSignature(signature, arrowStyle) { - if (signature.typeParameters) { - writer.write("<"); - for (var i = 0; i < signature.typeParameters.length; i++) { - if (i > 0) { - writer.write(", "); - } - var tp = signature.typeParameters[i]; - writer.writeSymbol(tp.symbol); - var constraint = getConstraintOfTypeParameter(tp); - if (constraint) { - writer.write(" extends "); - writeType(constraint, true); - } - } - writer.write(">"); - } - writer.write("("); - for (var i = 0; i < signature.parameters.length; i++) { + } + function writeTypeParameter(tp, writer, enclosingDeclaration, flags, typeStack) { + writeSymbol(tp.symbol, writer); + var constraint = getConstraintOfTypeParameter(tp); + if (constraint) { + writeSpace(writer); + writeKeyword(writer, 73 /* ExtendsKeyword */); + writeSpace(writer); + writeType(constraint, writer, enclosingDeclaration, flags, typeStack); + } + } + function writeTypeParameters(typeParameters, writer, enclosingDeclaration, flags, typeStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 19 /* LessThanToken */); + for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { - writer.write(", "); + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); } - var p = signature.parameters[i]; - if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { - writer.write("..."); - } - writer.writeSymbol(p); - if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { - writer.write("?"); - } - writer.write(": "); - writeType(getTypeOfSymbol(p), true); + writeTypeParameter(typeParameters[i], writer, enclosingDeclaration, flags, typeStack); } - writer.write(arrowStyle ? ") => " : "): "); - writeType(getReturnTypeOfSignature(signature), true); + writePunctuation(writer, 20 /* GreaterThanToken */); } } + function writeTypeArguments(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 19 /* LessThanToken */); + for (var i = 0; i < typeParameters.length; i++) { + if (i > 0) { + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); + } + writeType(mapper(typeParameters[i]), writer, enclosingDeclaration, 8 /* WriteArrowStyleSignature */); + } + writePunctuation(writer, 20 /* GreaterThanToken */); + } + } + function writeTypeParametersOfSymbol(symbol, writer, enclosingDeclaraiton, flags) { + var rootSymbol = getRootSymbol(symbol); + if (rootSymbol.flags & 16 /* Class */ || rootSymbol.flags & 32 /* Interface */) { + writeTypeParameters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags); + } + } + function writeSignature(signature, writer, enclosingDeclaration, flags, typeStack) { + if (signature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */)) { + writeTypeArguments(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration); + } + else { + writeTypeParameters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack); + } + writePunctuation(writer, 11 /* OpenParenToken */); + for (var i = 0; i < signature.parameters.length; i++) { + if (i > 0) { + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); + } + var p = signature.parameters[i]; + if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { + writePunctuation(writer, 16 /* DotDotDotToken */); + } + writeSymbol(p, writer); + if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { + writePunctuation(writer, 45 /* QuestionToken */); + } + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack); + } + writePunctuation(writer, 12 /* CloseParenToken */); + if (flags & 8 /* WriteArrowStyleSignature */) { + writeSpace(writer); + writePunctuation(writer, 27 /* EqualsGreaterThanToken */); + } + else { + writePunctuation(writer, 46 /* ColonToken */); + } + writeSpace(writer); + writeType(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack); + } function isDeclarationVisible(node) { function getContainingExternalModule(node) { for (; node; node = node.parent) { @@ -10821,7 +11065,7 @@ var ts; if (ts.hasProperty(stringLiteralTypes, node.text)) return stringLiteralTypes[node.text]; var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); - type.text = ts.getSourceTextOfNode(node); + type.text = ts.getTextOfNode(node); return type; } function getTypeFromStringLiteral(node) { @@ -11949,9 +12193,17 @@ var ts; var func = parameter.parent; if (func.kind === 141 /* FunctionExpression */ || func.kind === 142 /* ArrowFunction */) { if (isContextSensitiveExpression(func)) { - var signature = getContextualSignature(func); - if (signature) { - return getTypeAtPosition(signature, ts.indexOf(func.parameters, parameter)); + var contextualSignature = getContextualSignature(func); + if (contextualSignature) { + var funcHasRestParameters = ts.hasRestParameters(func); + var len = func.parameters.length - (funcHasRestParameters ? 1 : 0); + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (indexOfParameter < len) { + return getTypeAtPosition(contextualSignature, indexOfParameter); + } + if (indexOfParameter === (func.parameters.length - 1) && funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) { + return getTypeOfSymbol(contextualSignature.parameters[contextualSignature.parameters.length - 1]); + } } } } @@ -12111,7 +12363,7 @@ var ts; return createArrayType(elementType); } function isNumericName(name) { - return !isNaN(name); + return (name !== "") && !isNaN(name); } function checkObjectLiteral(node, contextualMapper) { var members = node.symbol.members; @@ -12229,6 +12481,24 @@ var ts; } return anyType; } + function isValidPropertyAccess(node, propertyName) { + 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 & 16 /* Class */) { + if (node.left.kind === 85 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 120 /* Method */) { + return false; + } + else { + var diagnosticsCount = diagnostics.length; + checkClassPropertyAccess(node, type, prop); + return diagnostics.length === diagnosticsCount; + } + } + } + return true; + } function checkIndexedAccess(node) { var objectType = checkExpression(node.object); var indexType = checkExpression(node.index); @@ -12274,42 +12544,20 @@ var ts; resolveUntypedCall(node); return unknownSignature; } - function isCandidateSignature(node, signature) { - var args = node.arguments || emptyArray; - return args.length >= signature.minArgumentCount && (signature.hasRestParameter || args.length <= signature.parameters.length) && (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); - } - function collectCandidates(node, signatures) { - var result = []; - var lastParent; - var lastSymbol; - var cutoffPos = 0; - var pos; - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (isCandidateSignature(node, signature)) { - var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent = signature.declaration && signature.declaration.parent; - if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent === lastParent) { - pos++; - } - else { - lastParent = parent; - pos = cutoffPos; - } - } - else { - pos = cutoffPos = result.length; - lastParent = parent; - } - lastSymbol = symbol; - for (var j = result.length; j > pos; j--) { - result[j] = result[j - 1]; - } - result[pos] = signature; - } + function signatureHasCorrectArity(node, signature) { + if (!node.arguments) { + return signature.minArgumentCount === 0; } - return result; + 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; + } + var callIsIncomplete = args.end === node.end; + var hasEnoughArguments = numberOfArgs >= signature.minArgumentCount; + return callIsIncomplete || hasEnoughArguments; } function getSingleCallSignature(type) { if (type.flags & ts.TypeFlags.ObjectType) { @@ -12332,6 +12580,9 @@ var ts; var context = createInferenceContext(typeParameters); var mapper = createInferenceMapper(context); for (var i = 0; i < args.length; i++) { + if (args[i].kind === 147 /* OmittedExpression */) { + continue; + } if (!excludeArgument || excludeArgument[i] === undefined) { var parameterType = getTypeAtPosition(signature, i); inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); @@ -12339,6 +12590,9 @@ var ts; } if (excludeArgument) { for (var i = 0; i < args.length; i++) { + if (args[i].kind === 147 /* OmittedExpression */) { + continue; + } if (excludeArgument[i] === false) { var parameterType = getTypeAtPosition(signature, i); inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); @@ -12365,6 +12619,9 @@ var ts; if (node.arguments) { for (var i = 0; i < node.arguments.length; i++) { var arg = node.arguments[i]; + if (arg.kind === 147 /* OmittedExpression */) { + continue; + } var paramType = getTypeAtPosition(signature, i); var argType = arg.kind === 7 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1); @@ -12375,9 +12632,10 @@ var ts; } return true; } - function resolveCall(node, signatures) { + function resolveCall(node, signatures, candidatesOutArray) { ts.forEach(node.typeArguments, checkSourceElement); - var candidates = collectCandidates(node, signatures); + var candidates = candidatesOutArray || []; + collectCandidates(); if (!candidates.length) { error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); return resolveErrorCall(node); @@ -12394,18 +12652,21 @@ var ts; var relation = candidates.length === 1 ? assignableRelation : subtypeRelation; while (true) { for (var i = 0; i < candidates.length; i++) { + if (!signatureHasCorrectArity(node, candidates[i])) { + continue; + } while (true) { - var candidate = candidates[i]; - if (candidate.typeParameters) { - var typeArguments = node.typeArguments ? checkTypeArguments(candidate, node.typeArguments) : inferTypeArguments(candidate, args, excludeArgument); - candidate = getSignatureInstantiation(candidate, typeArguments); + var candidateWithCorrectArity = candidates[i]; + if (candidateWithCorrectArity.typeParameters) { + var typeArguments = node.typeArguments ? checkTypeArguments(candidateWithCorrectArity, node.typeArguments) : inferTypeArguments(candidateWithCorrectArity, args, excludeArgument); + candidateWithCorrectArity = getSignatureInstantiation(candidateWithCorrectArity, typeArguments); } - if (!checkApplicableSignature(node, candidate, relation, excludeArgument, false)) { + if (!checkApplicableSignature(node, candidateWithCorrectArity, relation, excludeArgument, false)) { break; } var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; if (index < 0) { - return candidate; + return candidateWithCorrectArity; } excludeArgument[index] = false; } @@ -12415,14 +12676,59 @@ var ts; } relation = assignableRelation; } - checkApplicableSignature(node, candidate, relation, undefined, true); + if (candidateWithCorrectArity) { + checkApplicableSignature(node, candidateWithCorrectArity, relation, undefined, true); + } + else { + error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + } + if (!fullTypeCheck) { + for (var i = 0, n = candidates.length; i < n; i++) { + if (signatureHasCorrectArity(node, candidates[i])) { + return candidates[i]; + } + } + } return resolveErrorCall(node); + function collectCandidates() { + var result = candidates; + var lastParent; + var lastSymbol; + var cutoffPos = 0; + var pos; + ts.Debug.assert(!result.length); + for (var i = 0; i < signatures.length; i++) { + var signature = signatures[i]; + if (true) { + var symbol = signature.declaration && getSymbolOfNode(signature.declaration); + var parent = signature.declaration && signature.declaration.parent; + if (!lastSymbol || symbol === lastSymbol) { + if (lastParent && parent === lastParent) { + pos++; + } + else { + lastParent = parent; + pos = cutoffPos; + } + } + else { + pos = cutoffPos = result.length; + lastParent = parent; + } + lastSymbol = symbol; + for (var j = result.length; j > pos; j--) { + result[j] = result[j - 1]; + } + result[pos] = signature; + } + } + } } - function resolveCallExpression(node) { + function resolveCallExpression(node, candidatesOutArray) { if (node.func.kind === 85 /* SuperKeyword */) { var superType = checkSuperExpression(node.func); if (superType !== unknownType) { - return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */)); + return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */), candidatesOutArray); } return resolveUntypedCall(node); } @@ -12451,9 +12757,9 @@ var ts; } return resolveErrorCall(node); } - return resolveCall(node, callSignatures); + return resolveCall(node, callSignatures, candidatesOutArray); } - function resolveNewExpression(node) { + function resolveNewExpression(node, candidatesOutArray) { var expressionType = checkExpression(node.func); if (expressionType === unknownType) { return resolveErrorCall(node); @@ -12470,11 +12776,11 @@ var ts; } var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); if (constructSignatures.length) { - return resolveCall(node, constructSignatures); + return resolveCall(node, constructSignatures, candidatesOutArray); } var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); if (callSignatures.length) { - var signature = resolveCall(node, callSignatures); + var signature = resolveCall(node, callSignatures, candidatesOutArray); if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } @@ -12483,11 +12789,11 @@ var ts; error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature); return resolveErrorCall(node); } - function getResolvedSignature(node) { + function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); - if (!links.resolvedSignature) { + if (!links.resolvedSignature || candidatesOutArray) { links.resolvedSignature = anySignature; - links.resolvedSignature = node.kind === 137 /* CallExpression */ ? resolveCallExpression(node) : resolveNewExpression(node); + links.resolvedSignature = node.kind === 137 /* CallExpression */ ? resolveCallExpression(node, candidatesOutArray) : resolveNewExpression(node, candidatesOutArray); } return links.resolvedSignature; } @@ -12717,10 +13023,10 @@ var ts; return type === anyType || ((type.flags & (ts.TypeFlags.ObjectType | 512 /* TypeParameter */)) !== 0); } function checkInstanceOfExpression(node, leftType, rightType) { - if (!isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { + if (leftType !== unknownType && !isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - if (rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { + if (rightType !== unknownType && rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); } return booleanType; @@ -12763,10 +13069,16 @@ var ts; leftType = rightType; if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) rightType = leftType; - var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - if (leftOk && rightOk) { - checkAssignmentOperator(numberType); + var suggestedOperator; + if ((leftType.flags & 8 /* Boolean */) && (rightType.flags & 8 /* Boolean */) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { + error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operator), ts.tokenToString(suggestedOperator)); + } + else { + var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + if (leftOk && rightOk) { + checkAssignmentOperator(numberType); + } } return numberType; case 28 /* PlusToken */: @@ -12819,6 +13131,21 @@ var ts; case 18 /* CommaToken */: return rightType; } + function getSuggestedBooleanOperator(operator) { + switch (operator) { + case 39 /* BarToken */: + case 57 /* BarEqualsToken */: + return 44 /* BarBarToken */; + case 40 /* CaretToken */: + case 58 /* CaretEqualsToken */: + return 26 /* ExclamationEqualsEqualsToken */; + case 38 /* AmpersandToken */: + case 56 /* AmpersandEqualsToken */: + return 43 /* AmpersandAmpersandToken */; + default: + return undefined; + } + } function checkAssignmentOperator(valueType) { if (fullTypeCheck && operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); @@ -12985,7 +13312,7 @@ var ts; if (fullTypeCheck) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { @@ -13239,6 +13566,9 @@ var ts; var declarations = symbol.declarations; var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; function reportImplementationExpectedError(node) { + if (node.name && node.name.kind === 115 /* Missing */) { + return; + } var seen = false; var subsequentNode = ts.forEachChild(node.parent, function (c) { if (seen) { @@ -13273,6 +13603,8 @@ var ts; } } var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & ts.SymbolFlags.Module; + var duplicateFunctionDeclaration = false; + var multipleConstructorImplementation = false; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; var inAmbientContext = ts.isInAmbientContext(node); @@ -13286,10 +13618,10 @@ var ts; allNodeFlags &= currentNodeFlags; if (node.body && bodyDeclaration) { if (isConstructor) { - error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + multipleConstructorImplementation = true; } else { - error(node, ts.Diagnostics.Duplicate_function_implementation); + duplicateFunctionDeclaration = true; } } else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { @@ -13309,6 +13641,16 @@ var ts; } } } + if (multipleConstructorImplementation) { + ts.forEach(declarations, function (declaration) { + error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + }); + } + if (duplicateFunctionDeclaration) { + ts.forEach(declarations, function (declaration) { + error(declaration.name, ts.Diagnostics.Duplicate_function_implementation); + }); + } if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -13515,7 +13857,7 @@ var ts; } } } - function checkCollistionWithRequireExportsInGeneratedCode(node, name) { + function checkCollisionWithRequireExportsInGeneratedCode(node, name) { if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } @@ -13548,7 +13890,7 @@ var ts; } checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); if (!useTypeFromValueDeclaration) { if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); @@ -13739,7 +14081,7 @@ var ts; checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); checkTypeParameters(node.typeParameters); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); var type = getDeclaredTypeOfSymbol(symbol); @@ -13886,7 +14228,7 @@ var ts; checkTypeForDuplicateIndexSignatures(node); } } - function getConstantValue(node) { + function getConstantValueForExpression(node) { var isNegative = false; if (node.kind === 143 /* PrefixOperator */) { var unaryExpression = node; @@ -13901,33 +14243,44 @@ var ts; } return undefined; } + function computeEnumMemberValues(node) { + var nodeLinks = getNodeLinks(node); + if (!(nodeLinks.flags & 128 /* EnumValuesComputed */)) { + var enumSymbol = getSymbolOfNode(node); + var enumType = getDeclaredTypeOfSymbol(enumSymbol); + var autoValue = 0; + var ambient = ts.isInAmbientContext(node); + ts.forEach(node.members, function (member) { + if (isNumericName(member.name.text)) { + error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name); + } + var initializer = member.initializer; + if (initializer) { + autoValue = getConstantValueForExpression(initializer); + if (autoValue === undefined && !ambient) { + checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); + } + } + else if (ambient) { + autoValue = undefined; + } + if (autoValue !== undefined) { + getNodeLinks(member).enumMemberValue = autoValue++; + } + }); + nodeLinks.flags |= 128 /* EnumValuesComputed */; + } + } function checkEnumDeclaration(node) { if (!fullTypeCheck) { return; } checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); + computeEnumMemberValues(node); var enumSymbol = getSymbolOfNode(node); - var enumType = getDeclaredTypeOfSymbol(enumSymbol); - var autoValue = 0; - var ambient = ts.isInAmbientContext(node); - ts.forEach(node.members, function (member) { - var initializer = member.initializer; - if (initializer) { - autoValue = getConstantValue(initializer); - if (autoValue === undefined && !ambient) { - checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); - } - } - else if (ambient) { - autoValue = undefined; - } - if (autoValue !== undefined) { - getNodeLinks(member).enumMemberValue = autoValue++; - } - }); var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); if (node === firstDeclaration) { var seenEnumMissingInitialInitializer = false; @@ -13964,7 +14317,7 @@ var ts; function checkModuleDeclaration(node) { if (fullTypeCheck) { checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { @@ -13997,7 +14350,7 @@ var ts; } function checkImportDeclaration(node) { checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); var symbol = getSymbolOfNode(node); var target; if (node.entityName) { @@ -14239,6 +14592,11 @@ var ts; checkProgram(); return getSortedDiagnostics(); } + function getDeclarationDiagnostics(targetSourceFile) { + var resolver = createResolver(); + checkSourceFile(targetSourceFile); + return ts.getDeclarationDiagnostics(program, resolver, targetSourceFile); + } function getGlobalDiagnostics() { return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); } @@ -14414,7 +14772,7 @@ var ts; return false; } function isTypeNode(node) { - if (node.kind >= ts.SyntaxKind.FirstTypeNode && node.kind <= ts.SyntaxKind.LastTypeNode) { + if (ts.SyntaxKind.FirstTypeNode <= node.kind && node.kind <= ts.SyntaxKind.LastTypeNode) { return true; } switch (node.kind) { @@ -14432,11 +14790,12 @@ var ts; node = node.parent; } case 116 /* QualifiedName */: + ts.Debug.assert(node.kind === 59 /* Identifier */ || node.kind === 116 /* QualifiedName */, "'node' was expected to be a qualified name or identifier in 'isTypeNode'."); var parent = node.parent; if (parent.kind === 128 /* TypeQuery */) { return false; } - if (parent.kind >= ts.SyntaxKind.FirstTypeNode && parent.kind <= ts.SyntaxKind.LastTypeNode) { + if (ts.SyntaxKind.FirstTypeNode <= parent.kind && parent.kind <= ts.SyntaxKind.LastTypeNode) { return true; } switch (parent.kind) { @@ -14462,7 +14821,7 @@ var ts; return node === parent.type; case 137 /* CallExpression */: case 138 /* NewExpression */: - return parent.typeArguments.indexOf(node) >= 0; + return parent.typeArguments && parent.typeArguments.indexOf(node) >= 0; } } return false; @@ -14662,7 +15021,7 @@ var ts; while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) { prefix += "_"; } - links.localModuleName = prefix + ts.getSourceTextOfNode(container.name); + links.localModuleName = prefix + ts.getTextOfNode(container.name); } return links.localModuleName; } @@ -14688,16 +15047,6 @@ var ts; } } } - function getPropertyAccessSubstitution(node) { - var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol && (symbol.flags & 4 /* EnumMember */)) { - var declaration = symbol.valueDeclaration; - var constantValue; - if (declaration.kind === 181 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { - return constantValue.toString() + " /* " + ts.identifierToString(declaration.name) + " */"; - } - } - } function getExportAssignmentName(node) { var symbol = getExportAssignmentSymbol(getSymbolOfNode(node)); return symbol && symbolIsValue(symbol) ? symbolToString(symbol) : undefined; @@ -14738,23 +15087,34 @@ var ts; return getNodeLinks(node).flags; } function getEnumMemberValue(node) { + computeEnumMemberValues(node.parent); return getNodeLinks(node).enumMemberValue; } + function getConstantValue(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol && (symbol.flags & 4 /* EnumMember */)) { + var declaration = symbol.valueDeclaration; + var constantValue; + if (declaration.kind === 181 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { + return constantValue; + } + } + return undefined; + } function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) { var symbol = getSymbolOfNode(location); var type = symbol && !(symbol.flags & 512 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location); - writeTypeToTextWriter(type, enclosingDeclaration, flags, writer); + writeType(type, writer, enclosingDeclaration, flags); } function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { var signature = getSignatureFromDeclaration(signatureDeclaration); - writeTypeToTextWriter(getReturnTypeOfSignature(signature), enclosingDeclaration, flags, writer); + writeType(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags); } - function invokeEmitter(targetSourceFile) { - var resolver = { + function createResolver() { + return { getProgram: function () { return program; }, getLocalNameOfContainer: getLocalNameOfContainer, getExpressionNamePrefix: getExpressionNamePrefix, - getPropertyAccessSubstitution: getPropertyAccessSubstitution, getExportAssignmentName: getExportAssignmentName, isReferencedImportDeclaration: isReferencedImportDeclaration, getNodeCheckFlags: getNodeCheckFlags, @@ -14765,10 +15125,13 @@ var ts; isImplementationOfOverload: isImplementationOfOverload, writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, - writeSymbol: writeSymbolToTextWriter, isSymbolAccessible: isSymbolAccessible, - isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile + isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, + getConstantValue: getConstantValue }; + } + function invokeEmitter(targetSourceFile) { + var resolver = createResolver(); checkProgram(); return ts.emitFiles(resolver, targetSourceFile); } @@ -15024,7 +15387,7 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - var version = "1.1.0.0"; + var version = "1.3.0.0"; function validateLocaleAndSetLanguage(locale, errors) { var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase()); if (!matchResult) { @@ -15326,7 +15689,7 @@ var ts; output += sys.newLine + sys.newLine; var padding = makePadding(marginLength); output += getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + sys.newLine; - output += padding + "tsc --out foo.js foo.ts" + sys.newLine; + output += padding + "tsc --out file.js file.ts" + sys.newLine; output += padding + "tsc @args.txt" + sys.newLine; output += sys.newLine; output += getDiagnosticText(ts.Diagnostics.Options_Colon) + sys.newLine; diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js index 38f2d4e1ecf..5c3e31f30e1 100644 --- a/bin/typescriptServices.js +++ b/bin/typescriptServices.js @@ -19,6 +19,7 @@ var ts; Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." }, Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." }, _0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." }, + A_file_cannot_have_a_reference_to_itself: { code: 1006, category: 1 /* Error */, key: "A file cannot have a reference to itself." }, Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, @@ -127,6 +128,7 @@ var ts; Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + An_enum_member_cannot_have_a_numeric_name: { code: 1151, category: 1 /* Error */, key: "An enum member cannot have a numeric name." }, Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, @@ -274,6 +276,7 @@ var ts; Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: 1 /* Error */, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: 1 /* Error */, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, @@ -526,10 +529,10 @@ var ts; "|=": 57 /* BarEqualsToken */, "^=": 58 /* CaretEqualsToken */ }; - var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; function lookupInUnicodeMap(code, map) { if (code < map[0]) { return false; @@ -758,14 +761,14 @@ var ts; return result; } } - function getLeadingComments(text, pos) { + function getLeadingCommentRanges(text, pos) { return getCommentRanges(text, pos, false); } - ts.getLeadingComments = getLeadingComments; - function getTrailingComments(text, pos) { + ts.getLeadingCommentRanges = getLeadingCommentRanges; + function getTrailingCommentRanges(text, pos) { return getCommentRanges(text, pos, true); } - ts.getTrailingComments = getTrailingComments; + ts.getTrailingCommentRanges = getTrailingCommentRanges; function isIdentifierStart(ch, languageVersion) { return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); } @@ -1560,6 +1563,8 @@ var ts; SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.CaretEqualsToken] = "LastPunctuation"; SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.EndOfFileToken] = "FirstToken"; SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.StringKeyword] = "LastToken"; + SyntaxKind[SyntaxKind["FirstTriviaToken"] = SyntaxKind.SingleLineCommentTrivia] = "FirstTriviaToken"; + SyntaxKind[SyntaxKind["LastTriviaToken"] = SyntaxKind.WhitespaceTrivia] = "LastTriviaToken"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -1592,8 +1597,17 @@ var ts; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 0x00000002] = "UseTypeOfFunction"; TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 0x00000004] = "NoTruncation"; + TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 0x00000008] = "WriteArrowStyleSignature"; + TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 0x00000010] = "WriteOwnNameForAnyLike"; + TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 0x00000020] = "WriteTypeArgumentsOfSignature"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; + (function (SymbolFormatFlags) { + SymbolFormatFlags[SymbolFormatFlags["None"] = 0x00000000] = "None"; + SymbolFormatFlags[SymbolFormatFlags["WriteTypeParametersOrArguments"] = 0x00000001] = "WriteTypeParametersOrArguments"; + SymbolFormatFlags[SymbolFormatFlags["UseOnlyExternalAliasing"] = 0x00000002] = "UseOnlyExternalAliasing"; + })(ts.SymbolFormatFlags || (ts.SymbolFormatFlags = {})); + var SymbolFormatFlags = ts.SymbolFormatFlags; (function (SymbolAccessibility) { SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible"; SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible"; @@ -1667,6 +1681,7 @@ var ts; NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 0x00000010] = "SuperInstance"; NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 0x00000020] = "SuperStatic"; NodeCheckFlags[NodeCheckFlags["ContextChecked"] = 0x00000040] = "ContextChecked"; + NodeCheckFlags[NodeCheckFlags["EnumValuesComputed"] = 0x00000080] = "EnumValuesComputed"; })(ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); var NodeCheckFlags = ts.NodeCheckFlags; (function (TypeFlags) { @@ -1844,6 +1859,31 @@ var ts; CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; })(ts.CharacterCodes || (ts.CharacterCodes = {})); var CharacterCodes = ts.CharacterCodes; + (function (SymbolDisplayPartKind) { + SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword"; + SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak"; + SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator"; + SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation"; + SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space"; + SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text"; + SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral"; + })(ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {})); + var SymbolDisplayPartKind = ts.SymbolDisplayPartKind; })(ts || (ts = {})); var ts; (function (ts) { @@ -1851,8 +1891,9 @@ var ts; var result; if (array) { for (var i = 0, len = array.length; i < len; i++) { - if (result = callback(array[i])) + if (result = callback(array[i])) { break; + } } } return result; @@ -1880,6 +1921,18 @@ var ts; return -1; } ts.indexOf = indexOf; + function countWhere(array, predicate) { + var count = 0; + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + if (predicate(array[i])) { + count++; + } + } + } + return count; + } + ts.countWhere = countWhere; function filter(array, f) { if (array) { var result = []; @@ -2020,10 +2073,7 @@ var ts; } ts.localizedDiagnosticMessages = undefined; function getLocaleSpecificMessage(message) { - if (ts.localizedDiagnosticMessages) { - message = ts.localizedDiagnosticMessages[message]; - } - return message; + return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message] ? ts.localizedDiagnosticMessages[message] : message; } ts.getLocaleSpecificMessage = getLocaleSpecificMessage; function createFileDiagnostic(file, start, length, message) { @@ -2244,14 +2294,14 @@ var ts; return getNormalizedPathComponents(pathOrUrl, currentDirectory); } } - function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, isAbsolutePathAnUrl) { + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { directoryComponents.length--; } for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { break; } } @@ -2295,6 +2345,37 @@ var ts; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; + var supportedExtensions = [".d.ts", ".ts", ".js"]; + function removeFileExtension(path) { + for (var i = 0; i < supportedExtensions.length; i++) { + var ext = supportedExtensions[i]; + if (fileExtensionIs(path, ext)) { + return path.substr(0, path.length - ext.length); + } + } + return path; + } + ts.removeFileExtension = removeFileExtension; + var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\\\u2028\u2029\u0085]/g; + var escapedCharsMap = { + "\t": "\\t", + "\v": "\\v", + "\f": "\\f", + "\b": "\\b", + "\0": "\\0", + "\r": "\\r", + "\n": "\\n", + "\"": "\\\"", + "\u2028": "\\u2028", + "\u2029": "\\u2029", + "\u0085": "\\u0085" + }; + function escapeString(s) { + return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, function (c) { + return escapedCharsMap[c] || c; + }) : s; + } + ts.escapeString = escapeString; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -2366,17 +2447,6 @@ var ts; node.flags = flags; return node; } - var moduleExtensions = [".d.ts", ".ts", ".js"]; - function getModuleNameFromFilename(filename) { - for (var i = 0; i < moduleExtensions.length; i++) { - var ext = moduleExtensions[i]; - var len = filename.length - ext.length; - if (len > 0 && filename.substr(len) === ext) - return filename.substr(0, len); - } - return filename; - } - ts.getModuleNameFromFilename = getModuleNameFromFilename; function getSourceFileOfNode(node) { while (node && node.kind !== 182 /* SourceFile */) node = node.parent; @@ -2397,15 +2467,15 @@ var ts; return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); } ts.getTokenPosOfNode = getTokenPosOfNode; - function getSourceTextOfNodeFromSourceText(sourceText, node) { + function getTextOfNodeFromSourceText(sourceText, node) { return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); } - ts.getSourceTextOfNodeFromSourceText = getSourceTextOfNodeFromSourceText; - function getSourceTextOfNode(node) { + ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText; + function getTextOfNode(node) { var text = getSourceFileOfNode(node).text; return text.substring(ts.skipTrivia(text, node.pos), node.end); } - ts.getSourceTextOfNode = getSourceTextOfNode; + ts.getTextOfNode = getTextOfNode; function escapeIdentifier(identifier) { return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; } @@ -2415,7 +2485,7 @@ var ts; } ts.unescapeIdentifier = unescapeIdentifier; function identifierToString(identifier) { - return identifier.kind === 115 /* Missing */ ? "(Missing)" : getSourceTextOfNode(identifier); + return identifier.kind === 115 /* Missing */ ? "(Missing)" : getTextOfNode(identifier); } ts.identifierToString = identifierToString; function createDiagnosticForNode(node, message, arg0, arg1, arg2) { @@ -2453,6 +2523,10 @@ var ts; return file.externalModuleIndicator !== undefined; } ts.isExternalModule = isExternalModule; + function isDeclarationFile(file) { + return (file.flags & 1024 /* DeclarationFile */) !== 0; + } + ts.isDeclarationFile = isDeclarationFile; function isPrologueDirective(node) { return node.kind === 151 /* ExpressionStatement */ && node.expression.kind === 7 /* StringLiteral */; } @@ -2464,17 +2538,18 @@ var ts; ts.Debug.assert(isPrologueDirective(node)); return node.expression.text === "use strict"; } - function getLeadingCommentsOfNode(node, sourceFileOfNode) { + function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { + sourceFileOfNode = sourceFileOfNode || getSourceFileOfNode(node); if (node.kind === 118 /* Parameter */ || node.kind === 117 /* TypeParameter */) { - return ts.concatenate(ts.getTrailingComments(sourceFileOfNode.text, node.pos), ts.getLeadingComments(sourceFileOfNode.text, node.pos)); + return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos)); } else { - return ts.getLeadingComments(sourceFileOfNode.text, node.pos); + return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos); } } - ts.getLeadingCommentsOfNode = getLeadingCommentsOfNode; + ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; function getJsDocComments(node, sourceFileOfNode) { - return ts.filter(getLeadingCommentsOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); + return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); }); function isJsDocComment(comment) { return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47 /* slash */; } @@ -2893,12 +2968,6 @@ var ts; ModifierContext[ModifierContext["ClassMembers"] = 2] = "ClassMembers"; ModifierContext[ModifierContext["Parameters"] = 3] = "Parameters"; })(ModifierContext || (ModifierContext = {})); - var TrailingCommaBehavior; - (function (TrailingCommaBehavior) { - TrailingCommaBehavior[TrailingCommaBehavior["Disallow"] = 0] = "Disallow"; - TrailingCommaBehavior[TrailingCommaBehavior["Allow"] = 1] = "Allow"; - TrailingCommaBehavior[TrailingCommaBehavior["Preserve"] = 2] = "Preserve"; - })(TrailingCommaBehavior || (TrailingCommaBehavior = {})); var ControlBlockContext; (function (ControlBlockContext) { ControlBlockContext[ControlBlockContext["NotNested"] = 0] = "NotNested"; @@ -2909,6 +2978,10 @@ var ts; return ts.SyntaxKind.FirstKeyword <= token && token <= ts.SyntaxKind.LastKeyword; } ts.isKeyword = isKeyword; + function isTrivia(token) { + return ts.SyntaxKind.FirstTriviaToken <= token && token <= ts.SyntaxKind.LastTriviaToken; + } + ts.isTrivia = isTrivia; function isModifier(token) { switch (token) { case 102 /* PublicKeyword */: @@ -3169,7 +3242,9 @@ var ts; return finishNode(node); } error(ts.Diagnostics.Identifier_expected); - return createMissingNode(); + var node = createMissingNode(); + node.text = ""; + return node; } function parseIdentifier() { return createIdentifier(isIdentifier()); @@ -3221,7 +3296,7 @@ var ts; case 14 /* TypeParameters */: return isIdentifier(); case 10 /* ArgumentExpressions */: - return isExpression(); + return token === 18 /* CommaToken */ || isExpression(); case 12 /* ArrayLiteralMembers */: return token === 18 /* CommaToken */ || isExpression(); case 13 /* Parameters */: @@ -3321,7 +3396,7 @@ var ts; parsingContext = saveParsingContext; return result; } - function parseDelimitedList(kind, parseElement, trailingCommaBehavior) { + function parseDelimitedList(kind, parseElement, allowTrailingComma) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var result = []; @@ -3342,16 +3417,6 @@ var ts; error(ts.Diagnostics._0_expected, ","); } else if (isListTerminator(kind)) { - if (commaStart >= 0) { - if (trailingCommaBehavior === 0 /* Disallow */) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); - } - } - else if (trailingCommaBehavior === 2 /* Preserve */) { - result.push(createNode(147 /* OmittedExpression */)); - } - } break; } else { @@ -3362,6 +3427,14 @@ var ts; nextToken(); } } + if (commaStart >= 0) { + if (!allowTrailingComma) { + if (file.syntacticErrors.length === errorCountBeforeParsingList) { + grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + result.hasTrailingComma = true; + } result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; @@ -3381,7 +3454,7 @@ var ts; } function parseBracketedList(kind, parseElement, startToken, endToken) { if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, 0 /* Disallow */); + var result = parseDelimitedList(kind, parseElement, false); parseExpected(endToken); return result; } @@ -4052,10 +4125,10 @@ var ts; nextToken(); var operand = parseUnaryExpression(); if (isInStrictMode) { - if ((token === 33 /* PlusPlusToken */ || token === 34 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { + if ((operator === 33 /* PlusPlusToken */ || operator === 34 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { reportInvalidUseInStrictMode(operand); } - else if (token === 68 /* DeleteKeyword */ && operand.kind === 59 /* Identifier */) { + else if (operator === 68 /* DeleteKeyword */ && operand.kind === 59 /* Identifier */) { grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); } } @@ -4140,7 +4213,7 @@ var ts; else { parseExpected(11 /* OpenParenToken */); } - callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); parseExpected(12 /* CloseParenToken */); expr = finishNode(callExpr); continue; @@ -4204,15 +4277,29 @@ var ts; parseExpected(12 /* CloseParenToken */); return finishNode(node); } + function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic) { + if (token === 18 /* CommaToken */) { + if (omittedExpressionDiagnostic) { + var errorStart = scanner.getTokenPos(); + var errorLength = scanner.getTextPos() - errorStart; + grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic); + } + return createNode(147 /* OmittedExpression */); + } + return parseAssignmentExpression(); + } function parseArrayLiteralElement() { - return token === 18 /* CommaToken */ ? createNode(147 /* OmittedExpression */) : parseAssignmentExpression(); + return parseAssignmentExpressionOrOmittedExpression(undefined); + } + function parseArgumentExpression() { + return parseAssignmentExpressionOrOmittedExpression(ts.Diagnostics.Argument_expression_expected); } function parseArrayLiteral() { var node = createNode(132 /* ArrayLiteral */); parseExpected(13 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) node.flags |= 256 /* MultiLine */; - node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, 2 /* Preserve */); + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, true); parseExpected(14 /* CloseBracketToken */); return finishNode(node); } @@ -4245,8 +4332,7 @@ var ts; if (scanner.hasPrecedingLineBreak()) { node.flags |= 256 /* MultiLine */; } - var trailingCommaBehavior = languageVersion === 0 /* ES3 */ ? 1 /* Allow */ : 2 /* Preserve */; - node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, trailingCommaBehavior); + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, true); parseExpected(10 /* CloseBraceToken */); var seen = {}; var Property = 1; @@ -4320,7 +4406,7 @@ var ts; parseExpected(82 /* NewKeyword */); node.func = parseCallAndAccess(parsePrimaryExpression(), true); if (parseOptional(11 /* OpenParenToken */) || token === 19 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); parseExpected(12 /* CloseParenToken */); } return finishNode(node); @@ -4657,7 +4743,7 @@ var ts; node.label = parseIdentifier(); parseExpected(46 /* ColonToken */); if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { - grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); + grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); } labelledStatementInfo.addLabel(node.label); node.statement = isLabel() ? parseLabelledStatement() : parseStatementWithLabelSet(); @@ -4790,7 +4876,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(flags, noIn) { - return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, 0 /* Disallow */); + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, false); } function parseVariableStatement(pos, flags) { var node = createNode(149 /* VariableStatement */, pos); @@ -5129,7 +5215,7 @@ var ts; var implementsKeywordLength; if (parseOptional(96 /* ImplementsKeyword */)) { implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); } var errorCountBeforeClassBody = file.syntacticErrors.length; if (parseExpected(9 /* OpenBraceToken */)) { @@ -5155,7 +5241,7 @@ var ts; var extendsKeywordLength; if (parseOptional(73 /* ExtendsKeyword */)) { extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); } var errorCountBeforeInterfaceBody = file.syntacticErrors.length; node.members = parseTypeLiteral().members; @@ -5204,7 +5290,7 @@ var ts; parseExpected(71 /* EnumKeyword */); node.name = parseIdentifier(); if (parseExpected(9 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, 1 /* Allow */); + node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, true); parseExpected(10 /* CloseBraceToken */); } else { @@ -5398,15 +5484,16 @@ var ts; } else { var matchResult = ts.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, ts.Diagnostics.Invalid_reference_directive_syntax); } else { referencedFiles.push({ - pos: range.pos, - end: range.end, + pos: start, + end: end, filename: matchResult[3] }); } @@ -5509,6 +5596,9 @@ var ts; else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; } + else if (refFile && host.getCanonicalFileName(filename) === host.getCanonicalFileName(refFile.filename)) { + diagnostic = ts.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))) { @@ -5559,7 +5649,8 @@ var ts; } function processReferencedFiles(file, basePath) { ts.forEach(file.referencedFiles, function (ref) { - processSourceFile(ts.normalizePath(ts.combinePaths(basePath, ref.filename)), false, file, ref.pos, ref.end); + var referencedFilename = ts.isRootedDiskPath(ref.filename) ? ref.filename : ts.combinePaths(basePath, ref.filename); + processSourceFile(ts.normalizePath(referencedFilename), false, file, ref.pos, ref.end); }); } function processImportedModules(file, basePath) { @@ -5582,7 +5673,7 @@ var ts; } } } - else if (node.kind === 177 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || file.flags & 1024 /* DeclarationFile */)) { + else if (node.kind === 177 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || isDeclarationFile(file))) { forEachChild(node.body, function (node) { if (node.kind === 179 /* ImportDeclaration */ && node.externalModuleName) { var nameLiteral = node.externalModuleName; @@ -5732,7 +5823,10 @@ var ts; if (node.name) { node.name.parent = node; } - file.semanticErrors.push(ts.createDiagnosticForNode(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + ts.forEach(symbol.declarations, function (declaration) { + file.semanticErrors.push(ts.createDiagnosticForNode(declaration.name, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(declaration))); + }); + file.semanticErrors.push(ts.createDiagnosticForNode(node.name, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -5950,7 +6044,7 @@ var ts; break; case 182 /* SourceFile */: if (ts.isExternalModule(node)) { - bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.getModuleNameFromFilename(node.filename) + '"'); + bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.removeFileExtension(node.filename) + '"'); break; } default: @@ -5972,11 +6066,12 @@ var ts; } return indentStrings[level]; } + ts.getIndentString = getIndentString; function getIndentSize() { return indentStrings[1].length; } function shouldEmitToOwnFile(sourceFile, compilerOptions) { - if (!(sourceFile.flags & 1024 /* DeclarationFile */)) { + if (!ts.isDeclarationFile(sourceFile)) { if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { return true; } @@ -5986,9 +6081,902 @@ var ts; } ts.shouldEmitToOwnFile = shouldEmitToOwnFile; function isExternalModuleOrDeclarationFile(sourceFile) { - return ts.isExternalModule(sourceFile) || (sourceFile.flags & 1024 /* DeclarationFile */) !== 0; + return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile); } ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile; + function createTextWriter(newLine, trackSymbol) { + var output = ""; + var indent = 0; + var lineStart = true; + var lineCount = 0; + var linePos = 0; + function write(s) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; + } + } + function rawWrite(s) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } + function writeLiteral(s) { + if (s && s.length) { + write(s); + var lineStartsOfS = ts.getLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; + } + } + } + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } + } + function writeKind(text, kind) { + write(text); + } + function writeSymbol(text, symbol) { + write(text); + } + return { + write: write, + trackSymbol: trackSymbol, + writeKind: writeKind, + writeSymbol: writeSymbol, + rawWrite: rawWrite, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: function () { return indent++; }, + decreaseIndent: function () { return indent--; }, + getIndent: function () { return indent; }, + getTextPos: function () { return output.length; }, + getLine: function () { return lineCount + 1; }, + getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, + getText: function () { return output; }, + clear: function () { + } + }; + } + function getSourceTextOfLocalNode(currentSourceFile, node) { + var text = currentSourceFile.text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + function getLineOfLocalPosition(currentSourceFile, pos) { + return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + } + function emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments) { + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) { + writer.writeLine(); + } + } + function emitComments(currentSourceFile, writer, comments, trailingSeparator, newLine, writeComment) { + var emitLeadingSpace = !trailingSeparator; + ts.forEach(comments, function (comment) { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(currentSourceFile, writer, comment, newLine); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + emitLeadingSpace = true; + } + }); + } + function writeCommentRange(currentSourceFile, writer, comment, newLine) { + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { + var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); + var firstCommentLineIndent; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + if (pos !== comment.pos) { + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + } + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(pos, nextLineStart); + pos = nextLineStart; + } + } + else { + writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); + } + function writeTrimmedCurrentLine(pos, nextLineStart) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); + if (currentLineText) { + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + writer.writeLiteral(newLine); + } + } + function calculateIndent(pos, end) { + var currentLineIndent = 0; + for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { + if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { + currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); + } + else { + currentLineIndent++; + } + } + return currentLineIndent; + } + } + function getFirstConstructorWithBody(node) { + return ts.forEach(node.members, function (member) { + if (member.kind === 121 /* Constructor */ && member.body) { + return member; + } + }); + } + function getAllAccessorDeclarations(node, accessor) { + var firstAccessor; + var getAccessor; + var setAccessor; + ts.forEach(node.members, function (member) { + if ((member.kind === 122 /* GetAccessor */ || member.kind === 123 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) { + if (!firstAccessor) { + firstAccessor = member; + } + if (member.kind === 122 /* GetAccessor */ && !getAccessor) { + getAccessor = member; + } + if (member.kind === 123 /* SetAccessor */ && !setAccessor) { + setAccessor = member; + } + } + }); + return { + firstAccessor: firstAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + function getSourceFilePathInNewDir(sourceFile, program, newDirPath) { + var compilerHost = program.getCompilerHost(); + var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); + return ts.combinePaths(newDirPath, sourceFilePath); + } + function getOwnEmitOutputFilePath(sourceFile, program, extension) { + var compilerOptions = program.getCompilerOptions(); + if (compilerOptions.outDir) { + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, program, compilerOptions.outDir)); + } + else { + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename); + } + return emitOutputFilePathWithoutExtension + extension; + } + function writeFile(compilerHost, diagnostics, filename, data, writeByteOrderMark) { + compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + }); + } + function emitDeclarations(program, resolver, diagnostics, jsFilePath, root) { + var newLine = program.getCompilerHost().getNewLine(); + var compilerOptions = program.getCompilerOptions(); + var compilerHost = program.getCompilerHost(); + var writer = createTextWriter(newLine, trackSymbol); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var enclosingDeclaration; + var currentSourceFile; + var reportedDeclarationError = false; + var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { + } : writeJsDocComments; + var aliasDeclarationEmitInfo = []; + var getSymbolVisibilityDiagnosticMessage; + function writeAsychronousImportDeclarations(importDeclarations) { + var oldWriter = writer; + ts.forEach(importDeclarations, function (aliasToWrite) { + var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + }); + writer = oldWriter; + } + function trackSymbol(symbol, enclosingDeclaration, meaning) { + var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + reportedDeclarationError = true; + var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); + if (errorInfo) { + if (errorInfo.typeName) { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + else { + diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); + } + } + } + } + function emitLines(nodes) { + for (var i = 0, n = nodes.length; i < n; i++) { + emitNode(nodes[i]); + } + } + function emitCommaList(nodes, eachNodeEmitFn) { + var currentWriterPos = writer.getTextPos(); + for (var i = 0, n = nodes.length; i < n; i++) { + if (currentWriterPos !== writer.getTextPos()) { + write(", "); + } + currentWriterPos = writer.getTextPos(); + eachNodeEmitFn(nodes[i]); + } + } + function writeJsDocComments(declaration) { + if (declaration) { + var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments); + emitComments(currentSourceFile, writer, jsDocComments, true, newLine, writeCommentRange); + } + } + function emitSourceTextOfNode(node) { + write(getSourceTextOfLocalNode(currentSourceFile, node)); + } + function emitSourceFile(node) { + currentSourceFile = node; + enclosingDeclaration = node; + emitLines(node.statements); + } + function emitExportAssignment(node) { + write("export = "); + emitSourceTextOfNode(node.exportName); + write(";"); + writeLine(); + } + function emitDeclarationFlags(node) { + if (node.flags & 128 /* Static */) { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.flags & 64 /* Protected */) { + write("protected "); + } + write("static "); + } + else { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.flags & 64 /* Protected */) { + write("protected "); + } + else if (node.parent === currentSourceFile) { + if (node.flags & 1 /* Export */) { + write("export "); + } + if (node.kind !== 175 /* InterfaceDeclaration */) { + write("declare "); + } + } + } + } + function emitImportDeclaration(node) { + var nodeEmitInfo = { + declaration: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + hasWritten: resolver.isDeclarationVisible(node) + }; + aliasDeclarationEmitInfo.push(nodeEmitInfo); + if (nodeEmitInfo.hasWritten) { + writeImportDeclaration(node); + } + } + function writeImportDeclaration(node) { + emitJsDocComments(node); + if (node.flags & 1 /* Export */) { + writer.write("export "); + } + writer.write("import "); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.name)); + writer.write(" = "); + if (node.entityName) { + checkEntityNameAccessible(); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.entityName)); + writer.write(";"); + } + else { + writer.write("require("); + writer.write(getSourceTextOfLocalNode(currentSourceFile, node.externalModuleName)); + writer.write(");"); + } + writer.writeLine(); + function checkEntityNameAccessible() { + var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisible(node.entityName); + if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.aliasesToMakeVisible) { + writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); + } + } + else { + reportedDeclarationError = true; + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(currentSourceFile, node.name), symbolAccesibilityResult.errorSymbolName)); + } + } + } + function emitModuleDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("module "); + emitSourceTextOfNode(node.name); + while (node.body.kind !== 178 /* ModuleBlock */) { + node = node.body; + write("."); + emitSourceTextOfNode(node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitEnumDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("enum "); + emitSourceTextOfNode(node.name); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + } + } + function emitEnumMemberDeclaration(node) { + emitJsDocComments(node); + emitSourceTextOfNode(node.name); + var enumMemberValue = resolver.getEnumMemberValue(node); + if (enumMemberValue !== undefined) { + write(" = "); + write(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + function emitTypeParameters(typeParameters) { + function emitTypeParameter(node) { + function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 174 /* ClassDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + case 175 /* InterfaceDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* Method */: + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for type parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); + emitSourceTextOfNode(node.name); + if (node.constraint && (node.parent.kind !== 120 /* Method */ || !(node.parent.flags & 32 /* Private */))) { + write(" extends "); + getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + if (typeParameters) { + write("<"); + emitCommaList(typeParameters, emitTypeParameter); + write(">"); + } + } + function emitHeritageClause(typeReferences, isImplementsList) { + if (typeReferences) { + write(isImplementsList ? " implements " : " extends "); + emitCommaList(typeReferences, emitTypeOfTypeReference); + } + function emitTypeOfTypeReference(node) { + getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); + function getHeritageClauseVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.parent.kind === 174 /* ClassDeclaration */) { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; + } + } + else { + if (symbolAccesibilityResult.errorModuleName) { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; + } + else { + diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; + } + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.parent.name + }; + } + } + } + function emitClassDeclaration(node) { + function emitParameterProperties(constructorDeclaration) { + if (constructorDeclaration) { + ts.forEach(constructorDeclaration.parameters, function (param) { + if (param.flags & ts.NodeFlags.AccessibilityModifier) { + emitPropertyDeclaration(param); + } + }); + } + } + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("class "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + if (node.baseType) { + emitHeritageClause([node.baseType], false); + } + emitHeritageClause(node.implementedTypes, true); + write(" {"); + writeLine(); + increaseIndent(); + emitParameterProperties(getFirstConstructorWithBody(node)); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitInterfaceDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("interface "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + emitHeritageClause(node.baseTypes, false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitPropertyDeclaration(node) { + emitJsDocComments(node); + emitDeclarationFlags(node); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + function emitVariableDeclaration(node) { + if (node.kind !== 171 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + emitSourceTextOfNode(node.name); + if (node.kind === 119 /* Property */ && (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + } + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 171 /* VariableDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } + else if (node.kind === 119 /* Property */) { + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + return diagnosticMessage !== undefined ? { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + } : undefined; + } + } + function emitVariableStatement(node) { + var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); + if (hasDeclarationWithEmit) { + emitJsDocComments(node); + emitDeclarationFlags(node); + write("var "); + emitCommaList(node.declarations, emitVariableDeclaration); + write(";"); + writeLine(); + } + } + function emitAccessorDeclaration(node) { + var accessors = getAllAccessorDeclarations(node.parent, node); + if (node === accessors.firstAccessor) { + emitJsDocComments(accessors.getAccessor); + emitJsDocComments(accessors.setAccessor); + emitDeclarationFlags(node); + emitSourceTextOfNode(node.name); + if (!(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + } + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + if (node.kind === 123 /* SetAccessor */) { + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.parameters[0], + typeName: node.name + }; + } + else { + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name, + typeName: undefined + }; + } + } + } + function emitFunctionDeclaration(node) { + if ((node.kind !== 172 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitJsDocComments(node); + emitDeclarationFlags(node); + if (node.kind === 172 /* FunctionDeclaration */) { + write("function "); + emitSourceTextOfNode(node.name); + } + else if (node.kind === 121 /* Constructor */) { + write("constructor"); + } + else { + emitSourceTextOfNode(node.name); + if (node.flags & 4 /* QuestionMark */) { + write("?"); + } + } + emitSignatureDeclaration(node); + } + } + function emitConstructSignatureDeclaration(node) { + emitJsDocComments(node); + write("new "); + emitSignatureDeclaration(node); + } + function emitSignatureDeclaration(node) { + if (node.kind === 124 /* CallSignature */ || node.kind === 126 /* IndexSignature */) { + emitJsDocComments(node); + } + emitTypeParameters(node.typeParameters); + if (node.kind === 126 /* IndexSignature */) { + write("["); + } + else { + write("("); + } + emitCommaList(node.parameters, emitParameterDeclaration); + if (node.kind === 126 /* IndexSignature */) { + write("]"); + } + else { + write(")"); + } + if (node.kind !== 121 /* Constructor */ && !(node.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + write(";"); + writeLine(); + function getReturnTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 126 /* IndexSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 120 /* Method */: + if (node.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } + else if (node.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node.name || node + }; + } + } + function emitParameterDeclaration(node) { + increaseIndent(); + emitJsDocComments(node); + if (node.flags & 8 /* Rest */) { + write("..."); + } + emitSourceTextOfNode(node.name); + if (node.initializer || (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + decreaseIndent(); + if (!(node.parent.flags & 32 /* Private */)) { + write(": "); + getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; + resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + } + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 121 /* Constructor */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + break; + case 125 /* ConstructSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 124 /* CallSignature */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 120 /* Method */: + if (node.parent.flags & 128 /* Static */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } + else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } + else { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 172 /* FunctionDeclaration */: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + default: + ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); + } + return { + diagnosticMessage: diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + } + function emitNode(node) { + switch (node.kind) { + case 121 /* Constructor */: + case 172 /* FunctionDeclaration */: + case 120 /* Method */: + return emitFunctionDeclaration(node); + case 125 /* ConstructSignature */: + return emitConstructSignatureDeclaration(node); + case 124 /* CallSignature */: + case 126 /* IndexSignature */: + return emitSignatureDeclaration(node); + case 122 /* GetAccessor */: + case 123 /* SetAccessor */: + return emitAccessorDeclaration(node); + case 149 /* VariableStatement */: + return emitVariableStatement(node); + case 119 /* Property */: + return emitPropertyDeclaration(node); + case 175 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); + case 174 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 181 /* EnumMember */: + return emitEnumMemberDeclaration(node); + case 176 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 177 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 179 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 180 /* ExportAssignment */: + return emitExportAssignment(node); + case 182 /* SourceFile */: + return emitSourceFile(node); + } + } + function tryResolveScriptReference(sourceFile, reference) { + var referenceFileName = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); + return program.getSourceFile(referenceFileName); + } + var referencePathsOutput = ""; + function writeReferencePath(referencedFile) { + var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, program, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; + declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, false); + referencePathsOutput += "/// " + newLine; + } + if (root) { + if (!compilerOptions.noResolve) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = tryResolveScriptReference(root, fileReference); + if (referencedFile && ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference)) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + } + emitNode(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + if (!compilerOptions.noResolve) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = tryResolveScriptReference(sourceFile, fileReference); + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile))) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + } + emitNode(sourceFile); + } + }); + } + return { + reportedDeclarationError: reportedDeclarationError, + aliasDeclarationEmitInfo: aliasDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + declarationOutput: referencePathsOutput + }; + } + function writeDeclarationToFile(compilerHost, compilerOptions, diagnostics, aliasDeclarationEmitInfo, synchronousDeclarationOutput, jsFilePath, declarationOutput) { + var appliedSyncOutputPos = 0; + ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { + if (aliasEmitInfo.asynchronousOutput) { + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); + declarationOutput += aliasEmitInfo.asynchronousOutput; + appliedSyncOutputPos = aliasEmitInfo.outputPos; + } + }); + declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); + writeFile(compilerHost, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + } + function getDeclarationDiagnostics(program, resolver, targetSourceFile) { + var diagnostics = []; + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); + emitDeclarations(program, resolver, diagnostics, jsFilePath, targetSourceFile); + return diagnostics; + } + ts.getDeclarationDiagnostics = getDeclarationDiagnostics; function emitFiles(resolver, targetSourceFile) { var program = resolver.getProgram(); var compilerHost = program.getCompilerHost(); @@ -5996,207 +6984,13 @@ var ts; var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; var diagnostics = []; var newLine = program.getCompilerHost().getNewLine(); - function getSourceFilePathInNewDir(newDirPath, sourceFile) { - var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); - sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); - return ts.combinePaths(newDirPath, sourceFilePath); - } - function getOwnEmitOutputFilePath(sourceFile, extension) { - if (compilerOptions.outDir) { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile)); - } - else { - var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(sourceFile.filename); - } - return emitOutputFilePathWithoutExtension + extension; - } - function getFirstConstructorWithBody(node) { - return ts.forEach(node.members, function (member) { - if (member.kind === 121 /* Constructor */ && member.body) { - return member; - } - }); - } - function getAllAccessorDeclarations(node, accessor) { - var firstAccessor; - var getAccessor; - var setAccessor; - ts.forEach(node.members, function (member) { - if ((member.kind === 122 /* GetAccessor */ || member.kind === 123 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) { - if (!firstAccessor) { - firstAccessor = member; - } - if (member.kind === 122 /* GetAccessor */ && !getAccessor) { - getAccessor = member; - } - if (member.kind === 123 /* SetAccessor */ && !setAccessor) { - setAccessor = member; - } - } - }); - return { - firstAccessor: firstAccessor, - getAccessor: getAccessor, - setAccessor: setAccessor - }; - } - function createTextWriter(writeSymbol) { - var output = ""; - var indent = 0; - var lineStart = true; - var lineCount = 0; - var linePos = 0; - function write(s) { - if (s && s.length) { - if (lineStart) { - output += getIndentString(indent); - lineStart = false; - } - output += s; - } - } - function rawWrite(s) { - if (s !== undefined) { - if (lineStart) { - lineStart = false; - } - output += s; - } - } - function writeLiteral(s) { - if (s && s.length) { - write(s); - var lineStartsOfS = ts.getLineStarts(s); - if (lineStartsOfS.length > 1) { - lineCount = lineCount + lineStartsOfS.length - 1; - linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1]; - } - } - } - function writeLine() { - if (!lineStart) { - output += newLine; - lineCount++; - linePos = output.length; - lineStart = true; - } - } - return { - write: write, - writeSymbol: writeSymbol, - rawWrite: rawWrite, - writeLiteral: writeLiteral, - writeLine: writeLine, - increaseIndent: function () { return indent++; }, - decreaseIndent: function () { return indent--; }, - getIndent: function () { return indent; }, - getTextPos: function () { return output.length; }, - getLine: function () { return lineCount + 1; }, - getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, - getText: function () { return output; } - }; - } - var currentSourceFile; - function getSourceTextOfLocalNode(node) { - var text = currentSourceFile.text; - return text.substring(ts.skipTrivia(text, node.pos), node.end); - } - function getLineOfLocalPosition(pos) { - return currentSourceFile.getLineAndCharacterFromPosition(pos).line; - } - function writeFile(filename, data, writeByteOrderMark) { - compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { - diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); - }); - } - function emitComments(comments, trailingSeparator, writer, writeComment) { - var emitLeadingSpace = !trailingSeparator; - ts.forEach(comments, function (comment) { - if (emitLeadingSpace) { - writer.write(" "); - emitLeadingSpace = false; - } - writeComment(comment, writer); - if (comment.hasTrailingNewLine) { - writer.writeLine(); - } - else if (trailingSeparator) { - writer.write(" "); - } - else { - emitLeadingSpace = true; - } - }); - } - function emitNewLineBeforeLeadingComments(node, leadingComments, writer) { - if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) { - writer.writeLine(); - } - } - function writeCommentRange(comment, writer) { - if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { - var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); - var firstCommentLineIndent; - for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { - var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); - if (pos !== comment.pos) { - if (firstCommentLineIndent === undefined) { - firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); - } - var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); - var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); - if (spacesToEmit > 0) { - var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); - var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); - writer.rawWrite(indentSizeSpaceString); - while (numberOfSingleSpacesToEmit) { - writer.rawWrite(" "); - numberOfSingleSpacesToEmit--; - } - } - else { - writer.rawWrite(""); - } - } - writeTrimmedCurrentLine(pos, nextLineStart); - pos = nextLineStart; - } - } - else { - writer.write(currentSourceFile.text.substring(comment.pos, comment.end)); - } - function writeTrimmedCurrentLine(pos, nextLineStart) { - var end = Math.min(comment.end, nextLineStart - 1); - var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, ''); - if (currentLineText) { - writer.write(currentLineText); - if (end !== comment.end) { - writer.writeLine(); - } - } - else { - writer.writeLiteral(newLine); - } - } - function calculateIndent(pos, end) { - var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { - if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { - currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); - } - else { - currentLineIndent++; - } - } - return currentLineIndent; - } - } function emitJavaScript(jsFilePath, root) { - var writer = createTextWriter(writeSymbol); + var writer = createTextWriter(newLine, trackSymbol); var write = writer.write; var writeLine = writer.writeLine; var increaseIndent = writer.increaseIndent; var decreaseIndent = writer.decreaseIndent; + var currentSourceFile; var extendsEmitted = false; var writeEmittedFiles = writeJavaScriptFile; var emitLeadingComments = compilerOptions.removeComments ? function (node) { @@ -6222,7 +7016,7 @@ var ts; var scopeEmitEnd = function () { }; var sourceMapData; - function writeSymbol(symbol, enclosingDeclaration, meaning) { + function trackSymbol(symbol, enclosingDeclaration, meaning) { } function initializeEmitterWithSourceMaps() { var sourceMapDir; @@ -6328,7 +7122,7 @@ var ts; } function recordNewSourceFileStart(node) { var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir; - sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), true)); + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; sourceMapData.inputSourceFileNames.push(node.filename); } @@ -6369,25 +7163,11 @@ var ts; sourceMapNameIndices.pop(); } ; - function writeCommentRangeWithMap(comment, writer) { + function writeCommentRangeWithMap(curentSourceFile, writer, comment, newLine) { recordSourceMapSpan(comment.pos); - writeCommentRange(comment, writer); + writeCommentRange(currentSourceFile, writer, comment, newLine); recordSourceMapSpan(comment.end); } - var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\u2028\u2029\u0085]/g; - var escapedCharsMap = { - "\t": "\\t", - "\v": "\\v", - "\f": "\\f", - "\b": "\\b", - "\0": "\\0", - "\r": "\\r", - "\n": "\\n", - "\"": "\\\"", - "\u2028": "\\u2028", - "\u2029": "\\u2029", - "\u0085": "\\u0085" - }; function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings) { if (typeof JSON !== "undefined") { return JSON.stringify({ @@ -6399,26 +7179,21 @@ var ts; mappings: mappings }); } - return "{\"version\":" + version + ",\"file\":\"" + escapeString(file) + "\",\"sourceRoot\":\"" + escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + escapeString(mappings) + "\"}"; - function escapeString(s) { - return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, function (c) { - return escapedCharsMap[c] || c; - }) : s; - } + return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\"}"; function serializeStringArray(list) { var output = ""; for (var i = 0, n = list.length; i < n; i++) { if (i) { output += ","; } - output += "\"" + escapeString(list[i]) + "\""; + output += "\"" + ts.escapeString(list[i]) + "\""; } return output; } } function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) { encodeLastRecordedSourceMapSpan(); - writeFile(sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false); + writeFile(compilerHost, diagnostics, sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false); sourceMapDataList.push(sourceMapData); writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark); } @@ -6441,11 +7216,11 @@ var ts; if (compilerOptions.mapRoot) { sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); if (root) { - sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); + sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(root, program, sourceMapDir)); } if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir); - sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), true); + sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true); } else { sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); @@ -6477,7 +7252,7 @@ var ts; writeComment = writeCommentRangeWithMap; } function writeJavaScriptFile(emitOutput, writeByteOrderMark) { - writeFile(jsFilePath, emitOutput, writeByteOrderMark); + writeFile(compilerHost, diagnostics, jsFilePath, emitOutput, writeByteOrderMark); } function emitTokenText(tokenKind, startPos, emitFn) { var tokenString = ts.tokenToString(tokenKind); @@ -6495,25 +7270,42 @@ var ts; emit(node); } } - function emitCommaList(nodes, count) { - if (!(count >= 0)) - count = nodes.length; - if (nodes) { - for (var i = 0; i < count; i++) { - if (i) - write(", "); - emit(nodes[i]); + function emitTrailingCommaIfPresent(nodeList, isMultiline) { + if (nodeList.hasTrailingComma) { + write(","); + if (isMultiline) { + writeLine(); } } } - function emitMultiLineList(nodes) { + function emitCommaList(nodes, includeTrailingComma, count) { + if (!(count >= 0)) { + count = nodes.length; + } + if (nodes) { + for (var i = 0; i < count; i++) { + if (i) { + write(", "); + } + emit(nodes[i]); + } + if (includeTrailingComma) { + emitTrailingCommaIfPresent(nodes, false); + } + } + } + function emitMultiLineList(nodes, includeTrailingComma) { if (nodes) { for (var i = 0; i < nodes.length; i++) { - if (i) + if (i) { write(","); + } writeLine(); emit(nodes[i]); } + if (includeTrailingComma) { + emitTrailingCommaIfPresent(nodes, true); + } } } function emitLines(nodes) { @@ -6526,7 +7318,7 @@ var ts; } } function emitLiteral(node) { - var text = getSourceTextOfLocalNode(node); + var text = getSourceTextOfLocalNode(currentSourceFile, node); if (node.kind === 7 /* StringLiteral */ && compilerOptions.sourceMap) { writer.writeLiteral(text); } @@ -6544,7 +7336,7 @@ var ts; write(node.text); } else { - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } write("\""); } @@ -6586,7 +7378,7 @@ var ts; write("."); } } - write(getSourceTextOfLocalNode(node)); + write(getSourceTextOfLocalNode(currentSourceFile, node)); } function emitThis(node) { if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { @@ -6612,14 +7404,14 @@ var ts; if (node.flags & 256 /* MultiLine */) { write("["); increaseIndent(); - emitMultiLineList(node.elements); + emitMultiLineList(node.elements, true); decreaseIndent(); writeLine(); write("]"); } else { write("["); - emitCommaList(node.elements); + emitCommaList(node.elements, true); write("]"); } } @@ -6630,14 +7422,14 @@ var ts; else if (node.flags & 256 /* MultiLine */) { write("{"); increaseIndent(); - emitMultiLineList(node.properties); + emitMultiLineList(node.properties, compilerOptions.target >= 1 /* ES5 */); decreaseIndent(); writeLine(); write("}"); } else { write("{ "); - emitCommaList(node.properties); + emitCommaList(node.properties, compilerOptions.target >= 1 /* ES5 */); write(" }"); } } @@ -6649,14 +7441,15 @@ var ts; emitTrailingComments(node); } function emitPropertyAccess(node) { - var text = resolver.getPropertyAccessSubstitution(node); - if (text) { - write(text); - return; + var constantValue = resolver.getConstantValue(node); + if (constantValue !== undefined) { + write(constantValue.toString() + " /* " + ts.identifierToString(node.right) + " */"); + } + else { + emit(node.left); + write("."); + emit(node.right); } - emit(node.left); - write("."); - emit(node.right); } function emitIndexedAccess(node) { emit(node.object); @@ -6679,13 +7472,13 @@ var ts; emitThis(node.func); if (node.arguments.length) { write(", "); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); } write(")"); } else { write("("); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); write(")"); } } @@ -6694,7 +7487,7 @@ var ts; emit(node.func); if (node.arguments) { write("("); - emitCommaList(node.arguments); + emitCommaList(node.arguments, false); write(")"); } } @@ -6833,7 +7626,7 @@ var ts; if (node.declarations) { emitToken(92 /* VarKeyword */, endPos); write(" "); - emitCommaList(node.declarations); + emitCommaList(node.declarations, false); } if (node.initializer) { emit(node.initializer); @@ -6967,7 +7760,7 @@ var ts; emitLeadingComments(node); if (!(node.flags & 1 /* Export */)) write("var "); - emitCommaList(node.declarations); + emitCommaList(node.declarations, false); write(";"); emitTrailingComments(node); } @@ -7067,7 +7860,7 @@ var ts; increaseIndent(); write("("); if (node) { - emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); + emitCommaList(node.parameters, false, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); } write(")"); decreaseIndent(); @@ -7791,7 +8584,7 @@ var ts; return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos; } function getLeadingCommentsWithoutDetachedComments() { - var leadingComments = ts.getLeadingComments(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); + var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos); if (detachedCommentsInfo.length - 1) { detachedCommentsInfo.pop(); } @@ -7807,20 +8600,20 @@ var ts; leadingComments = getLeadingCommentsWithoutDetachedComments(); } else { - leadingComments = ts.getLeadingCommentsOfNode(node, currentSourceFile); + leadingComments = ts.getLeadingCommentRangesOfNode(node, currentSourceFile); } return leadingComments; } } function emitLeadingDeclarationComments(node) { var leadingComments = getLeadingCommentsToEmit(node); - emitNewLineBeforeLeadingComments(node, leadingComments, writer); - emitComments(leadingComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); + emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment); } function emitTrailingDeclarationComments(node) { if (node.parent.kind === 182 /* SourceFile */ || node.end !== node.parent.end) { - var trailingComments = ts.getTrailingComments(currentSourceFile.text, node.end); - emitComments(trailingComments, false, writer, writeComment); + var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, node.end); + emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment); } } function emitLeadingCommentsOfLocalPosition(pos) { @@ -7829,20 +8622,20 @@ var ts; leadingComments = getLeadingCommentsWithoutDetachedComments(); } else { - leadingComments = ts.getLeadingComments(currentSourceFile.text, pos); + leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos); } - emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer); - emitComments(leadingComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments); + emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment); } function emitDetachedCommentsAtPosition(node) { - var leadingComments = ts.getLeadingComments(currentSourceFile.text, node.pos); + var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos); if (leadingComments) { var detachedComments = []; var lastComment; ts.forEach(leadingComments, function (comment) { if (lastComment) { - var lastCommentLine = getLineOfLocalPosition(lastComment.end); - var commentLine = getLineOfLocalPosition(comment.pos); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, lastComment.end); + var commentLine = getLineOfLocalPosition(currentSourceFile, comment.pos); if (commentLine >= lastCommentLine + 2) { return detachedComments; } @@ -7851,11 +8644,11 @@ var ts; lastComment = comment; }); if (detachedComments.length) { - var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end); - var astLine = getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node.pos)); + var lastCommentLine = getLineOfLocalPosition(currentSourceFile, detachedComments[detachedComments.length - 1].end); + var astLine = getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos)); if (astLine >= lastCommentLine + 2) { - emitNewLineBeforeLeadingComments(node, leadingComments, writer); - emitComments(detachedComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments); + emitComments(currentSourceFile, writer, detachedComments, true, newLine, writeComment); var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end }; if (detachedCommentsInfo) { detachedCommentsInfo.push(currentDetachedCommentInfo); @@ -7877,8 +8670,8 @@ var ts; return true; } } - emitNewLineBeforeLeadingComments(node, pinnedComments, writer); - emitComments(pinnedComments, true, writer, writeComment); + emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments); + emitComments(currentSourceFile, writer, pinnedComments, true, newLine, writeComment); } if (compilerOptions.sourceMap) { initializeEmitterWithSourceMaps(); @@ -7896,700 +8689,35 @@ var ts; writeLine(); writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); } - function emitDeclarations(jsFilePath, root) { - var writer = createTextWriter(writeSymbol); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; - var enclosingDeclaration; - var reportedDeclarationError = false; - var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { - } : writeJsDocComments; - var aliasDeclarationEmitInfo = []; - var getSymbolVisibilityDiagnosticMessage; - function writeAsychronousImportDeclarations(importDeclarations) { - var oldWriter = writer; - ts.forEach(importDeclarations, function (aliasToWrite) { - var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); - writer = createTextWriter(writeSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); - } - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); - }); - writer = oldWriter; - } - function writeSymbol(symbol, enclosingDeclaration, meaning) { - var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); - if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { - resolver.writeSymbol(symbol, enclosingDeclaration, meaning, writer); - if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - reportedDeclarationError = true; - var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); - if (errorInfo) { - if (errorInfo.typeName) { - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); - } - else { - diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); - } - } - } - } - function emitLines(nodes) { - for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); - } - } - function emitCommaList(nodes, eachNodeEmitFn) { - var currentWriterPos = writer.getTextPos(); - for (var i = 0, n = nodes.length; i < n; i++) { - if (currentWriterPos !== writer.getTextPos()) { - write(", "); - } - currentWriterPos = writer.getTextPos(); - eachNodeEmitFn(nodes[i]); - } - } - function writeJsDocComments(declaration) { - if (declaration) { - var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile); - emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer); - emitComments(jsDocComments, true, writer, writeCommentRange); - } - } - function emitSourceTextOfNode(node) { - write(getSourceTextOfLocalNode(node)); - } - function emitSourceFile(node) { - currentSourceFile = node; - enclosingDeclaration = node; - emitLines(node.statements); - } - function emitExportAssignment(node) { - write("export = "); - emitSourceTextOfNode(node.exportName); - write(";"); - writeLine(); - } - function emitDeclarationFlags(node) { - if (node.flags & 128 /* Static */) { - if (node.flags & 32 /* Private */) { - write("private "); - } - else if (node.flags & 64 /* Protected */) { - write("protected "); - } - write("static "); - } - else { - if (node.flags & 32 /* Private */) { - write("private "); - } - else if (node.flags & 64 /* Protected */) { - write("protected "); - } - else if (node.parent === currentSourceFile) { - if (node.flags & 1 /* Export */) { - write("export "); - } - if (node.kind !== 175 /* InterfaceDeclaration */) { - write("declare "); - } - } - } - } - function emitImportDeclaration(node) { - var nodeEmitInfo = { - declaration: node, - outputPos: writer.getTextPos(), - indent: writer.getIndent(), - hasWritten: resolver.isDeclarationVisible(node) - }; - aliasDeclarationEmitInfo.push(nodeEmitInfo); - if (nodeEmitInfo.hasWritten) { - writeImportDeclaration(node); - } - } - function writeImportDeclaration(node) { - emitJsDocComments(node); - if (node.flags & 1 /* Export */) { - writer.write("export "); - } - writer.write("import "); - writer.write(getSourceTextOfLocalNode(node.name)); - writer.write(" = "); - if (node.entityName) { - checkEntityNameAccessible(); - writer.write(getSourceTextOfLocalNode(node.entityName)); - writer.write(";"); - } - else { - writer.write("require("); - writer.write(getSourceTextOfLocalNode(node.externalModuleName)); - writer.write(");"); - } - writer.writeLine(); - function checkEntityNameAccessible() { - var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); - if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { - if (symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - reportedDeclarationError = true; - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName)); - } - } - } - function emitModuleDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("module "); - emitSourceTextOfNode(node.name); - while (node.body.kind !== 178 /* ModuleBlock */) { - node = node.body; - write("."); - emitSourceTextOfNode(node.name); - } - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.body.statements); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitEnumDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("enum "); - emitSourceTextOfNode(node.name); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - } - } - function emitEnumMemberDeclaration(node) { - emitJsDocComments(node); - emitSourceTextOfNode(node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); - if (enumMemberValue !== undefined) { - write(" = "); - write(enumMemberValue.toString()); - } - write(","); - writeLine(); - } - function emitTypeParameters(typeParameters) { - function emitTypeParameter(node) { - function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.parent.kind) { - case 174 /* ClassDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; - break; - case 175 /* InterfaceDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; - break; - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 120 /* Method */: - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - default: - ts.Debug.fail("This is unknown parent for type parameter: " + ts.SyntaxKind[node.parent.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - increaseIndent(); - emitJsDocComments(node); - decreaseIndent(); - emitSourceTextOfNode(node.name); - if (node.constraint && (node.parent.kind !== 120 /* Method */ || !(node.parent.flags & 32 /* Private */))) { - write(" extends "); - getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - } - if (typeParameters) { - write("<"); - emitCommaList(typeParameters, emitTypeParameter); - write(">"); - } - } - function emitHeritageClause(typeReferences, isImplementsList) { - if (typeReferences) { - write(isImplementsList ? " implements " : " extends "); - emitCommaList(typeReferences, emitTypeOfTypeReference); - } - function emitTypeOfTypeReference(node) { - getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer); - function getHeritageClauseVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.parent.kind === 174 /* ClassDeclaration */) { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } - } - else { - if (symbolAccesibilityResult.errorModuleName) { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.parent.name - }; - } - } - } - function emitClassDeclaration(node) { - function emitParameterProperties(constructorDeclaration) { - if (constructorDeclaration) { - ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & ts.NodeFlags.AccessibilityModifier) { - emitPropertyDeclaration(param); - } - }); - } - } - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("class "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - if (node.baseType) { - emitHeritageClause([node.baseType], false); - } - emitHeritageClause(node.implementedTypes, true); - write(" {"); - writeLine(); - increaseIndent(); - emitParameterProperties(getFirstConstructorWithBody(node)); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitInterfaceDeclaration(node) { - if (resolver.isDeclarationVisible(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("interface "); - emitSourceTextOfNode(node.name); - var prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; - emitTypeParameters(node.typeParameters); - emitHeritageClause(node.baseTypes, false); - write(" {"); - writeLine(); - increaseIndent(); - emitLines(node.members); - decreaseIndent(); - write("}"); - writeLine(); - enclosingDeclaration = prevEnclosingDeclaration; - } - } - function emitPropertyDeclaration(node) { - emitJsDocComments(node); - emitDeclarationFlags(node); - emitVariableDeclaration(node); - write(";"); - writeLine(); - } - function emitVariableDeclaration(node) { - if (node.kind !== 171 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { - emitSourceTextOfNode(node.name); - if (node.kind === 119 /* Property */ && (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - if (!(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - } - function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.kind === 171 /* VariableDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; - } - else if (node.kind === 119 /* Property */) { - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; - } - } - return diagnosticMessage !== undefined ? { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - } : undefined; - } - } - function emitVariableStatement(node) { - var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); - if (hasDeclarationWithEmit) { - emitJsDocComments(node); - emitDeclarationFlags(node); - write("var "); - emitCommaList(node.declarations, emitVariableDeclaration); - write(";"); - writeLine(); - } - } - function emitAccessorDeclaration(node) { - var accessors = getAllAccessorDeclarations(node.parent, node); - if (node === accessors.firstAccessor) { - emitJsDocComments(accessors.getAccessor); - emitJsDocComments(accessors.setAccessor); - emitDeclarationFlags(node); - emitSourceTextOfNode(node.name); - if (!(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - write(";"); - writeLine(); - } - function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - if (node.kind === 123 /* SetAccessor */) { - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.parameters[0], - typeName: node.name - }; - } - else { - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0; - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name, - typeName: undefined - }; - } - } - } - function emitFunctionDeclaration(node) { - if ((node.kind !== 172 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { - emitJsDocComments(node); - emitDeclarationFlags(node); - if (node.kind === 172 /* FunctionDeclaration */) { - write("function "); - emitSourceTextOfNode(node.name); - } - else if (node.kind === 121 /* Constructor */) { - write("constructor"); - } - else { - emitSourceTextOfNode(node.name); - if (node.flags & 4 /* QuestionMark */) { - write("?"); - } - } - emitSignatureDeclaration(node); - } - } - function emitConstructSignatureDeclaration(node) { - emitJsDocComments(node); - write("new "); - emitSignatureDeclaration(node); - } - function emitSignatureDeclaration(node) { - if (node.kind === 124 /* CallSignature */ || node.kind === 126 /* IndexSignature */) { - emitJsDocComments(node); - } - emitTypeParameters(node.typeParameters); - if (node.kind === 126 /* IndexSignature */) { - write("["); - } - else { - write("("); - } - emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 126 /* IndexSignature */) { - write("]"); - } - else { - write(")"); - } - if (node.kind !== 121 /* Constructor */ && !(node.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - write(";"); - writeLine(); - function getReturnTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.kind) { - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 126 /* IndexSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; - break; - case 120 /* Method */: - if (node.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; - } - else if (node.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; - break; - default: - ts.Debug.fail("This is unknown kind for signature: " + ts.SyntaxKind[node.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node.name || node - }; - } - } - function emitParameterDeclaration(node) { - increaseIndent(); - emitJsDocComments(node); - if (node.flags & 8 /* Rest */) { - write("..."); - } - emitSourceTextOfNode(node.name); - if (node.initializer || (node.flags & 4 /* QuestionMark */)) { - write("?"); - } - decreaseIndent(); - if (!(node.parent.flags & 32 /* Private */)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); - } - function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { - var diagnosticMessage; - switch (node.parent.kind) { - case 121 /* Constructor */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; - break; - case 125 /* ConstructSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 124 /* CallSignature */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; - break; - case 120 /* Method */: - if (node.parent.flags & 128 /* Static */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; - } - else if (node.parent.parent.kind === 174 /* ClassDeclaration */) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; - } - else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; - } - break; - case 172 /* FunctionDeclaration */: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; - break; - default: - ts.Debug.fail("This is unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); - } - return { - diagnosticMessage: diagnosticMessage, - errorNode: node, - typeName: node.name - }; - } - } - function emitNode(node) { - switch (node.kind) { - case 121 /* Constructor */: - case 172 /* FunctionDeclaration */: - case 120 /* Method */: - return emitFunctionDeclaration(node); - case 125 /* ConstructSignature */: - return emitConstructSignatureDeclaration(node); - case 124 /* CallSignature */: - case 126 /* IndexSignature */: - return emitSignatureDeclaration(node); - case 122 /* GetAccessor */: - case 123 /* SetAccessor */: - return emitAccessorDeclaration(node); - case 149 /* VariableStatement */: - return emitVariableStatement(node); - case 119 /* Property */: - return emitPropertyDeclaration(node); - case 175 /* InterfaceDeclaration */: - return emitInterfaceDeclaration(node); - case 174 /* ClassDeclaration */: - return emitClassDeclaration(node); - case 181 /* EnumMember */: - return emitEnumMemberDeclaration(node); - case 176 /* EnumDeclaration */: - return emitEnumDeclaration(node); - case 177 /* ModuleDeclaration */: - return emitModuleDeclaration(node); - case 179 /* ImportDeclaration */: - return emitImportDeclaration(node); - case 180 /* ExportAssignment */: - return emitExportAssignment(node); - case 182 /* SourceFile */: - return emitSourceFile(node); - } - } - function resolveScriptReference(sourceFile, reference) { - var referenceFileName = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); - return program.getSourceFile(referenceFileName); - } - var referencePathsOutput = ""; - function writeReferencePath(referencedFile) { - var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; - declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); - referencePathsOutput += "/// " + newLine; - } - if (root) { - if (!compilerOptions.noResolve) { - var addedGlobalFileReference = false; - ts.forEach(root.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(root, fileReference); - if ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference) { - writeReferencePath(referencedFile); - if (!isExternalModuleOrDeclarationFile(referencedFile)) { - addedGlobalFileReference = true; - } - } - }); - } - emitNode(root); - } - else { - var emittedReferencedFiles = []; - ts.forEach(program.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - if (!compilerOptions.noResolve) { - ts.forEach(sourceFile.referencedFiles, function (fileReference) { - var referencedFile = resolveScriptReference(sourceFile, fileReference); - if (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile)) { - writeReferencePath(referencedFile); - emittedReferencedFiles.push(referencedFile); - } - }); - } - emitNode(sourceFile); - } - }); - } - if (!reportedDeclarationError) { - var declarationOutput = referencePathsOutput; - var synchronousDeclarationOutput = writer.getText(); - var appliedSyncOutputPos = 0; - ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) { - if (aliasEmitInfo.asynchronousOutput) { - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos); - declarationOutput += aliasEmitInfo.asynchronousOutput; - appliedSyncOutputPos = aliasEmitInfo.outputPos; - } - }); - declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); - writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); - } - } var hasSemanticErrors = resolver.hasSemanticErrors(); function emitFile(jsFilePath, sourceFile) { emitJavaScript(jsFilePath, sourceFile); if (!hasSemanticErrors && compilerOptions.declaration) { - emitDeclarations(jsFilePath, sourceFile); + var emitDeclarationResult = emitDeclarations(program, resolver, diagnostics, jsFilePath, sourceFile); + if (!emitDeclarationResult.reportedDeclarationError) { + writeDeclarationToFile(compilerHost, compilerOptions, diagnostics, emitDeclarationResult.aliasDeclarationEmitInfo, emitDeclarationResult.synchronousDeclarationOutput, jsFilePath, emitDeclarationResult.declarationOutput); + } } } if (targetSourceFile === undefined) { ts.forEach(program.getSourceFiles(), function (sourceFile) { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, program, ".js"); emitFile(jsFilePath, sourceFile); } }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } } else { - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - if (compilerOptions.out) { - emitFile(compilerOptions.out); + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, program, ".js"); + emitFile(jsFilePath, targetSourceFile); + } + else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { + emitFile(compilerOptions.out); + } } diagnostics.sort(ts.compareDiagnostics); diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); @@ -8631,6 +8759,27 @@ var ts; return undefined; } ts.getDeclarationOfKind = getDeclarationOfKind; + var stringWriters = []; + function getSingleLineStringWriter() { + if (stringWriters.length == 0) { + var str = ""; + return { + string: function () { return str; }, + writeKind: function (text) { return str += text; }, + writeSymbol: function (text) { return str += text; }, + writeLine: function () { return str += " "; }, + increaseIndent: function () { + }, + decreaseIndent: function () { + }, + clear: function () { return str = ""; }, + trackSymbol: function () { + } + }; + } + return stringWriters.pop(); + } + ts.getSingleLineStringWriter = getSingleLineStringWriter; function createTypeChecker(program, fullTypeCheck) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); @@ -8642,6 +8791,7 @@ var ts; var checker = { getProgram: function () { return program; }, getDiagnostics: getDiagnostics, + getDeclarationDiagnostics: getDeclarationDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, @@ -8661,11 +8811,24 @@ var ts; getTypeOfNode: getTypeOfNode, getApparentType: getApparentType, typeToString: typeToString, + writeType: writeType, symbolToString: symbolToString, + writeSymbol: writeSymbol, getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType, getRootSymbol: getRootSymbol, getContextualType: getContextualType, - getFullyQualifiedName: getFullyQualifiedName + getFullyQualifiedName: getFullyQualifiedName, + getResolvedSignature: getResolvedSignature, + getEnumMemberValue: getEnumMemberValue, + isValidPropertyAccess: isValidPropertyAccess, + getSignatureFromDeclaration: getSignatureFromDeclaration, + writeSignature: writeSignature, + writeTypeParameter: writeTypeParameter, + writeTypeParametersOfSymbol: writeTypeParametersOfSymbol, + isImplementationOfOverload: isImplementationOfOverload, + getAliasedSymbol: resolveImport, + isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; }, + isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; } }; var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); @@ -9205,13 +9368,13 @@ var ts; function getQualifiedLeftMeaning(rightMeaning) { return rightMeaning === ts.SymbolFlags.Value ? ts.SymbolFlags.Value : ts.SymbolFlags.Namespace; } - function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) { function getAccessibleSymbolChainFromSymbolTable(symbols) { function canQualifySymbol(symbolFromSymbolTable, meaning) { if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { return true; } - var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning)); + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing); return !!accessibleParent; } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { @@ -9224,13 +9387,15 @@ var ts; } return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 4194304 /* Import */) { - var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); - if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { - return [symbolFromSymbolTable]; - } - var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; - if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { - return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return declaration.kind === 179 /* ImportDeclaration */ && declaration.externalModuleName; })) { + var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); + if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + } } } }); @@ -9263,7 +9428,7 @@ var ts; var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook); + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); if (accessibleSymbolChain) { var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); if (!hasAccessibleDeclarations) { @@ -9331,139 +9496,157 @@ var ts; return true; } } - function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) { + function isImportDeclarationEntityNameReferenceDeclarationVisible(entityName) { var firstIdentifier = getFirstIdentifier(entityName); var firstIdentifierName = ts.identifierToString(firstIdentifier); var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, ts.SymbolFlags.Namespace, ts.Diagnostics.Cannot_find_name_0, firstIdentifierName); var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: firstIdentifierName }; } + function releaseStringWriter(writer) { + writer.clear(); + stringWriters.push(writer); + } + function writeKeyword(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 5 /* keyword */); + } + function writePunctuation(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 15 /* punctuation */); + } + function writeOperator(writer, kind) { + writer.writeKind(ts.tokenToString(kind), 12 /* operator */); + } + function writeSpace(writer) { + writer.writeKind(" ", 16 /* space */); + } function symbolToString(symbol, enclosingDeclaration, meaning) { - function getSymbolName(symbol) { + var writer = getSingleLineStringWriter(); + writeSymbol(symbol, writer, enclosingDeclaration, meaning); + var result = writer.string(); + releaseStringWriter(writer); + return result; + } + function writeSymbol(symbol, writer, enclosingDeclaration, meaning, flags) { + var parentSymbol; + function writeSymbolName(symbol) { + if (parentSymbol) { + if (flags & 1 /* WriteTypeParametersOrArguments */) { + if (symbol.flags & 8388608 /* Instantiated */) { + writeTypeArguments(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration); + } + else { + writeTypeParametersOfSymbol(parentSymbol, writer, enclosingDeclaration); + } + } + writePunctuation(writer, 15 /* DotToken */); + } + parentSymbol = symbol; if (symbol.declarations && symbol.declarations.length > 0) { var declaration = symbol.declarations[0]; if (declaration.name) { - return ts.identifierToString(declaration.name); + writer.writeSymbol(ts.identifierToString(declaration.name), symbol); + return; } } - return symbol.name; + writer.writeSymbol(symbol.name, symbol); } - if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { - var symbolName; - while (symbol) { - var isFirstName = !symbolName; - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning); - var currentSymbolName; + writer.trackSymbol(symbol, enclosingDeclaration, meaning); + function walkSymbol(symbol, meaning) { + if (symbol) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2 /* UseOnlyExternalAliasing */)); + if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { + walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning)); + } if (accessibleSymbolChain) { - currentSymbolName = ts.map(accessibleSymbolChain, function (accessibleSymbol) { return getSymbolName(accessibleSymbol); }).join("."); + for (var i = 0, n = accessibleSymbolChain.length; i < n; i++) { + writeSymbolName(accessibleSymbolChain[i]); + } } else { - if (!isFirstName && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { - break; + if (!parentSymbol && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) { + return; } - currentSymbolName = getSymbolName(symbol); - } - symbolName = currentSymbolName + (isFirstName ? "" : ("." + symbolName)); - if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { - break; - } - symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); - meaning = getQualifiedLeftMeaning(meaning); - } - return symbolName; - } - return getSymbolName(symbol); - } - function writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, writer) { - writer.write(symbolToString(symbol, enclosingDeclaration, meaning)); - } - function createSingleLineTextWriter(maxLength) { - var result = ""; - var overflow = false; - function write(s) { - if (!overflow) { - result += s; - if (result.length > maxLength) { - result = result.substr(0, maxLength - 3) + "..."; - overflow = true; + if (symbol.flags & 512 /* TypeLiteral */ || symbol.flags & 1024 /* ObjectLiteral */) { + return; + } + writeSymbolName(symbol); } } } - return { - write: write, - writeSymbol: function (symbol, enclosingDeclaration, meaning) { - writeSymbolToTextWriter(symbol, enclosingDeclaration, meaning, this); - }, - writeLine: function () { - write(" "); - }, - increaseIndent: function () { - }, - decreaseIndent: function () { - }, - getText: function () { - return result; - } - }; + if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + walkSymbol(symbol, meaning); + return; + } + return writeSymbolName(symbol); } function typeToString(type, enclosingDeclaration, flags) { + var writer = getSingleLineStringWriter(); + writeType(type, writer, enclosingDeclaration, flags); + var result = writer.string(); + releaseStringWriter(writer); var maxLength = compilerOptions.noErrorTruncation || flags & 4 /* NoTruncation */ ? undefined : 100; - var stringWriter = createSingleLineTextWriter(maxLength); - writeTypeToTextWriter(type, enclosingDeclaration, flags, stringWriter); - return stringWriter.getText(); + if (maxLength && result.length >= maxLength) { + result = result.substr(0, maxLength - "...".length) + "..."; + } + return result; } - function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { - var typeStack; - return writeType(type, true); - function writeType(type, allowFunctionOrConstructorTypeLiteral) { + function writeType(type, writer, enclosingDeclaration, flags, typeStack) { + return writeType(type, flags | 8 /* WriteArrowStyleSignature */); + function writeType(type, flags) { if (type.flags & ts.TypeFlags.Intrinsic) { - writer.write(type.intrinsicName); + writer.writeKind(!(flags & 16 /* WriteOwnNameForAnyLike */) && (type.flags & 1 /* Any */) ? "any" : type.intrinsicName, 5 /* keyword */); } else if (type.flags & 4096 /* Reference */) { writeTypeReference(type); } else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { - writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Type); + writeSymbol(type.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Type); } else if (type.flags & 8192 /* Tuple */) { writeTupleType(type); } else if (type.flags & 16384 /* Anonymous */) { - writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral); + writeAnonymousType(type, flags); } else if (type.flags & 256 /* StringLiteral */) { - writer.write(type.text); + writer.writeKind(type.text, 8 /* stringLiteral */); } else { - writer.write("{ ... }"); + writePunctuation(writer, 9 /* OpenBraceToken */); + writeSpace(writer); + writePunctuation(writer, 16 /* DotDotDotToken */); + writeSpace(writer); + writePunctuation(writer, 10 /* CloseBraceToken */); } } function writeTypeList(types) { for (var i = 0; i < types.length; i++) { if (i > 0) { - writer.write(", "); + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); } - writeType(types[i], true); + writeType(types[i], flags | 8 /* WriteArrowStyleSignature */); } } function writeTypeReference(type) { if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { - writeType(type.typeArguments[0], false); - writer.write("[]"); + writeType(type.typeArguments[0], flags & ~8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 13 /* OpenBracketToken */); + writePunctuation(writer, 14 /* CloseBracketToken */); } else { - writer.writeSymbol(type.target.symbol, enclosingDeclaration, ts.SymbolFlags.Type); - writer.write("<"); + writeSymbol(type.target.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Type); + writePunctuation(writer, 19 /* LessThanToken */); writeTypeList(type.typeArguments); - writer.write(">"); + writePunctuation(writer, 20 /* GreaterThanToken */); } } function writeTupleType(type) { - writer.write("["); + writePunctuation(writer, 13 /* OpenBracketToken */); writeTypeList(type.elementTypes); - writer.write("]"); + writePunctuation(writer, 14 /* CloseBracketToken */); } - function writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral) { + function writeAnonymousType(type, flags) { if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { writeTypeofSymbol(type); } @@ -9471,14 +9654,14 @@ var ts; writeTypeofSymbol(type); } else if (typeStack && ts.contains(typeStack, type)) { - writer.write("any"); + writeKeyword(writer, 105 /* AnyKeyword */); } else { if (!typeStack) { typeStack = []; } typeStack.push(type); - writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); + writeLiteralType(type, flags); typeStack.pop(); } function shouldWriteTypeOfFunctionSymbol() { @@ -9492,52 +9675,70 @@ var ts; } } function writeTypeofSymbol(type) { - writer.write("typeof "); - writer.writeSymbol(type.symbol, enclosingDeclaration, ts.SymbolFlags.Value); + writeKeyword(writer, 91 /* TypeOfKeyword */); + writeSpace(writer); + writeSymbol(type.symbol, writer, enclosingDeclaration, ts.SymbolFlags.Value); } - function writeLiteralType(type, allowFunctionOrConstructorTypeLiteral) { + function writeLiteralType(type, flags) { var resolved = resolveObjectTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { - writer.write("{}"); + writePunctuation(writer, 9 /* OpenBraceToken */); + writePunctuation(writer, 10 /* CloseBraceToken */); return; } - if (allowFunctionOrConstructorTypeLiteral) { + if (flags & 8 /* WriteArrowStyleSignature */) { if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - writeSignature(resolved.callSignatures[0], true); + writeSignature(resolved.callSignatures[0], writer, enclosingDeclaration, flags, typeStack); return; } if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { - writer.write("new "); - writeSignature(resolved.constructSignatures[0], true); + writeKeyword(writer, 82 /* NewKeyword */); + writeSpace(writer); + writeSignature(resolved.constructSignatures[0], writer, enclosingDeclaration, flags, typeStack); return; } } } - writer.write("{"); + writePunctuation(writer, 9 /* OpenBraceToken */); writer.writeLine(); writer.increaseIndent(); for (var i = 0; i < resolved.callSignatures.length; i++) { - writeSignature(resolved.callSignatures[i]); - writer.write(";"); + writeSignature(resolved.callSignatures[i], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } for (var i = 0; i < resolved.constructSignatures.length; i++) { - writer.write("new "); - writeSignature(resolved.constructSignatures[i]); - writer.write(";"); + writeKeyword(writer, 82 /* NewKeyword */); + writeSpace(writer); + writeSignature(resolved.constructSignatures[i], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } if (resolved.stringIndexType) { - writer.write("[x: string]: "); - writeType(resolved.stringIndexType, true); - writer.write(";"); + writePunctuation(writer, 13 /* OpenBracketToken */); + writer.writeKind("x", 13 /* parameterName */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeKeyword(writer, 114 /* StringKeyword */); + writePunctuation(writer, 14 /* CloseBracketToken */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(resolved.stringIndexType, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } if (resolved.numberIndexType) { - writer.write("[x: number]: "); - writeType(resolved.numberIndexType, true); - writer.write(";"); + writePunctuation(writer, 13 /* OpenBracketToken */); + writer.writeKind("x", 13 /* parameterName */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeKeyword(writer, 112 /* NumberKeyword */); + writePunctuation(writer, 14 /* CloseBracketToken */); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(resolved.numberIndexType, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } for (var i = 0; i < resolved.properties.length; i++) { @@ -9546,66 +9747,109 @@ var ts; if (p.flags & (8 /* Function */ | 2048 /* Method */) && !getPropertiesOfType(t).length) { var signatures = getSignaturesOfType(t, 0 /* Call */); for (var j = 0; j < signatures.length; j++) { - writer.writeSymbol(p); + writeSymbol(p, writer); if (isOptionalProperty(p)) { - writer.write("?"); + writePunctuation(writer, 45 /* QuestionToken */); } - writeSignature(signatures[j]); - writer.write(";"); + writeSignature(signatures[j], writer, enclosingDeclaration, flags & ~8 /* WriteArrowStyleSignature */, typeStack); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } } else { - writer.writeSymbol(p); + writeSymbol(p, writer); if (isOptionalProperty(p)) { - writer.write("?"); + writePunctuation(writer, 45 /* QuestionToken */); } - writer.write(": "); - writeType(t, true); - writer.write(";"); + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(t, flags | 8 /* WriteArrowStyleSignature */); + writePunctuation(writer, 17 /* SemicolonToken */); writer.writeLine(); } } writer.decreaseIndent(); - writer.write("}"); + writePunctuation(writer, 10 /* CloseBraceToken */); } - function writeSignature(signature, arrowStyle) { - if (signature.typeParameters) { - writer.write("<"); - for (var i = 0; i < signature.typeParameters.length; i++) { - if (i > 0) { - writer.write(", "); - } - var tp = signature.typeParameters[i]; - writer.writeSymbol(tp.symbol); - var constraint = getConstraintOfTypeParameter(tp); - if (constraint) { - writer.write(" extends "); - writeType(constraint, true); - } - } - writer.write(">"); - } - writer.write("("); - for (var i = 0; i < signature.parameters.length; i++) { + } + function writeTypeParameter(tp, writer, enclosingDeclaration, flags, typeStack) { + writeSymbol(tp.symbol, writer); + var constraint = getConstraintOfTypeParameter(tp); + if (constraint) { + writeSpace(writer); + writeKeyword(writer, 73 /* ExtendsKeyword */); + writeSpace(writer); + writeType(constraint, writer, enclosingDeclaration, flags, typeStack); + } + } + function writeTypeParameters(typeParameters, writer, enclosingDeclaration, flags, typeStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 19 /* LessThanToken */); + for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { - writer.write(", "); + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); } - var p = signature.parameters[i]; - if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { - writer.write("..."); - } - writer.writeSymbol(p); - if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { - writer.write("?"); - } - writer.write(": "); - writeType(getTypeOfSymbol(p), true); + writeTypeParameter(typeParameters[i], writer, enclosingDeclaration, flags, typeStack); } - writer.write(arrowStyle ? ") => " : "): "); - writeType(getReturnTypeOfSignature(signature), true); + writePunctuation(writer, 20 /* GreaterThanToken */); } } + function writeTypeArguments(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 19 /* LessThanToken */); + for (var i = 0; i < typeParameters.length; i++) { + if (i > 0) { + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); + } + writeType(mapper(typeParameters[i]), writer, enclosingDeclaration, 8 /* WriteArrowStyleSignature */); + } + writePunctuation(writer, 20 /* GreaterThanToken */); + } + } + function writeTypeParametersOfSymbol(symbol, writer, enclosingDeclaraiton, flags) { + var rootSymbol = getRootSymbol(symbol); + if (rootSymbol.flags & 16 /* Class */ || rootSymbol.flags & 32 /* Interface */) { + writeTypeParameters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags); + } + } + function writeSignature(signature, writer, enclosingDeclaration, flags, typeStack) { + if (signature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */)) { + writeTypeArguments(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration); + } + else { + writeTypeParameters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack); + } + writePunctuation(writer, 11 /* OpenParenToken */); + for (var i = 0; i < signature.parameters.length; i++) { + if (i > 0) { + writePunctuation(writer, 18 /* CommaToken */); + writeSpace(writer); + } + var p = signature.parameters[i]; + if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { + writePunctuation(writer, 16 /* DotDotDotToken */); + } + writeSymbol(p, writer); + if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { + writePunctuation(writer, 45 /* QuestionToken */); + } + writePunctuation(writer, 46 /* ColonToken */); + writeSpace(writer); + writeType(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack); + } + writePunctuation(writer, 12 /* CloseParenToken */); + if (flags & 8 /* WriteArrowStyleSignature */) { + writeSpace(writer); + writePunctuation(writer, 27 /* EqualsGreaterThanToken */); + } + else { + writePunctuation(writer, 46 /* ColonToken */); + } + writeSpace(writer); + writeType(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack); + } function isDeclarationVisible(node) { function getContainingExternalModule(node) { for (; node; node = node.parent) { @@ -10626,7 +10870,7 @@ var ts; if (ts.hasProperty(stringLiteralTypes, node.text)) return stringLiteralTypes[node.text]; var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); - type.text = ts.getSourceTextOfNode(node); + type.text = ts.getTextOfNode(node); return type; } function getTypeFromStringLiteral(node) { @@ -11754,9 +11998,17 @@ var ts; var func = parameter.parent; if (func.kind === 141 /* FunctionExpression */ || func.kind === 142 /* ArrowFunction */) { if (isContextSensitiveExpression(func)) { - var signature = getContextualSignature(func); - if (signature) { - return getTypeAtPosition(signature, ts.indexOf(func.parameters, parameter)); + var contextualSignature = getContextualSignature(func); + if (contextualSignature) { + var funcHasRestParameters = ts.hasRestParameters(func); + var len = func.parameters.length - (funcHasRestParameters ? 1 : 0); + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (indexOfParameter < len) { + return getTypeAtPosition(contextualSignature, indexOfParameter); + } + if (indexOfParameter === (func.parameters.length - 1) && funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) { + return getTypeOfSymbol(contextualSignature.parameters[contextualSignature.parameters.length - 1]); + } } } } @@ -11916,7 +12168,7 @@ var ts; return createArrayType(elementType); } function isNumericName(name) { - return !isNaN(name); + return (name !== "") && !isNaN(name); } function checkObjectLiteral(node, contextualMapper) { var members = node.symbol.members; @@ -12034,6 +12286,24 @@ var ts; } return anyType; } + function isValidPropertyAccess(node, propertyName) { + 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 & 16 /* Class */) { + if (node.left.kind === 85 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 120 /* Method */) { + return false; + } + else { + var diagnosticsCount = diagnostics.length; + checkClassPropertyAccess(node, type, prop); + return diagnostics.length === diagnosticsCount; + } + } + } + return true; + } function checkIndexedAccess(node) { var objectType = checkExpression(node.object); var indexType = checkExpression(node.index); @@ -12079,42 +12349,20 @@ var ts; resolveUntypedCall(node); return unknownSignature; } - function isCandidateSignature(node, signature) { - var args = node.arguments || emptyArray; - return args.length >= signature.minArgumentCount && (signature.hasRestParameter || args.length <= signature.parameters.length) && (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); - } - function collectCandidates(node, signatures) { - var result = []; - var lastParent; - var lastSymbol; - var cutoffPos = 0; - var pos; - for (var i = 0; i < signatures.length; i++) { - var signature = signatures[i]; - if (isCandidateSignature(node, signature)) { - var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent = signature.declaration && signature.declaration.parent; - if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent === lastParent) { - pos++; - } - else { - lastParent = parent; - pos = cutoffPos; - } - } - else { - pos = cutoffPos = result.length; - lastParent = parent; - } - lastSymbol = symbol; - for (var j = result.length; j > pos; j--) { - result[j] = result[j - 1]; - } - result[pos] = signature; - } + function signatureHasCorrectArity(node, signature) { + if (!node.arguments) { + return signature.minArgumentCount === 0; } - return result; + 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; + } + var callIsIncomplete = args.end === node.end; + var hasEnoughArguments = numberOfArgs >= signature.minArgumentCount; + return callIsIncomplete || hasEnoughArguments; } function getSingleCallSignature(type) { if (type.flags & ts.TypeFlags.ObjectType) { @@ -12137,6 +12385,9 @@ var ts; var context = createInferenceContext(typeParameters); var mapper = createInferenceMapper(context); for (var i = 0; i < args.length; i++) { + if (args[i].kind === 147 /* OmittedExpression */) { + continue; + } if (!excludeArgument || excludeArgument[i] === undefined) { var parameterType = getTypeAtPosition(signature, i); inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); @@ -12144,6 +12395,9 @@ var ts; } if (excludeArgument) { for (var i = 0; i < args.length; i++) { + if (args[i].kind === 147 /* OmittedExpression */) { + continue; + } if (excludeArgument[i] === false) { var parameterType = getTypeAtPosition(signature, i); inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); @@ -12170,6 +12424,9 @@ var ts; if (node.arguments) { for (var i = 0; i < node.arguments.length; i++) { var arg = node.arguments[i]; + if (arg.kind === 147 /* OmittedExpression */) { + continue; + } var paramType = getTypeAtPosition(signature, i); var argType = arg.kind === 7 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1); @@ -12180,9 +12437,10 @@ var ts; } return true; } - function resolveCall(node, signatures) { + function resolveCall(node, signatures, candidatesOutArray) { ts.forEach(node.typeArguments, checkSourceElement); - var candidates = collectCandidates(node, signatures); + var candidates = candidatesOutArray || []; + collectCandidates(); if (!candidates.length) { error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); return resolveErrorCall(node); @@ -12199,18 +12457,21 @@ var ts; var relation = candidates.length === 1 ? assignableRelation : subtypeRelation; while (true) { for (var i = 0; i < candidates.length; i++) { + if (!signatureHasCorrectArity(node, candidates[i])) { + continue; + } while (true) { - var candidate = candidates[i]; - if (candidate.typeParameters) { - var typeArguments = node.typeArguments ? checkTypeArguments(candidate, node.typeArguments) : inferTypeArguments(candidate, args, excludeArgument); - candidate = getSignatureInstantiation(candidate, typeArguments); + var candidateWithCorrectArity = candidates[i]; + if (candidateWithCorrectArity.typeParameters) { + var typeArguments = node.typeArguments ? checkTypeArguments(candidateWithCorrectArity, node.typeArguments) : inferTypeArguments(candidateWithCorrectArity, args, excludeArgument); + candidateWithCorrectArity = getSignatureInstantiation(candidateWithCorrectArity, typeArguments); } - if (!checkApplicableSignature(node, candidate, relation, excludeArgument, false)) { + if (!checkApplicableSignature(node, candidateWithCorrectArity, relation, excludeArgument, false)) { break; } var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; if (index < 0) { - return candidate; + return candidateWithCorrectArity; } excludeArgument[index] = false; } @@ -12220,14 +12481,59 @@ var ts; } relation = assignableRelation; } - checkApplicableSignature(node, candidate, relation, undefined, true); + if (candidateWithCorrectArity) { + checkApplicableSignature(node, candidateWithCorrectArity, relation, undefined, true); + } + else { + error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + } + if (!fullTypeCheck) { + for (var i = 0, n = candidates.length; i < n; i++) { + if (signatureHasCorrectArity(node, candidates[i])) { + return candidates[i]; + } + } + } return resolveErrorCall(node); + function collectCandidates() { + var result = candidates; + var lastParent; + var lastSymbol; + var cutoffPos = 0; + var pos; + ts.Debug.assert(!result.length); + for (var i = 0; i < signatures.length; i++) { + var signature = signatures[i]; + if (true) { + var symbol = signature.declaration && getSymbolOfNode(signature.declaration); + var parent = signature.declaration && signature.declaration.parent; + if (!lastSymbol || symbol === lastSymbol) { + if (lastParent && parent === lastParent) { + pos++; + } + else { + lastParent = parent; + pos = cutoffPos; + } + } + else { + pos = cutoffPos = result.length; + lastParent = parent; + } + lastSymbol = symbol; + for (var j = result.length; j > pos; j--) { + result[j] = result[j - 1]; + } + result[pos] = signature; + } + } + } } - function resolveCallExpression(node) { + function resolveCallExpression(node, candidatesOutArray) { if (node.func.kind === 85 /* SuperKeyword */) { var superType = checkSuperExpression(node.func); if (superType !== unknownType) { - return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */)); + return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */), candidatesOutArray); } return resolveUntypedCall(node); } @@ -12256,9 +12562,9 @@ var ts; } return resolveErrorCall(node); } - return resolveCall(node, callSignatures); + return resolveCall(node, callSignatures, candidatesOutArray); } - function resolveNewExpression(node) { + function resolveNewExpression(node, candidatesOutArray) { var expressionType = checkExpression(node.func); if (expressionType === unknownType) { return resolveErrorCall(node); @@ -12275,11 +12581,11 @@ var ts; } var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); if (constructSignatures.length) { - return resolveCall(node, constructSignatures); + return resolveCall(node, constructSignatures, candidatesOutArray); } var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); if (callSignatures.length) { - var signature = resolveCall(node, callSignatures); + var signature = resolveCall(node, callSignatures, candidatesOutArray); if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } @@ -12288,11 +12594,11 @@ var ts; error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature); return resolveErrorCall(node); } - function getResolvedSignature(node) { + function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); - if (!links.resolvedSignature) { + if (!links.resolvedSignature || candidatesOutArray) { links.resolvedSignature = anySignature; - links.resolvedSignature = node.kind === 137 /* CallExpression */ ? resolveCallExpression(node) : resolveNewExpression(node); + links.resolvedSignature = node.kind === 137 /* CallExpression */ ? resolveCallExpression(node, candidatesOutArray) : resolveNewExpression(node, candidatesOutArray); } return links.resolvedSignature; } @@ -12522,10 +12828,10 @@ var ts; return type === anyType || ((type.flags & (ts.TypeFlags.ObjectType | 512 /* TypeParameter */)) !== 0); } function checkInstanceOfExpression(node, leftType, rightType) { - if (!isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { + if (leftType !== unknownType && !isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } - if (rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { + if (rightType !== unknownType && rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); } return booleanType; @@ -12568,10 +12874,16 @@ var ts; leftType = rightType; if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) rightType = leftType; - var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - if (leftOk && rightOk) { - checkAssignmentOperator(numberType); + var suggestedOperator; + if ((leftType.flags & 8 /* Boolean */) && (rightType.flags & 8 /* Boolean */) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { + error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operator), ts.tokenToString(suggestedOperator)); + } + else { + var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + if (leftOk && rightOk) { + checkAssignmentOperator(numberType); + } } return numberType; case 28 /* PlusToken */: @@ -12624,6 +12936,21 @@ var ts; case 18 /* CommaToken */: return rightType; } + function getSuggestedBooleanOperator(operator) { + switch (operator) { + case 39 /* BarToken */: + case 57 /* BarEqualsToken */: + return 44 /* BarBarToken */; + case 40 /* CaretToken */: + case 58 /* CaretEqualsToken */: + return 26 /* ExclamationEqualsEqualsToken */; + case 38 /* AmpersandToken */: + case 56 /* AmpersandEqualsToken */: + return 43 /* AmpersandAmpersandToken */; + default: + return undefined; + } + } function checkAssignmentOperator(valueType) { if (fullTypeCheck && operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); @@ -12790,7 +13117,7 @@ var ts; if (fullTypeCheck) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { @@ -13044,6 +13371,9 @@ var ts; var declarations = symbol.declarations; var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; function reportImplementationExpectedError(node) { + if (node.name && node.name.kind === 115 /* Missing */) { + return; + } var seen = false; var subsequentNode = ts.forEachChild(node.parent, function (c) { if (seen) { @@ -13078,6 +13408,8 @@ var ts; } } var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & ts.SymbolFlags.Module; + var duplicateFunctionDeclaration = false; + var multipleConstructorImplementation = false; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; var inAmbientContext = ts.isInAmbientContext(node); @@ -13091,10 +13423,10 @@ var ts; allNodeFlags &= currentNodeFlags; if (node.body && bodyDeclaration) { if (isConstructor) { - error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + multipleConstructorImplementation = true; } else { - error(node, ts.Diagnostics.Duplicate_function_implementation); + duplicateFunctionDeclaration = true; } } else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { @@ -13114,6 +13446,16 @@ var ts; } } } + if (multipleConstructorImplementation) { + ts.forEach(declarations, function (declaration) { + error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + }); + } + if (duplicateFunctionDeclaration) { + ts.forEach(declarations, function (declaration) { + error(declaration.name, ts.Diagnostics.Duplicate_function_implementation); + }); + } if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -13320,7 +13662,7 @@ var ts; } } } - function checkCollistionWithRequireExportsInGeneratedCode(node, name) { + function checkCollisionWithRequireExportsInGeneratedCode(node, name) { if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } @@ -13353,7 +13695,7 @@ var ts; } checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); if (!useTypeFromValueDeclaration) { if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); @@ -13544,7 +13886,7 @@ var ts; checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); checkTypeParameters(node.typeParameters); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); var type = getDeclaredTypeOfSymbol(symbol); @@ -13691,7 +14033,7 @@ var ts; checkTypeForDuplicateIndexSignatures(node); } } - function getConstantValue(node) { + function getConstantValueForExpression(node) { var isNegative = false; if (node.kind === 143 /* PrefixOperator */) { var unaryExpression = node; @@ -13706,33 +14048,44 @@ var ts; } return undefined; } + function computeEnumMemberValues(node) { + var nodeLinks = getNodeLinks(node); + if (!(nodeLinks.flags & 128 /* EnumValuesComputed */)) { + var enumSymbol = getSymbolOfNode(node); + var enumType = getDeclaredTypeOfSymbol(enumSymbol); + var autoValue = 0; + var ambient = ts.isInAmbientContext(node); + ts.forEach(node.members, function (member) { + if (isNumericName(member.name.text)) { + error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name); + } + var initializer = member.initializer; + if (initializer) { + autoValue = getConstantValueForExpression(initializer); + if (autoValue === undefined && !ambient) { + checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); + } + } + else if (ambient) { + autoValue = undefined; + } + if (autoValue !== undefined) { + getNodeLinks(member).enumMemberValue = autoValue++; + } + }); + nodeLinks.flags |= 128 /* EnumValuesComputed */; + } + } function checkEnumDeclaration(node) { if (!fullTypeCheck) { return; } checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); + computeEnumMemberValues(node); var enumSymbol = getSymbolOfNode(node); - var enumType = getDeclaredTypeOfSymbol(enumSymbol); - var autoValue = 0; - var ambient = ts.isInAmbientContext(node); - ts.forEach(node.members, function (member) { - var initializer = member.initializer; - if (initializer) { - autoValue = getConstantValue(initializer); - if (autoValue === undefined && !ambient) { - checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); - } - } - else if (ambient) { - autoValue = undefined; - } - if (autoValue !== undefined) { - getNodeLinks(member).enumMemberValue = autoValue++; - } - }); var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); if (node === firstDeclaration) { var seenEnumMissingInitialInitializer = false; @@ -13769,7 +14122,7 @@ var ts; function checkModuleDeclaration(node) { if (fullTypeCheck) { checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { @@ -13802,7 +14155,7 @@ var ts; } function checkImportDeclaration(node) { checkCollisionWithCapturedThisVariable(node, node.name); - checkCollistionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); var symbol = getSymbolOfNode(node); var target; if (node.entityName) { @@ -14044,6 +14397,11 @@ var ts; checkProgram(); return getSortedDiagnostics(); } + function getDeclarationDiagnostics(targetSourceFile) { + var resolver = createResolver(); + checkSourceFile(targetSourceFile); + return ts.getDeclarationDiagnostics(program, resolver, targetSourceFile); + } function getGlobalDiagnostics() { return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); } @@ -14219,7 +14577,7 @@ var ts; return false; } function isTypeNode(node) { - if (node.kind >= ts.SyntaxKind.FirstTypeNode && node.kind <= ts.SyntaxKind.LastTypeNode) { + if (ts.SyntaxKind.FirstTypeNode <= node.kind && node.kind <= ts.SyntaxKind.LastTypeNode) { return true; } switch (node.kind) { @@ -14237,11 +14595,12 @@ var ts; node = node.parent; } case 116 /* QualifiedName */: + ts.Debug.assert(node.kind === 59 /* Identifier */ || node.kind === 116 /* QualifiedName */, "'node' was expected to be a qualified name or identifier in 'isTypeNode'."); var parent = node.parent; if (parent.kind === 128 /* TypeQuery */) { return false; } - if (parent.kind >= ts.SyntaxKind.FirstTypeNode && parent.kind <= ts.SyntaxKind.LastTypeNode) { + if (ts.SyntaxKind.FirstTypeNode <= parent.kind && parent.kind <= ts.SyntaxKind.LastTypeNode) { return true; } switch (parent.kind) { @@ -14267,7 +14626,7 @@ var ts; return node === parent.type; case 137 /* CallExpression */: case 138 /* NewExpression */: - return parent.typeArguments.indexOf(node) >= 0; + return parent.typeArguments && parent.typeArguments.indexOf(node) >= 0; } } return false; @@ -14467,7 +14826,7 @@ var ts; while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) { prefix += "_"; } - links.localModuleName = prefix + ts.getSourceTextOfNode(container.name); + links.localModuleName = prefix + ts.getTextOfNode(container.name); } return links.localModuleName; } @@ -14493,16 +14852,6 @@ var ts; } } } - function getPropertyAccessSubstitution(node) { - var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol && (symbol.flags & 4 /* EnumMember */)) { - var declaration = symbol.valueDeclaration; - var constantValue; - if (declaration.kind === 181 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { - return constantValue.toString() + " /* " + ts.identifierToString(declaration.name) + " */"; - } - } - } function getExportAssignmentName(node) { var symbol = getExportAssignmentSymbol(getSymbolOfNode(node)); return symbol && symbolIsValue(symbol) ? symbolToString(symbol) : undefined; @@ -14543,23 +14892,34 @@ var ts; return getNodeLinks(node).flags; } function getEnumMemberValue(node) { + computeEnumMemberValues(node.parent); return getNodeLinks(node).enumMemberValue; } + function getConstantValue(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol && (symbol.flags & 4 /* EnumMember */)) { + var declaration = symbol.valueDeclaration; + var constantValue; + if (declaration.kind === 181 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { + return constantValue; + } + } + return undefined; + } function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) { var symbol = getSymbolOfNode(location); var type = symbol && !(symbol.flags & 512 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location); - writeTypeToTextWriter(type, enclosingDeclaration, flags, writer); + writeType(type, writer, enclosingDeclaration, flags); } function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { var signature = getSignatureFromDeclaration(signatureDeclaration); - writeTypeToTextWriter(getReturnTypeOfSignature(signature), enclosingDeclaration, flags, writer); + writeType(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags); } - function invokeEmitter(targetSourceFile) { - var resolver = { + function createResolver() { + return { getProgram: function () { return program; }, getLocalNameOfContainer: getLocalNameOfContainer, getExpressionNamePrefix: getExpressionNamePrefix, - getPropertyAccessSubstitution: getPropertyAccessSubstitution, getExportAssignmentName: getExportAssignmentName, isReferencedImportDeclaration: isReferencedImportDeclaration, getNodeCheckFlags: getNodeCheckFlags, @@ -14570,10 +14930,13 @@ var ts; isImplementationOfOverload: isImplementationOfOverload, writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, - writeSymbol: writeSymbolToTextWriter, isSymbolAccessible: isSymbolAccessible, - isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile + isImportDeclarationEntityNameReferenceDeclarationVisible: isImportDeclarationEntityNameReferenceDeclarationVisible, + getConstantValue: getConstantValue }; + } + function invokeEmitter(targetSourceFile) { + var resolver = createResolver(); checkProgram(); return ts.emitFiles(resolver, targetSourceFile); } @@ -15712,7 +16075,6 @@ var __extends = this.__extends || function (d, b) { }; var TypeScript; (function (TypeScript) { - TypeScript.LocalizedDiagnosticMessages = null; var Location = (function () { function Location(fileName, lineMap, start, length) { this._fileName = fileName; @@ -19472,7 +19834,7 @@ var TypeScript; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { - TypeScript.nodeMetadata = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["moduleElements", "endOfFileToken"], ["left", "dotToken", "right"], ["openBraceToken", "typeMembers", "closeBraceToken"], ["typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["type", "openBracketToken", "closeBracketToken"], ["newKeyword", "typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["name", "typeArgumentList"], ["typeOfKeyword", "name"], ["openBracketToken", "types", "closeBracketToken"], ["modifiers", "interfaceKeyword", "identifier", "typeParameterList", "heritageClauses", "body"], ["modifiers", "functionKeyword", "identifier", "callSignature", "block", "semicolonToken"], ["modifiers", "moduleKeyword", "name", "stringLiteral", "openBraceToken", "moduleElements", "closeBraceToken"], ["modifiers", "classKeyword", "identifier", "typeParameterList", "heritageClauses", "openBraceToken", "classElements", "closeBraceToken"], ["modifiers", "enumKeyword", "identifier", "openBraceToken", "enumElements", "closeBraceToken"], ["modifiers", "importKeyword", "identifier", "equalsToken", "moduleReference", "semicolonToken"], ["exportKeyword", "equalsToken", "identifier", "semicolonToken"], ["modifiers", "propertyName", "callSignature", "block", "semicolonToken"], ["modifiers", "variableDeclarator", "semicolonToken"], ["modifiers", "constructorKeyword", "callSignature", "block", "semicolonToken"], ["modifiers", "indexSignature", "semicolonToken"], ["modifiers", "getKeyword", "propertyName", "callSignature", "block"], ["modifiers", "setKeyword", "propertyName", "callSignature", "block"], ["propertyName", "questionToken", "typeAnnotation"], ["typeParameterList", "parameterList", "typeAnnotation"], ["newKeyword", "callSignature"], ["openBracketToken", "parameters", "closeBracketToken", "typeAnnotation"], ["propertyName", "questionToken", "callSignature"], ["openBraceToken", "statements", "closeBraceToken"], ["ifKeyword", "openParenToken", "condition", "closeParenToken", "statement", "elseClause"], ["modifiers", "variableDeclaration", "semicolonToken"], ["expression", "semicolonToken"], ["returnKeyword", "expression", "semicolonToken"], ["switchKeyword", "openParenToken", "expression", "closeParenToken", "openBraceToken", "switchClauses", "closeBraceToken"], ["breakKeyword", "identifier", "semicolonToken"], ["continueKeyword", "identifier", "semicolonToken"], ["forKeyword", "openParenToken", "variableDeclaration", "initializer", "firstSemicolonToken", "condition", "secondSemicolonToken", "incrementor", "closeParenToken", "statement"], ["forKeyword", "openParenToken", "variableDeclaration", "left", "inKeyword", "expression", "closeParenToken", "statement"], ["semicolonToken"], ["throwKeyword", "expression", "semicolonToken"], ["whileKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["tryKeyword", "block", "catchClause", "finallyClause"], ["identifier", "colonToken", "statement"], ["doKeyword", "statement", "whileKeyword", "openParenToken", "condition", "closeParenToken", "semicolonToken"], ["debuggerKeyword", "semicolonToken"], ["withKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["deleteKeyword", "expression"], ["typeOfKeyword", "expression"], ["voidKeyword", "expression"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["operand", "operatorToken"], ["operand", "operatorToken"], ["expression", "dotToken", "name"], ["expression", "argumentList"], ["openBracketToken", "expressions", "closeBracketToken"], ["openBraceToken", "propertyAssignments", "closeBraceToken"], ["newKeyword", "expression", "argumentList"], ["openParenToken", "expression", "closeParenToken"], ["callSignature", "equalsGreaterThanToken", "block", "expression"], ["parameter", "equalsGreaterThanToken", "block", "expression"], ["lessThanToken", "type", "greaterThanToken", "expression"], ["expression", "openBracketToken", "argumentExpression", "closeBracketToken"], ["functionKeyword", "identifier", "callSignature", "block"], [], ["varKeyword", "variableDeclarators"], ["propertyName", "typeAnnotation", "equalsValueClause"], ["typeArgumentList", "openParenToken", "arguments", "closeParenToken"], ["openParenToken", "parameters", "closeParenToken"], ["lessThanToken", "typeArguments", "greaterThanToken"], ["lessThanToken", "typeParameters", "greaterThanToken"], ["extendsOrImplementsKeyword", "typeNames"], ["extendsOrImplementsKeyword", "typeNames"], ["equalsToken", "value"], ["caseKeyword", "expression", "colonToken", "statements"], ["defaultKeyword", "colonToken", "statements"], ["elseKeyword", "statement"], ["catchKeyword", "openParenToken", "identifier", "typeAnnotation", "closeParenToken", "block"], ["finallyKeyword", "block"], ["identifier", "constraint"], ["extendsKeyword", "typeOrExpression"], ["propertyName", "colonToken", "expression"], ["propertyName", "callSignature", "block"], ["dotDotDotToken", "modifiers", "identifier", "questionToken", "typeAnnotation", "equalsValueClause"], ["propertyName", "equalsValueClause"], ["colonToken", "type"], ["requireKeyword", "openParenToken", "stringLiteral", "closeParenToken"], ["moduleName"], ]; + TypeScript.nodeMetadata = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["moduleElements", "endOfFileToken"], ["left", "dotToken", "right"], ["openBraceToken", "typeMembers", "closeBraceToken"], ["typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["type", "openBracketToken", "closeBracketToken"], ["newKeyword", "typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["name", "typeArgumentList"], ["typeOfKeyword", "name"], ["openBracketToken", "types", "closeBracketToken"], ["modifiers", "interfaceKeyword", "identifier", "typeParameterList", "heritageClauses", "body"], ["modifiers", "functionKeyword", "identifier", "callSignature", "block", "semicolonToken"], ["modifiers", "moduleKeyword", "name", "stringLiteral", "openBraceToken", "moduleElements", "closeBraceToken"], ["modifiers", "classKeyword", "identifier", "typeParameterList", "heritageClauses", "openBraceToken", "classElements", "closeBraceToken"], ["modifiers", "enumKeyword", "identifier", "openBraceToken", "enumElements", "closeBraceToken"], ["modifiers", "importKeyword", "identifier", "equalsToken", "moduleReference", "semicolonToken"], ["exportKeyword", "equalsToken", "identifier", "semicolonToken"], ["modifiers", "propertyName", "callSignature", "block", "semicolonToken"], ["modifiers", "variableDeclarator", "semicolonToken"], ["modifiers", "constructorKeyword", "callSignature", "block", "semicolonToken"], ["modifiers", "indexSignature", "semicolonToken"], ["modifiers", "getKeyword", "propertyName", "callSignature", "block"], ["modifiers", "setKeyword", "propertyName", "callSignature", "block"], ["propertyName", "questionToken", "typeAnnotation"], ["typeParameterList", "parameterList", "typeAnnotation"], ["newKeyword", "callSignature"], ["openBracketToken", "parameters", "closeBracketToken", "typeAnnotation"], ["propertyName", "questionToken", "callSignature"], ["openBraceToken", "statements", "closeBraceToken"], ["ifKeyword", "openParenToken", "condition", "closeParenToken", "statement", "elseClause"], ["modifiers", "variableDeclaration", "semicolonToken"], ["expression", "semicolonToken"], ["returnKeyword", "expression", "semicolonToken"], ["switchKeyword", "openParenToken", "expression", "closeParenToken", "openBraceToken", "switchClauses", "closeBraceToken"], ["breakKeyword", "identifier", "semicolonToken"], ["continueKeyword", "identifier", "semicolonToken"], ["forKeyword", "openParenToken", "variableDeclaration", "initializer", "firstSemicolonToken", "condition", "secondSemicolonToken", "incrementor", "closeParenToken", "statement"], ["forKeyword", "openParenToken", "variableDeclaration", "left", "inKeyword", "expression", "closeParenToken", "statement"], ["semicolonToken"], ["throwKeyword", "expression", "semicolonToken"], ["whileKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["tryKeyword", "block", "catchClause", "finallyClause"], ["identifier", "colonToken", "statement"], ["doKeyword", "statement", "whileKeyword", "openParenToken", "condition", "closeParenToken", "semicolonToken"], ["debuggerKeyword", "semicolonToken"], ["withKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["deleteKeyword", "expression"], ["typeOfKeyword", "expression"], ["voidKeyword", "expression"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["operand", "operatorToken"], ["operand", "operatorToken"], ["expression", "dotToken", "name"], ["expression", "argumentList"], ["openBracketToken", "expressions", "closeBracketToken"], ["openBraceToken", "propertyAssignments", "closeBraceToken"], ["newKeyword", "expression", "argumentList"], ["openParenToken", "expression", "closeParenToken"], ["callSignature", "equalsGreaterThanToken", "block", "expression"], ["parameter", "equalsGreaterThanToken", "block", "expression"], ["lessThanToken", "type", "greaterThanToken", "expression"], ["expression", "openBracketToken", "argumentExpression", "closeBracketToken"], ["functionKeyword", "identifier", "callSignature", "block"], [], ["varKeyword", "variableDeclarators"], ["propertyName", "typeAnnotation", "equalsValueClause"], ["typeArgumentList", "openParenToken", "arguments", "closeParenToken"], ["openParenToken", "parameters", "closeParenToken"], ["lessThanToken", "typeArguments", "greaterThanToken"], ["lessThanToken", "typeParameters", "greaterThanToken"], ["extendsOrImplementsKeyword", "typeNames"], ["extendsOrImplementsKeyword", "typeNames"], ["equalsToken", "value"], ["caseKeyword", "expression", "colonToken", "statements"], ["defaultKeyword", "colonToken", "statements"], ["elseKeyword", "statement"], ["catchKeyword", "openParenToken", "identifier", "typeAnnotation", "closeParenToken", "block"], ["finallyKeyword", "block"], ["identifier", "constraint"], ["extendsKeyword", "typeOrExpression"], ["propertyName", "colonToken", "expression"], ["propertyName", "callSignature", "block"], ["dotDotDotToken", "modifiers", "identifier", "questionToken", "typeAnnotation", "equalsValueClause"], ["propertyName", "equalsValueClause"], ["colonToken", "type"], ["requireKeyword", "openParenToken", "stringLiteral", "closeParenToken"], ["moduleName"],]; })(TypeScript || (TypeScript = {})); var TypeScript; (function (TypeScript) { @@ -25976,10 +26338,10 @@ var TypeScript; throw TypeScript.Errors.argumentOutOfRange("languageVersion"); } }; - Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; return Unicode; })(); TypeScript.Unicode = Unicode; @@ -26394,17 +26756,28 @@ var ts; (function (OutliningElementsCollector) { function collectElements(sourceFile) { var elements = []; - function addOutlineRange(hintSpanNode, startElement, endElement) { + var collapseText = "..."; + function addOutliningSpan(hintSpanNode, startElement, endElement, autoCollapse) { if (hintSpanNode && startElement && endElement) { var span = { textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), - bannerText: "...", - autoCollapse: false + bannerText: collapseText, + autoCollapse: autoCollapse }; elements.push(span); } } + function autoCollapse(node) { + switch (node.kind) { + case 178 /* ModuleBlock */: + case 174 /* ClassDeclaration */: + case 175 /* InterfaceDeclaration */: + case 176 /* EnumDeclaration */: + return false; + } + return true; + } var depth = 0; var maxDepth = 20; function walk(n) { @@ -26413,23 +26786,44 @@ var ts; } switch (n.kind) { case 148 /* Block */: + var parent = n.parent; + var openBrace = ts.findChildOfKind(n, 9 /* OpenBraceToken */, sourceFile); + var closeBrace = ts.findChildOfKind(n, 10 /* CloseBraceToken */, sourceFile); + if (parent.kind === 153 /* DoStatement */ || parent.kind === 156 /* ForInStatement */ || parent.kind === 155 /* ForStatement */ || parent.kind === 152 /* IfStatement */ || parent.kind === 154 /* WhileStatement */ || parent.kind === 160 /* WithStatement */) { + addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n)); + } + else { + var span = TypeScript.TextSpan.fromBounds(n.getStart(), n.end); + elements.push({ + textSpan: span, + hintSpan: span, + bannerText: collapseText, + autoCollapse: autoCollapse(n) + }); + } + break; case 173 /* FunctionBlock */: case 178 /* ModuleBlock */: case 167 /* TryBlock */: - case 167 /* TryBlock */: case 168 /* CatchBlock */: case 169 /* FinallyBlock */: - var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 9 /* OpenBraceToken */ && c; }); - var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 10 /* CloseBraceToken */ && c; }); - addOutlineRange(n.parent, openBrace, closeBrace); + var openBrace = ts.findChildOfKind(n, 9 /* OpenBraceToken */, sourceFile); + var closeBrace = ts.findChildOfKind(n, 10 /* CloseBraceToken */, sourceFile); + addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; case 174 /* ClassDeclaration */: case 175 /* InterfaceDeclaration */: case 176 /* EnumDeclaration */: case 133 /* ObjectLiteral */: - var openBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 9 /* OpenBraceToken */ && c; }); - var closeBrace = ts.forEach(n.getChildren(), function (c) { return c.kind === 10 /* CloseBraceToken */ && c; }); - addOutlineRange(n, openBrace, closeBrace); + case 161 /* SwitchStatement */: + var openBrace = ts.findChildOfKind(n, 9 /* OpenBraceToken */, sourceFile); + var closeBrace = ts.findChildOfKind(n, 10 /* CloseBraceToken */, sourceFile); + addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); + break; + case 132 /* ArrayLiteral */: + var openBracket = ts.findChildOfKind(n, 13 /* OpenBracketToken */, sourceFile); + var closeBracket = ts.findChildOfKind(n, 14 /* CloseBracketToken */, sourceFile); + addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); break; } depth++; @@ -26442,96 +26836,117 @@ var ts; OutliningElementsCollector.collectElements = collectElements; })(OutliningElementsCollector = ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {})); })(ts || (ts = {})); -var TypeScript; -(function (TypeScript) { - var Services; - (function (Services) { - var NavigationBarItemGetter = (function () { - function NavigationBarItemGetter() { - this.hasGlobalNode = false; - } - NavigationBarItemGetter.prototype.getIndent = function (node) { - var indent = this.hasGlobalNode ? 1 : 0; +var ts; +(function (ts) { + var NavigationBar; + (function (NavigationBar) { + function getNavigationBarItems(sourceFile) { + var hasGlobalNode = false; + return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); + function getIndent(node) { + var indent = hasGlobalNode ? 1 : 0; var current = node.parent; - while (current != null) { - if (current.kind() == 131 /* ModuleDeclaration */ || current.kind() === 130 /* FunctionDeclaration */) { - indent++; + while (current) { + switch (current.kind) { + case 177 /* ModuleDeclaration */: + do { + current = current.parent; + } while (current.kind === 177 /* ModuleDeclaration */); + case 174 /* ClassDeclaration */: + case 176 /* EnumDeclaration */: + case 175 /* InterfaceDeclaration */: + case 172 /* FunctionDeclaration */: + indent++; } current = current.parent; } return indent; - }; - NavigationBarItemGetter.prototype.getKindModifiers = function (modifiers) { - var result = []; - for (var i = 0, n = modifiers.length; i < n; i++) { - result.push(modifiers[i].text()); - } - return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; - }; - NavigationBarItemGetter.prototype.getItems = function (node) { - var _this = this; - return this.getItemsWorker(function () { return _this.getTopLevelNodes(node); }, function (n) { return _this.createTopLevelItem(n); }); - }; - NavigationBarItemGetter.prototype.getChildNodes = function (nodes) { + } + function getChildNodes(nodes) { var childNodes = []; for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; - if (node.kind() === 130 /* FunctionDeclaration */) { + if (node.kind === 174 /* ClassDeclaration */ || node.kind === 176 /* EnumDeclaration */ || node.kind === 175 /* InterfaceDeclaration */ || node.kind === 177 /* ModuleDeclaration */ || node.kind === 172 /* FunctionDeclaration */) { childNodes.push(node); } - else if (node.kind() === 149 /* VariableStatement */) { - var variableDeclaration = node.variableDeclaration; - childNodes.push.apply(childNodes, variableDeclaration.variableDeclarators); + else if (node.kind === 149 /* VariableStatement */) { + childNodes.push.apply(childNodes, node.declarations); } } - return childNodes; - }; - NavigationBarItemGetter.prototype.getTopLevelNodes = function (node) { + return sortNodes(childNodes); + } + function getTopLevelNodes(node) { var topLevelNodes = []; topLevelNodes.push(node); - this.addTopLevelNodes(node.moduleElements, topLevelNodes); + addTopLevelNodes(node.statements, topLevelNodes); return topLevelNodes; - }; - NavigationBarItemGetter.prototype.addTopLevelNodes = function (nodes, topLevelNodes) { + } + function sortNodes(nodes) { + return nodes.slice(0).sort(function (n1, n2) { + if (n1.name && n2.name) { + return n1.name.text.localeCompare(n2.name.text); + } + else if (n1.name) { + return 1; + } + else if (n2.name) { + -1; + } + else { + return n1.kind - n2.kind; + } + }); + } + function addTopLevelNodes(nodes, topLevelNodes) { + nodes = sortNodes(nodes); for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; - switch (node.kind()) { - case 132 /* ClassDeclaration */: - case 133 /* EnumDeclaration */: - case 129 /* InterfaceDeclaration */: + switch (node.kind) { + case 174 /* ClassDeclaration */: + case 176 /* EnumDeclaration */: + case 175 /* InterfaceDeclaration */: topLevelNodes.push(node); break; - case 131 /* ModuleDeclaration */: + case 177 /* ModuleDeclaration */: var moduleDeclaration = node; topLevelNodes.push(node); - this.addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); + addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); break; - case 130 /* FunctionDeclaration */: + case 172 /* FunctionDeclaration */: var functionDeclaration = node; - if (this.isTopLevelFunctionDeclaration(functionDeclaration)) { + if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); - this.addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); + addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes); } break; } } - }; - NavigationBarItemGetter.prototype.isTopLevelFunctionDeclaration = function (functionDeclaration) { - return functionDeclaration.block && TypeScript.ArrayUtilities.any(functionDeclaration.block.statements, function (s) { return s.kind() === 130 /* FunctionDeclaration */; }); - }; - NavigationBarItemGetter.prototype.getItemsWorker = function (getNodes, createItem) { + } + function isTopLevelFunctionDeclaration(functionDeclaration) { + if (functionDeclaration.kind === 172 /* FunctionDeclaration */) { + if (functionDeclaration.body && functionDeclaration.body.kind === 173 /* FunctionBlock */) { + if (ts.forEach(functionDeclaration.body.statements, function (s) { return s.kind === 172 /* FunctionDeclaration */ && !isEmpty(s.name.text); })) { + return true; + } + if (functionDeclaration.parent.kind !== 173 /* FunctionBlock */) { + return true; + } + } + } + return false; + } + function getItemsWorker(nodes, createItem) { var items = []; - var keyToItem = TypeScript.createIntrinsicsObject(); - var nodes = getNodes(); + var keyToItem = {}; for (var i = 0, n = nodes.length; i < n; i++) { var child = nodes[i]; var item = createItem(child); - if (item != null) { + if (item !== undefined) { if (item.text.length > 0) { - var key = item.text + "-" + item.kind; + var key = item.text + "-" + item.kind + "-" + item.indent; var itemWithSameName = keyToItem[key]; if (itemWithSameName) { - this.merge(itemWithSameName, item); + merge(itemWithSameName, item); } else { keyToItem[key] = item; @@ -26541,8 +26956,8 @@ var TypeScript; } } return items; - }; - NavigationBarItemGetter.prototype.merge = function (target, source) { + } + function merge(target, source) { target.spans.push.apply(target.spans, source.spans); if (source.childItems) { if (!target.childItems) { @@ -26553,206 +26968,154 @@ var TypeScript; for (var j = 0, m = target.childItems.length; j < m; j++) { var targetChild = target.childItems[j]; if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { - this.merge(targetChild, sourceChild); + merge(targetChild, sourceChild); continue outer; } } target.childItems.push(sourceChild); } } - }; - NavigationBarItemGetter.prototype.createChildItem = function (node) { - switch (node.kind()) { - case 243 /* Parameter */: - var parameter = node; - if (parameter.modifiers.length === 0) { - return null; - } - return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(parameter.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 136 /* MemberFunctionDeclaration */: - var memberFunction = node; - return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, this.getKindModifiers(memberFunction.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 140 /* GetAccessor */: - var getAccessor = node; - return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, this.getKindModifiers(getAccessor.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 141 /* SetAccessor */: - var setAccessor = node; - return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, this.getKindModifiers(setAccessor.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 145 /* IndexSignature */: - var indexSignature = node; - return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 244 /* EnumElement */: - var enumElement = node; - return new ts.NavigationBarItem(enumElement.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 143 /* CallSignature */: - var callSignature = node; - return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 144 /* ConstructSignature */: - var constructSignature = node; - return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 146 /* MethodSignature */: - var methodSignature = node; - return new ts.NavigationBarItem(methodSignature.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 142 /* PropertySignature */: - var propertySignature = node; - return new ts.NavigationBarItem(propertySignature.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - case 130 /* FunctionDeclaration */: - var functionDeclaration = node; - if (!this.isTopLevelFunctionDeclaration(functionDeclaration)) { - return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(functionDeclaration.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - } - break; - case 137 /* MemberVariableDeclaration */: - var memberVariableDeclaration = node; - return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(memberVariableDeclaration.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(memberVariableDeclaration.variableDeclarator), TypeScript.end(memberVariableDeclaration.variableDeclarator))]); - case 226 /* VariableDeclarator */: - var variableDeclarator = node; - return new ts.NavigationBarItem(variableDeclarator.propertyName.text(), ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(variableDeclarator), TypeScript.end(variableDeclarator))]); - case 138 /* ConstructorDeclaration */: - var constructorDeclaration = node; - return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))]); - } - return null; - }; - NavigationBarItemGetter.prototype.createTopLevelItem = function (node) { - switch (node.kind()) { - case 120 /* SourceUnit */: - return this.createSourceUnitItem(node); - case 132 /* ClassDeclaration */: - return this.createClassItem(node); - case 133 /* EnumDeclaration */: - return this.createEnumItem(node); - case 129 /* InterfaceDeclaration */: - return this.createIterfaceItem(node); - case 131 /* ModuleDeclaration */: - return this.createModuleItem(node); - case 130 /* FunctionDeclaration */: - return this.createFunctionItem(node); - } - return null; - }; - NavigationBarItemGetter.prototype.getModuleNames = function (node) { - var result = []; - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } - else { - this.getModuleNamesHelper(node.name, result); - } - return result; - }; - NavigationBarItemGetter.prototype.getModuleNamesHelper = function (name, result) { - if (name.kind() === 121 /* QualifiedName */) { - var qualifiedName = name; - this.getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } - else { - result.push(name.text()); - } - }; - NavigationBarItemGetter.prototype.createModuleItem = function (node) { - var _this = this; - var moduleNames = this.getModuleNames(node); - var childItems = this.getItemsWorker(function () { return _this.getChildNodes(node.moduleElements); }, function (n) { return _this.createChildItem(n); }); - return new ts.NavigationBarItem(moduleNames.join("."), ts.ScriptElementKind.moduleElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); - }; - NavigationBarItemGetter.prototype.createFunctionItem = function (node) { - var _this = this; - var childItems = this.getItemsWorker(function () { return node.block.statements; }, function (n) { return _this.createChildItem(n); }); - return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); - }; - NavigationBarItemGetter.prototype.createSourceUnitItem = function (node) { - var _this = this; - var childItems = this.getItemsWorker(function () { return _this.getChildNodes(node.moduleElements); }, function (n) { return _this.createChildItem(n); }); - if (childItems === null || childItems.length === 0) { - return null; - } - this.hasGlobalNode = true; - return new ts.NavigationBarItem("", ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems); - }; - NavigationBarItemGetter.prototype.createClassItem = function (node) { - var _this = this; - var constructor = TypeScript.ArrayUtilities.firstOrDefault(node.classElements, function (n) { return n.kind() === 138 /* ConstructorDeclaration */; }); - var nodes = constructor ? constructor.callSignature.parameterList.parameters.concat(node.classElements) : node.classElements; - var childItems = this.getItemsWorker(function () { return nodes; }, function (n) { return _this.createChildItem(n); }); - return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.classElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); - }; - NavigationBarItemGetter.prototype.createEnumItem = function (node) { - var _this = this; - var childItems = this.getItemsWorker(function () { return node.enumElements; }, function (n) { return _this.createChildItem(n); }); - return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.enumElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); - }; - NavigationBarItemGetter.prototype.createIterfaceItem = function (node) { - var _this = this; - var childItems = this.getItemsWorker(function () { return node.body.typeMembers; }, function (n) { return _this.createChildItem(n); }); - return new ts.NavigationBarItem(node.identifier.text(), ts.ScriptElementKind.interfaceElement, this.getKindModifiers(node.modifiers), [TypeScript.TextSpan.fromBounds(TypeScript.start(node), TypeScript.end(node))], childItems, this.getIndent(node)); - }; - return NavigationBarItemGetter; - })(); - Services.NavigationBarItemGetter = NavigationBarItemGetter; - })(Services = TypeScript.Services || (TypeScript.Services = {})); -})(TypeScript || (TypeScript = {})); -var TypeScript; -(function (TypeScript) { - var Services; - (function (Services) { - var BraceMatcher = (function () { - function BraceMatcher() { } - BraceMatcher.getMatchSpans = function (syntaxTree, position) { - var result = []; - var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); - if (TypeScript.start(token) === position) { - var matchKind = BraceMatcher.getMatchingTokenKind(token); - if (matchKind !== null) { - var parentElement = token.parent; - for (var i = 0, n = TypeScript.childCount(parentElement); i < n; i++) { - var current = TypeScript.childAt(parentElement, i); - if (current !== null && TypeScript.fullWidth(current) > 0) { - if (current.kind() === matchKind) { - var range1 = new TypeScript.TextSpan(TypeScript.start(token), TypeScript.width(token)); - var range2 = new TypeScript.TextSpan(TypeScript.start(current), TypeScript.width(current)); - if (range1.start() < range2.start()) { - result.push(range1, range2); - } - else { - result.push(range2, range1); - } - break; - } - } + function createChildItem(node) { + switch (node.kind) { + case 118 /* Parameter */: + if ((node.flags & ts.NodeFlags.Modifier) === 0) { + return undefined; } + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 120 /* Method */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); + case 122 /* GetAccessor */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); + case 123 /* SetAccessor */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); + case 126 /* IndexSignature */: + return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); + case 181 /* EnumMember */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 124 /* CallSignature */: + return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); + case 125 /* ConstructSignature */: + return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); + case 119 /* Property */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 172 /* FunctionDeclaration */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); + case 171 /* VariableDeclaration */: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.variableElement); + case 121 /* Constructor */: + return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); + } + return undefined; + function createItem(node, name, scriptElementKind) { + return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]); + } + } + function isEmpty(text) { + return !text || text.trim() === ""; + } + function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { + if (childItems === void 0) { childItems = []; } + if (indent === void 0) { indent = 0; } + if (isEmpty(text)) { + return undefined; + } + return { + text: text, + kind: kind, + kindModifiers: kindModifiers, + spans: spans, + childItems: childItems, + indent: indent, + bolded: false, + grayed: false + }; + } + function createTopLevelItem(node) { + switch (node.kind) { + case 182 /* SourceFile */: + return createSourceFileItem(node); + case 174 /* ClassDeclaration */: + return createClassItem(node); + case 176 /* EnumDeclaration */: + return createEnumItem(node); + case 175 /* InterfaceDeclaration */: + return createIterfaceItem(node); + case 177 /* ModuleDeclaration */: + return createModuleItem(node); + case 172 /* FunctionDeclaration */: + return createFunctionItem(node); + } + return undefined; + function getModuleName(moduleDeclaration) { + if (moduleDeclaration.name.kind === 7 /* StringLiteral */) { + return getTextOfNode(moduleDeclaration.name); } + var result = []; + result.push(moduleDeclaration.name.text); + while (moduleDeclaration.body && moduleDeclaration.body.kind === 177 /* ModuleDeclaration */) { + moduleDeclaration = moduleDeclaration.body; + result.push(moduleDeclaration.name.text); + } + return result.join("."); } - return result; - }; - BraceMatcher.getMatchingTokenKind = function (token) { - switch (token.kind()) { - case 70 /* OpenBraceToken */: - return 71 /* CloseBraceToken */; - case 72 /* OpenParenToken */: - return 73 /* CloseParenToken */; - case 74 /* OpenBracketToken */: - return 75 /* CloseBracketToken */; - case 80 /* LessThanToken */: - return 81 /* GreaterThanToken */; - case 71 /* CloseBraceToken */: - return 70 /* OpenBraceToken */; - case 73 /* CloseParenToken */: - return 72 /* OpenParenToken */; - case 75 /* CloseBracketToken */: - return 74 /* OpenBracketToken */; - case 81 /* GreaterThanToken */: - return 80 /* LessThanToken */; + function createModuleItem(node) { + var moduleName = getModuleName(node); + var childItems = getItemsWorker(getChildNodes(getInnermostModule(node).body.statements), createChildItem); + return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } - return null; - }; - return BraceMatcher; - })(); - Services.BraceMatcher = BraceMatcher; - })(Services = TypeScript.Services || (TypeScript.Services = {})); -})(TypeScript || (TypeScript = {})); + function createFunctionItem(node) { + if (node.name && node.body && node.body.kind === 173 /* FunctionBlock */) { + var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + return undefined; + } + function createSourceFileItem(node) { + var childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); + if (childItems === undefined || childItems.length === 0) { + return undefined; + } + hasGlobalNode = true; + var rootName = ts.isExternalModule(node) ? "\"" + ts.escapeString(ts.getBaseFilename(ts.removeFileExtension(ts.normalizePath(node.filename)))) + "\"" : ""; + return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)], childItems); + } + function createClassItem(node) { + var childItems; + if (node.members) { + var constructor = ts.forEach(node.members, function (member) { + return member.kind === 121 /* Constructor */ && member; + }); + var nodes = constructor ? constructor.parameters.concat(node.members) : node.members; + var childItems = getItemsWorker(sortNodes(nodes), createChildItem); + } + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.classElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + function createEnumItem(node) { + var childItems = getItemsWorker(sortNodes(node.members), createChildItem); + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.enumElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + function createIterfaceItem(node) { + var childItems = getItemsWorker(sortNodes(node.members), createChildItem); + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.interfaceElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + } + function getInnermostModule(node) { + while (node.body.kind === 177 /* ModuleDeclaration */) { + node = node.body; + } + return node; + } + function getNodeSpan(node) { + return node.kind === 182 /* SourceFile */ ? TypeScript.TextSpan.fromBounds(node.getFullStart(), node.getEnd()) : TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); + } + function getTextOfNode(node) { + return ts.getTextOfNodeFromSourceText(sourceFile.text, node); + } + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); +})(ts || (ts = {})); var TypeScript; (function (TypeScript) { var Services; @@ -27741,6 +28104,328 @@ var TypeScript; Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; })(Indentation = TypeScript.Indentation || (TypeScript.Indentation = {})); })(TypeScript || (TypeScript = {})); +var ts; +(function (ts) { + var SignatureHelp; + (function (SignatureHelp) { + var emptyArray = []; + function getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken) { + var startingToken = ts.findTokenOnLeftOfPosition(sourceFile, position); + if (!startingToken) { + return undefined; + } + var argumentInfo = getContainingArgumentInfo(startingToken); + cancellationToken.throwIfCancellationRequested(); + if (!argumentInfo) { + return undefined; + } + var call = argumentInfo.list.parent; + var candidates = []; + var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates); + cancellationToken.throwIfCancellationRequested(); + if (!candidates.length) { + return undefined; + } + return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); + function getImmediatelyContainingArgumentInfo(node) { + if (node.parent.kind !== 137 /* CallExpression */ && node.parent.kind !== 138 /* NewExpression */) { + return undefined; + } + var parent = node.parent; + if (node.kind === 19 /* LessThanToken */ || node.kind === 11 /* OpenParenToken */) { + var list = getChildListThatStartsWithOpenerToken(parent, node, sourceFile); + ts.Debug.assert(list); + return { + list: list, + listItemIndex: 0 + }; + } + return ts.findListItemInfo(node); + } + function getContainingArgumentInfo(node) { + for (var n = node; n.kind !== 182 /* SourceFile */; n = n.parent) { + if (n.kind === 173 /* FunctionBlock */) { + return undefined; + } + if (n.pos < n.parent.pos || n.end > n.parent.end) { + ts.Debug.fail("Node of kind " + ts.SyntaxKind[n.kind] + " is not a subspan of its parent of kind " + ts.SyntaxKind[n.parent.kind]); + } + var argumentInfo = getImmediatelyContainingArgumentInfo(n); + if (argumentInfo) { + return argumentInfo; + } + } + return undefined; + } + function selectBestInvalidOverloadIndex(candidates, argumentCount) { + 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, bestSignature, argumentInfoOrTypeArgumentInfo) { + var argumentListOrTypeArgumentList = argumentInfoOrTypeArgumentInfo.list; + var items = ts.map(candidates, function (candidateSignature) { + var parameters = candidateSignature.parameters; + var parameterHelpItems = parameters.length === 0 ? emptyArray : ts.map(parameters, function (p) { + var displayParts = []; + if (candidateSignature.hasRestParameter && parameters[parameters.length - 1] === p) { + displayParts.push(ts.punctuationPart(16 /* DotDotDotToken */)); + } + displayParts.push(ts.symbolPart(p.name, p)); + var isOptional = !!(p.valueDeclaration.flags & 4 /* QuestionMark */); + if (isOptional) { + displayParts.push(ts.punctuationPart(45 /* QuestionToken */)); + } + displayParts.push(ts.punctuationPart(46 /* ColonToken */)); + displayParts.push(ts.spacePart()); + var typeParts = ts.typeToDisplayParts(typeInfoResolver, typeInfoResolver.getTypeOfSymbol(p), argumentListOrTypeArgumentList); + displayParts.push.apply(displayParts, typeParts); + return { + name: p.name, + documentation: p.getDocumentationComment(), + displayParts: displayParts, + isOptional: isOptional + }; + }); + var callTargetNode = argumentListOrTypeArgumentList.parent.func; + var callTargetSymbol = typeInfoResolver.getSymbolInfo(callTargetNode); + var prefixParts = callTargetSymbol ? ts.symbolToDisplayParts(typeInfoResolver, callTargetSymbol, undefined, undefined) : []; + var separatorParts = [ts.punctuationPart(18 /* CommaToken */), ts.spacePart()]; + if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) { + prefixParts.push(ts.punctuationPart(19 /* LessThanToken */)); + for (var i = 0, n = candidateSignature.typeParameters.length; i < n; i++) { + if (i) { + prefixParts.push.apply(prefixParts, separatorParts); + } + var tp = candidateSignature.typeParameters[i].symbol; + prefixParts.push(ts.symbolPart(tp.name, tp)); + } + prefixParts.push(ts.punctuationPart(20 /* GreaterThanToken */)); + } + prefixParts.push(ts.punctuationPart(11 /* OpenParenToken */)); + var suffixParts = [ts.punctuationPart(12 /* CloseParenToken */)]; + suffixParts.push(ts.punctuationPart(46 /* ColonToken */)); + suffixParts.push(ts.spacePart()); + var typeParts = ts.typeToDisplayParts(typeInfoResolver, candidateSignature.getReturnType(), argumentListOrTypeArgumentList); + suffixParts.push.apply(suffixParts, typeParts); + return { + isVariadic: candidateSignature.hasRestParameter, + prefixDisplayParts: prefixParts, + suffixDisplayParts: suffixParts, + separatorDisplayParts: separatorParts, + parameters: parameterHelpItems, + documentation: candidateSignature.getDocumentationComment() + }; + }); + var applicableSpanStart = argumentListOrTypeArgumentList.getFullStart(); + var applicableSpanEnd = ts.skipTrivia(sourceFile.text, argumentListOrTypeArgumentList.end, false); + var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); + var argumentIndex = (argumentInfoOrTypeArgumentInfo.listItemIndex + 1) >> 1; + var argumentCount = argumentListOrTypeArgumentList.getChildCount() === 0 ? 0 : 1 + ts.countWhere(argumentListOrTypeArgumentList.getChildren(), function (arg) { return arg.kind === 18 /* CommaToken */; }); + var selectedItemIndex = candidates.indexOf(bestSignature); + if (selectedItemIndex < 0) { + selectedItemIndex = selectBestInvalidOverloadIndex(candidates, argumentCount); + } + return { + items: items, + applicableSpan: applicableSpan, + selectedItemIndex: selectedItemIndex, + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + } + } + SignatureHelp.getSignatureHelpItems = getSignatureHelpItems; + function getChildListThatStartsWithOpenerToken(parent, openerToken, sourceFile) { + var children = parent.getChildren(sourceFile); + var indexOfOpenerToken = children.indexOf(openerToken); + return children[indexOfOpenerToken + 1]; + } + })(SignatureHelp = ts.SignatureHelp || (ts.SignatureHelp = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + function findListItemInfo(node) { + var syntaxList = findContainingList(node); + if (!syntaxList) { + return undefined; + } + var children = syntaxList.getChildren(); + var index = ts.indexOf(children, node); + return { + listItemIndex: index, + list: syntaxList + }; + } + ts.findListItemInfo = findListItemInfo; + function findChildOfKind(n, kind, sourceFile) { + return ts.forEach(n.getChildren(sourceFile), function (c) { return c.kind === kind && c; }); + } + ts.findChildOfKind = findChildOfKind; + function findContainingList(node) { + var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { + if (c.kind === 184 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { + return c; + } + }); + return syntaxList; + } + ts.findContainingList = findContainingList; + function findListItemIndexContainingPosition(list, position) { + ts.Debug.assert(list.kind === 184 /* SyntaxList */); + var children = list.getChildren(); + for (var i = 0; i < children.length; i++) { + if (children[i].pos <= position && children[i].end > position) { + return i; + } + } + return -1; + } + ts.findListItemIndexContainingPosition = findListItemIndexContainingPosition; + function getTouchingWord(sourceFile, position) { + return getTouchingToken(sourceFile, position, isWord); + } + ts.getTouchingWord = getTouchingWord; + function getTouchingPropertyName(sourceFile, position) { + return getTouchingToken(sourceFile, position, isPropertyName); + } + ts.getTouchingPropertyName = getTouchingPropertyName; + function getTouchingToken(sourceFile, position, includeItemAtEndPosition) { + return getTokenAtPositionWorker(sourceFile, position, false, includeItemAtEndPosition); + } + ts.getTouchingToken = getTouchingToken; + function getTokenAtPosition(sourceFile, position) { + return getTokenAtPositionWorker(sourceFile, position, true, undefined); + } + ts.getTokenAtPosition = getTokenAtPosition; + function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includeItemAtEndPosition) { + var current = sourceFile; + outer: while (true) { + if (isToken(current)) { + return current; + } + for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) { + var child = current.getChildAt(i); + 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; + } + } + function findTokenOnLeftOfPosition(file, position) { + var tokenAtPosition = getTokenAtPosition(file, position); + if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { + return tokenAtPosition; + } + return findPrecedingToken(position, file); + } + ts.findTokenOnLeftOfPosition = findTokenOnLeftOfPosition; + function findNextToken(previousToken, parent) { + return find(parent); + function find(n) { + if (isToken(n) && n.pos === previousToken.end) { + return n; + } + var children = n.getChildren(); + for (var i = 0, len = children.length; i < len; ++i) { + var child = children[i]; + var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) || (child.pos === previousToken.end); + if (shouldDiveInChildNode && nodeHasTokens(child)) { + return find(child); + } + } + return undefined; + } + } + ts.findNextToken = findNextToken; + function findPrecedingToken(position, sourceFile, startNode) { + return find(startNode || sourceFile); + function findRightmostToken(n) { + if (isToken(n)) { + return n; + } + var children = n.getChildren(); + var candidate = findRightmostChildNodeWithTokens(children, children.length); + return candidate && findRightmostToken(candidate); + } + function find(n) { + if (isToken(n)) { + return n; + } + var children = n.getChildren(); + for (var i = 0, len = children.length; i < len; ++i) { + var child = children[i]; + if (nodeHasTokens(child)) { + if (position < child.end) { + if (child.getStart(sourceFile) >= position) { + var candidate = findRightmostChildNodeWithTokens(children, i); + return candidate && findRightmostToken(candidate); + } + else { + return find(child); + } + } + } + } + ts.Debug.assert(startNode || n.kind === 182 /* SourceFile */); + if (children.length) { + var candidate = findRightmostChildNodeWithTokens(children, children.length); + return candidate && findRightmostToken(candidate); + } + } + function findRightmostChildNodeWithTokens(children, exclusiveStartPosition) { + for (var i = exclusiveStartPosition - 1; i >= 0; --i) { + if (nodeHasTokens(children[i])) { + return children[i]; + } + } + } + } + ts.findPrecedingToken = findPrecedingToken; + function nodeHasTokens(n) { + if (n.kind === 151 /* ExpressionStatement */) { + return nodeHasTokens(n.expression); + } + if (n.kind === 1 /* EndOfFileToken */ || n.kind === 147 /* OmittedExpression */ || n.kind === 115 /* Missing */) { + return false; + } + return n.kind !== 184 /* SyntaxList */ || n.getChildCount() !== 0; + } + function isToken(n) { + return n.kind >= ts.SyntaxKind.FirstToken && n.kind <= ts.SyntaxKind.LastToken; + } + ts.isToken = isToken; + function isKeyword(n) { + return n.kind >= ts.SyntaxKind.FirstKeyword && n.kind <= ts.SyntaxKind.LastKeyword; + } + function isWord(n) { + return n.kind === 59 /* Identifier */ || isKeyword(n); + } + function isPropertyName(n) { + return n.kind === 7 /* StringLiteral */ || n.kind === 6 /* NumericLiteral */ || isWord(n); + } +})(ts || (ts = {})); var TypeScript; (function (TypeScript) { var Services; @@ -28027,8 +28712,10 @@ var TypeScript; var result = []; var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); formattingEdits.forEach(function (item) { - var edit = new ts.TextChange(new TypeScript.TextSpan(item.position, item.length), item.replaceWith); - result.push(edit); + result.push({ + span: new TypeScript.TextSpan(item.position, item.length), + newText: item.replaceWith + }); }); return result; }; @@ -29632,7 +30319,7 @@ var ts; if (position > sourceFile.text.length) { return 0; } - var precedingToken = findPrecedingToken(position, sourceFile); + var precedingToken = ts.findPrecedingToken(position, sourceFile); if (!precedingToken) { return 0; } @@ -29695,8 +30382,9 @@ var ts; } SmartIndenter.getIndentation = getIndentation; function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) { - var itemInfo = findPrecedingListItem(commaToken); - return deriveActualIndentationFromList(itemInfo.list.getChildren(), itemInfo.listItemIndex, sourceFile, options); + var commaItemInfo = ts.findListItemInfo(commaToken); + ts.Debug.assert(commaItemInfo && commaItemInfo.listItemIndex > 0); + return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options); } function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) { var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && (parent.kind === 182 /* SourceFile */ || !parentAndChildShareLine); @@ -29706,7 +30394,7 @@ var ts; return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options); } function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) { - var nextToken = findNextToken(precedingToken, current); + var nextToken = ts.findNextToken(precedingToken, current); if (!nextToken) { return false; } @@ -29722,27 +30410,12 @@ var ts; function getStartLineAndCharacterForNode(n, sourceFile) { return sourceFile.getLineAndCharacterFromPosition(n.getStart(sourceFile)); } - function findPrecedingListItem(commaToken) { - var syntaxList = ts.forEach(commaToken.parent.getChildren(), function (c) { - if (c.kind == 184 /* SyntaxList */ && c.pos <= commaToken.end && c.end >= commaToken.end) { - return c; - } - }); - ts.Debug.assert(syntaxList); - var children = syntaxList.getChildren(); - var commaIndex = ts.indexOf(children, commaToken); - ts.Debug.assert(commaIndex !== -1 && commaIndex !== 0); - return { - listItemIndex: commaIndex - 1, - list: syntaxList - }; - } function positionBelongsToNode(candidate, position, sourceFile) { return candidate.end > position || !isCompletedNode(candidate, sourceFile); } function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { if (parent.kind === 152 /* IfStatement */ && parent.elseStatement === child) { - var elseKeyword = ts.forEach(parent.getChildren(), function (c) { return c.kind === 70 /* ElseKeyword */ && c; }); + var elseKeyword = ts.findChildOfKind(parent, 70 /* ElseKeyword */, sourceFile); ts.Debug.assert(elseKeyword); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; return elseKeywordStartLine === childStartLine; @@ -29819,78 +30492,6 @@ var ts; } return column; } - function findNextToken(previousToken, parent) { - return find(parent); - function find(n) { - if (isToken(n) && n.pos === previousToken.end) { - return n; - } - var children = n.getChildren(); - for (var i = 0, len = children.length; i < len; ++i) { - var child = children[i]; - var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) || (child.pos === previousToken.end); - if (shouldDiveInChildNode && nodeHasTokens(child)) { - return find(child); - } - } - return undefined; - } - } - function findPrecedingToken(position, sourceFile) { - return find(sourceFile); - function findRightmostToken(n) { - if (isToken(n)) { - return n; - } - var children = n.getChildren(); - var candidate = findRightmostChildNodeWithTokens(children, children.length); - return candidate && findRightmostToken(candidate); - } - function find(n) { - if (isToken(n)) { - return n; - } - var children = n.getChildren(); - for (var i = 0, len = children.length; i < len; ++i) { - var child = children[i]; - if (nodeHasTokens(child)) { - if (position < child.end) { - if (child.getStart(sourceFile) >= position) { - var candidate = findRightmostChildNodeWithTokens(children, i); - return candidate && findRightmostToken(candidate); - } - else { - return find(child); - } - } - } - } - ts.Debug.assert(n.kind === 182 /* SourceFile */); - if (children.length) { - var candidate = findRightmostChildNodeWithTokens(children, children.length); - return candidate && findRightmostToken(candidate); - } - } - function findRightmostChildNodeWithTokens(children, exclusiveStartPosition) { - for (var i = exclusiveStartPosition - 1; i >= 0; --i) { - if (nodeHasTokens(children[i])) { - return children[i]; - } - } - } - } - function nodeHasTokens(n) { - if (n.kind === 151 /* ExpressionStatement */) { - return nodeHasTokens(n.expression); - } - if (n.kind === 1 /* EndOfFileToken */ || n.kind === 147 /* OmittedExpression */ || n.kind === 115 /* Missing */) { - return false; - } - return n.kind !== 184 /* SyntaxList */ || n.getChildCount() !== 0; - } - function isToken(n) { - return n.kind >= ts.SyntaxKind.FirstToken && n.kind <= ts.SyntaxKind.LastToken; - } function nodeContentIsIndented(parent, child) { switch (parent.kind) { case 174 /* ClassDeclaration */: @@ -29992,7 +30593,7 @@ var ts; case 154 /* WhileStatement */: return isCompletedNode(n.statement, sourceFile); case 153 /* DoStatement */: - var hasWhileKeyword = ts.forEach(n.getChildren(), function (c) { return c.kind === 94 /* WhileKeyword */ && c; }); + var hasWhileKeyword = ts.findChildOfKind(n, 94 /* WhileKeyword */, sourceFile); if (hasWhileKeyword) { return nodeEndsWith(n, 12 /* CloseParenToken */, sourceFile); } @@ -31236,98 +31837,6 @@ var TypeScript; })(ASTHelpers = TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); })(TypeScript || (TypeScript = {})); var TypeScript; -(function (TypeScript) { - var MemberName = (function () { - function MemberName() { - this.prefix = ""; - this.suffix = ""; - } - MemberName.prototype.isString = function () { - return false; - }; - MemberName.prototype.isArray = function () { - return false; - }; - MemberName.prototype.isMarker = function () { - return !this.isString() && !this.isArray(); - }; - MemberName.prototype.toString = function () { - return MemberName.memberNameToString(this); - }; - MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { - if (markerBaseLength === void 0) { markerBaseLength = 0; } - var result = memberName.prefix; - if (memberName.isString()) { - result += memberName.text; - } - else if (memberName.isArray()) { - var ar = memberName; - for (var index = 0; index < ar.entries.length; index++) { - if (ar.entries[index].isMarker()) { - if (markerInfo) { - markerInfo.push(markerBaseLength + result.length); - } - continue; - } - result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); - result += ar.delim; - } - } - result += memberName.suffix; - return result; - }; - MemberName.create = function (arg1, arg2, arg3) { - if (typeof arg1 === "string") { - return new MemberNameString(arg1); - } - else { - var result = new MemberNameArray(); - if (arg2) - result.prefix = arg2; - if (arg3) - result.suffix = arg3; - result.entries.push(arg1); - return result; - } - }; - return MemberName; - })(); - TypeScript.MemberName = MemberName; - var MemberNameString = (function (_super) { - __extends(MemberNameString, _super); - function MemberNameString(text) { - _super.call(this); - this.text = text; - } - MemberNameString.prototype.isString = function () { - return true; - }; - return MemberNameString; - })(MemberName); - TypeScript.MemberNameString = MemberNameString; - var MemberNameArray = (function (_super) { - __extends(MemberNameArray, _super); - function MemberNameArray() { - _super.call(this); - this.delim = ""; - this.entries = []; - } - MemberNameArray.prototype.isArray = function () { - return true; - }; - MemberNameArray.prototype.add = function (entry) { - this.entries.push(entry); - }; - MemberNameArray.prototype.addAll = function (entries) { - for (var i = 0; i < entries.length; i++) { - this.entries.push(entries[i]); - } - }; - return MemberNameArray; - })(MemberName); - TypeScript.MemberNameArray = MemberNameArray; -})(TypeScript || (TypeScript = {})); -var TypeScript; (function (TypeScript) { function stripStartAndEndQuotes(str) { var firstCharCode = str && str.charCodeAt(0); @@ -31506,10 +32015,7 @@ var ts; function NodeObject() { } NodeObject.prototype.getSourceFile = function () { - var node = this; - while (node.kind !== 182 /* SourceFile */) - node = node.parent; - return node; + return ts.getSourceFileOfNode(this); }; NodeObject.prototype.getStart = function (sourceFile) { return ts.getTokenPosOfNode(this, sourceFile); @@ -31603,7 +32109,7 @@ var ts; return this._children; }; NodeObject.prototype.getFirstToken = function (sourceFile) { - var children = this.getChildren(sourceFile); + var children = this.getChildren(); for (var i = 0; i < children.length; i++) { var child = children[i]; if (child.kind < 115 /* Missing */) @@ -31638,8 +32144,225 @@ var ts; SymbolObject.prototype.getDeclarations = function () { return this.declarations; }; + SymbolObject.prototype.getDocumentationComment = function () { + if (this.documentationComment === undefined) { + this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 2 /* Property */)); + } + return this.documentationComment; + }; return SymbolObject; })(); + function getJsDocCommentsFromDeclarations(declarations, name, canUseParsedParamTagComments) { + var documentationComment = []; + var docComments = getJsDocCommentsSeparatedByNewLines(); + ts.forEach(docComments, function (docComment) { + if (documentationComment.length) { + documentationComment.push(lineBreakPart()); + } + documentationComment.push(docComment); + }); + return documentationComment; + function getJsDocCommentsSeparatedByNewLines() { + var paramTag = "@param"; + var jsDocCommentParts = []; + ts.forEach(declarations, function (declaration) { + var sourceFileOfDeclaration = ts.getSourceFileOfNode(declaration); + if (canUseParsedParamTagComments && declaration.kind === 118 /* Parameter */) { + ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration), function (jsDocCommentTextRange) { + var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration); + if (cleanedParamJsDocComment) { + jsDocCommentParts.push.apply(jsDocCommentParts, cleanedParamJsDocComment); + } + }); + } + if (declaration.kind === 177 /* ModuleDeclaration */ && declaration.body.kind === 177 /* ModuleDeclaration */) { + return; + } + while (declaration.kind === 177 /* ModuleDeclaration */ && declaration.parent.kind === 177 /* ModuleDeclaration */) { + declaration = declaration.parent; + } + ts.forEach(getJsDocCommentTextRange(declaration.kind === 171 /* VariableDeclaration */ ? declaration.parent : declaration, sourceFileOfDeclaration), function (jsDocCommentTextRange) { + var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration); + if (cleanedJsDocComment) { + jsDocCommentParts.push.apply(jsDocCommentParts, cleanedJsDocComment); + } + }); + }); + return jsDocCommentParts; + function getJsDocCommentTextRange(node, sourceFile) { + return ts.map(ts.getJsDocComments(node, sourceFile), function (jsDocComment) { + return { + pos: jsDocComment.pos + "/*".length, + end: jsDocComment.end - "*/".length + }; + }); + } + function consumeWhiteSpacesOnTheLine(pos, end, sourceFile, maxSpacesToRemove) { + if (maxSpacesToRemove !== undefined) { + end = Math.min(end, pos + maxSpacesToRemove); + } + for (; pos < end; pos++) { + var ch = sourceFile.text.charCodeAt(pos); + if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { + return pos; + } + } + return end; + } + function consumeLineBreaks(pos, end, sourceFile) { + while (pos < end && ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + pos++; + } + return pos; + } + function isName(pos, end, sourceFile, name) { + return pos + name.length < end && sourceFile.text.substr(pos, name.length) === name && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); + } + function isParamTag(pos, end, sourceFile) { + return isName(pos, end, sourceFile, paramTag); + } + function getCleanedJsDocComment(pos, end, sourceFile) { + var spacesToRemoveAfterAsterisk; + var docComments = []; + var isInParamTag = false; + while (pos < end) { + var docCommentTextOfLine = ""; + pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile); + if (pos < end && sourceFile.text.charCodeAt(pos) === 42 /* asterisk */) { + var lineStartPos = pos + 1; + pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, spacesToRemoveAfterAsterisk); + if (spacesToRemoveAfterAsterisk === undefined && pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + spacesToRemoveAfterAsterisk = pos - lineStartPos; + } + } + else if (spacesToRemoveAfterAsterisk === undefined) { + spacesToRemoveAfterAsterisk = 0; + } + while (pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + var ch = sourceFile.text.charAt(pos); + if (ch === "@") { + if (isParamTag(pos, end, sourceFile)) { + isInParamTag = true; + pos += paramTag.length; + continue; + } + else { + isInParamTag = false; + } + } + if (!isInParamTag) { + docCommentTextOfLine += ch; + } + pos++; + } + pos = consumeLineBreaks(pos, end, sourceFile); + if (docCommentTextOfLine) { + docComments.push(textPart(docCommentTextOfLine)); + } + } + return docComments; + } + function getCleanedParamJsDocComment(pos, end, sourceFile) { + var paramHelpStringMargin; + var paramDocComments = []; + while (pos < end) { + if (isParamTag(pos, end, sourceFile)) { + pos = consumeWhiteSpaces(pos + paramTag.length); + if (pos >= end) { + break; + } + if (sourceFile.text.charCodeAt(pos) === 123 /* openBrace */) { + pos++; + for (var curlies = 1; pos < end; pos++) { + var charCode = sourceFile.text.charCodeAt(pos); + if (charCode === 123 /* openBrace */) { + curlies++; + continue; + } + if (charCode === 125 /* closeBrace */) { + curlies--; + if (curlies === 0) { + pos++; + break; + } + else { + continue; + } + } + if (charCode === 64 /* at */) { + break; + } + } + pos = consumeWhiteSpaces(pos); + if (pos >= end) { + break; + } + } + if (isName(pos, end, sourceFile, name)) { + pos = consumeWhiteSpaces(pos + name.length); + if (pos >= end) { + break; + } + var paramHelpString = ""; + var firstLineParamHelpStringPos = pos; + while (pos < end) { + var ch = sourceFile.text.charCodeAt(pos); + if (ts.isLineBreak(ch)) { + if (paramHelpString) { + paramDocComments.push(textPart(paramHelpString)); + paramHelpString = ""; + } + setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos); + continue; + } + if (ch === 64 /* at */) { + break; + } + paramHelpString += sourceFile.text.charAt(pos); + pos++; + } + if (paramHelpString) { + paramDocComments.push(textPart(paramHelpString)); + } + paramHelpStringMargin = undefined; + } + if (sourceFile.text.charCodeAt(pos) === 64 /* at */) { + continue; + } + } + pos++; + } + return paramDocComments; + function consumeWhiteSpaces(pos) { + while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + pos++; + } + return pos; + } + function setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos) { + pos = consumeLineBreaks(pos, end, sourceFile); + if (pos >= end) { + return; + } + if (paramHelpStringMargin === undefined) { + paramHelpStringMargin = sourceFile.getLineAndCharacterFromPosition(firstLineParamHelpStringPos).character - 1; + } + var startOfLinePos = pos; + pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile, paramHelpStringMargin); + if (pos >= end) { + return; + } + var consumedSpaces = pos - startOfLinePos; + if (consumedSpaces < paramHelpStringMargin) { + var ch = sourceFile.text.charCodeAt(pos); + if (ch === 42 /* asterisk */) { + pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, paramHelpStringMargin - consumedSpaces - 1); + } + } + } + } + } + } var TypeObject = (function () { function TypeObject(checker, flags) { this.checker = checker; @@ -31690,6 +32413,12 @@ var ts; SignatureObject.prototype.getReturnType = function () { return this.checker.getReturnTypeOfSignature(this); }; + SignatureObject.prototype.getDocumentationComment = function () { + if (this.documentationComment === undefined) { + this.documentationComment = this.declaration ? getJsDocCommentsFromDeclarations([this.declaration], this.declaration.name ? this.declaration.name.text : "", false) : []; + } + return this.documentationComment; + }; return SignatureObject; })(); var incrementalParse = TypeScript.IncrementalParser.parse; @@ -31717,25 +32446,36 @@ var ts; if (!this.namedDeclarations) { var sourceFile = this; var namedDeclarations = []; - var isExternalModule = ts.isExternalModule(sourceFile); ts.forEachChild(sourceFile, function visit(node) { switch (node.kind) { + case 172 /* FunctionDeclaration */: + case 120 /* Method */: + var functionDeclaration = node; + if (functionDeclaration.name && functionDeclaration.name.kind !== 115 /* Missing */) { + var lastDeclaration = namedDeclarations.length > 0 ? namedDeclarations[namedDeclarations.length - 1] : undefined; + if (lastDeclaration && functionDeclaration.symbol === lastDeclaration.symbol) { + if (functionDeclaration.body && !lastDeclaration.body) { + namedDeclarations[namedDeclarations.length - 1] = functionDeclaration; + } + } + else { + namedDeclarations.push(node); + } + ts.forEachChild(node, visit); + } + break; case 174 /* ClassDeclaration */: case 175 /* InterfaceDeclaration */: case 176 /* EnumDeclaration */: case 177 /* ModuleDeclaration */: case 179 /* ImportDeclaration */: - case 120 /* Method */: - case 172 /* FunctionDeclaration */: - case 121 /* Constructor */: case 122 /* GetAccessor */: case 123 /* SetAccessor */: case 129 /* TypeLiteral */: if (node.name) { namedDeclarations.push(node); } - ts.forEachChild(node, visit); - break; + case 121 /* Constructor */: case 149 /* VariableStatement */: case 178 /* ModuleBlock */: case 173 /* FunctionBlock */: @@ -31751,7 +32491,6 @@ var ts; namedDeclarations.push(node); break; } - return undefined; }); this.namedDeclarations = namedDeclarations; } @@ -31795,192 +32534,12 @@ var ts; }; return SourceFileObject; })(NodeObject); - var ClassificationTypeNames = (function () { - function ClassificationTypeNames() { - } - ClassificationTypeNames.comment = "comment"; - ClassificationTypeNames.identifier = "identifier"; - ClassificationTypeNames.keyword = "keyword"; - ClassificationTypeNames.numericLiteral = "number"; - ClassificationTypeNames.operator = "operator"; - ClassificationTypeNames.stringLiteral = "string"; - ClassificationTypeNames.whiteSpace = "whitespace"; - ClassificationTypeNames.text = "text"; - ClassificationTypeNames.punctuation = "punctuation"; - ClassificationTypeNames.className = "class name"; - ClassificationTypeNames.enumName = "enum name"; - ClassificationTypeNames.interfaceName = "interface name"; - ClassificationTypeNames.moduleName = "module name"; - ClassificationTypeNames.typeParameterName = "type parameter name"; - return ClassificationTypeNames; - })(); - ts.ClassificationTypeNames = ClassificationTypeNames; - var ClassifiedSpan = (function () { - function ClassifiedSpan(textSpan, classificationType) { - this.textSpan = textSpan; - this.classificationType = classificationType; - } - return ClassifiedSpan; - })(); - ts.ClassifiedSpan = ClassifiedSpan; - var NavigationBarItem = (function () { - function NavigationBarItem(text, kind, kindModifiers, spans, childItems, indent, bolded, grayed) { - if (childItems === void 0) { childItems = null; } - if (indent === void 0) { indent = 0; } - if (bolded === void 0) { bolded = false; } - if (grayed === void 0) { grayed = false; } - this.text = text; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.spans = spans; - this.childItems = childItems; - this.indent = indent; - this.bolded = bolded; - this.grayed = grayed; - } - return NavigationBarItem; - })(); - ts.NavigationBarItem = NavigationBarItem; - var TodoCommentDescriptor = (function () { - function TodoCommentDescriptor(text, priority) { - this.text = text; - this.priority = priority; - } - return TodoCommentDescriptor; - })(); - ts.TodoCommentDescriptor = TodoCommentDescriptor; - var TodoComment = (function () { - function TodoComment(descriptor, message, position) { - this.descriptor = descriptor; - this.message = message; - this.position = position; - } - return TodoComment; - })(); - ts.TodoComment = TodoComment; var TextChange = (function () { - function TextChange(span, newText) { - this.span = span; - this.newText = newText; + function TextChange() { } - TextChange.createInsert = function (pos, newText) { - return new TextChange(new TypeScript.TextSpan(pos, 0), newText); - }; - TextChange.createDelete = function (start, end) { - return new TextChange(TypeScript.TextSpan.fromBounds(start, end), ""); - }; - TextChange.createReplace = function (start, end, newText) { - return new TextChange(TypeScript.TextSpan.fromBounds(start, end), newText); - }; return TextChange; })(); ts.TextChange = TextChange; - var ReferenceEntry = (function () { - function ReferenceEntry(fileName, textSpan, isWriteAccess) { - this.fileName = ""; - this.isWriteAccess = false; - this.fileName = fileName; - this.textSpan = textSpan; - this.isWriteAccess = isWriteAccess; - } - return ReferenceEntry; - })(); - ts.ReferenceEntry = ReferenceEntry; - var NavigateToItem = (function () { - function NavigateToItem(name, kind, kindModifiers, matchKind, fileName, textSpan, containerName, containerKind) { - this.name = name; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.matchKind = matchKind; - this.fileName = fileName; - this.textSpan = textSpan; - this.containerName = containerName; - this.containerKind = containerKind; - } - return NavigateToItem; - })(); - ts.NavigateToItem = NavigateToItem; - var DefinitionInfo = (function () { - function DefinitionInfo(fileName, textSpan, kind, name, containerKind, containerName) { - this.fileName = fileName; - this.textSpan = textSpan; - this.kind = kind; - this.name = name; - this.containerKind = containerKind; - this.containerName = containerName; - } - return DefinitionInfo; - })(); - ts.DefinitionInfo = DefinitionInfo; - var TypeInfo = (function () { - function TypeInfo(memberName, docComment, fullSymbolName, kind, textSpan) { - this.memberName = memberName; - this.docComment = docComment; - this.fullSymbolName = fullSymbolName; - this.kind = kind; - this.textSpan = textSpan; - } - return TypeInfo; - })(); - ts.TypeInfo = TypeInfo; - var RenameInfo = (function () { - function RenameInfo(canRename, localizedErrorMessage, displayName, fullDisplayName, kind, kindModifiers, triggerSpan) { - this.canRename = canRename; - this.localizedErrorMessage = localizedErrorMessage; - this.displayName = displayName; - this.fullDisplayName = fullDisplayName; - this.kind = kind; - this.kindModifiers = kindModifiers; - this.triggerSpan = triggerSpan; - } - RenameInfo.CreateError = function (localizedErrorMessage) { - return new RenameInfo(false, localizedErrorMessage, null, null, null, null, null); - }; - RenameInfo.Create = function (displayName, fullDisplayName, kind, kindModifiers, triggerSpan) { - return new RenameInfo(true, null, displayName, fullDisplayName, kind, kindModifiers, triggerSpan); - }; - return RenameInfo; - })(); - ts.RenameInfo = RenameInfo; - var SignatureHelpParameter = (function () { - function SignatureHelpParameter(name, documentation, display, isOptional) { - this.name = name; - this.documentation = documentation; - this.display = display; - this.isOptional = isOptional; - } - return SignatureHelpParameter; - })(); - ts.SignatureHelpParameter = SignatureHelpParameter; - var SignatureHelpItem = (function () { - function SignatureHelpItem(isVariadic, prefix, suffix, separator, parameters, documentation) { - this.isVariadic = isVariadic; - this.prefix = prefix; - this.suffix = suffix; - this.separator = separator; - this.parameters = parameters; - this.documentation = documentation; - } - return SignatureHelpItem; - })(); - ts.SignatureHelpItem = SignatureHelpItem; - var SignatureHelpItems = (function () { - function SignatureHelpItems(items, applicableSpan, selectedItemIndex) { - this.items = items; - this.applicableSpan = applicableSpan; - this.selectedItemIndex = selectedItemIndex; - } - return SignatureHelpItems; - })(); - ts.SignatureHelpItems = SignatureHelpItems; - var SignatureHelpState = (function () { - function SignatureHelpState(argumentIndex, argumentCount) { - this.argumentIndex = argumentIndex; - this.argumentCount = argumentCount; - } - return SignatureHelpState; - })(); - ts.SignatureHelpState = SignatureHelpState; (function (OutputFileType) { OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; @@ -32032,6 +32591,7 @@ var ts; ScriptElementKind.typeParameterElement = "type parameter"; ScriptElementKind.primitiveType = "primitive type"; ScriptElementKind.label = "label"; + ScriptElementKind.alias = "alias"; return ScriptElementKind; })(); ts.ScriptElementKind = ScriptElementKind; @@ -32041,12 +32601,33 @@ var ts; ScriptElementKindModifier.none = ""; ScriptElementKindModifier.publicMemberModifier = "public"; ScriptElementKindModifier.privateMemberModifier = "private"; + ScriptElementKindModifier.protectedMemberModifier = "protected"; ScriptElementKindModifier.exportedModifier = "export"; ScriptElementKindModifier.ambientModifier = "declare"; ScriptElementKindModifier.staticModifier = "static"; return ScriptElementKindModifier; })(); ts.ScriptElementKindModifier = ScriptElementKindModifier; + var ClassificationTypeNames = (function () { + function ClassificationTypeNames() { + } + ClassificationTypeNames.comment = "comment"; + ClassificationTypeNames.identifier = "identifier"; + ClassificationTypeNames.keyword = "keyword"; + ClassificationTypeNames.numericLiteral = "number"; + ClassificationTypeNames.operator = "operator"; + ClassificationTypeNames.stringLiteral = "string"; + ClassificationTypeNames.whiteSpace = "whitespace"; + ClassificationTypeNames.text = "text"; + ClassificationTypeNames.punctuation = "punctuation"; + ClassificationTypeNames.className = "class name"; + ClassificationTypeNames.enumName = "enum name"; + ClassificationTypeNames.interfaceName = "interface name"; + ClassificationTypeNames.moduleName = "module name"; + ClassificationTypeNames.typeParameterName = "type parameter name"; + return ClassificationTypeNames; + })(); + ts.ClassificationTypeNames = ClassificationTypeNames; var MatchKind; (function (MatchKind) { MatchKind[MatchKind["none"] = 0] = "none"; @@ -32054,6 +32635,171 @@ var ts; MatchKind[MatchKind["substring"] = 2] = "substring"; MatchKind[MatchKind["prefix"] = 3] = "prefix"; })(MatchKind || (MatchKind = {})); + function displayPartsToString(displayParts) { + if (displayParts) { + return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join(""); + } + return ""; + } + ts.displayPartsToString = displayPartsToString; + var displayPartWriter = getDisplayPartWriter(); + function getDisplayPartWriter() { + var displayParts; + var lineStart; + var indent; + resetWriter(); + return { + displayParts: function () { return displayParts; }, + writeKind: writeKind, + writeSymbol: writeSymbol, + writeLine: writeLine, + increaseIndent: function () { + indent++; + }, + decreaseIndent: function () { + indent--; + }, + clear: resetWriter, + trackSymbol: function () { + } + }; + function writeIndent() { + if (lineStart) { + displayParts.push(displayPart(ts.getIndentString(indent), 16 /* space */)); + lineStart = false; + } + } + function writeKind(text, kind) { + writeIndent(); + displayParts.push(displayPart(text, kind)); + } + function writeSymbol(text, symbol) { + writeIndent(); + displayParts.push(symbolPart(text, symbol)); + } + function writeLine() { + displayParts.push(lineBreakPart()); + lineStart = true; + } + function resetWriter() { + displayParts = []; + lineStart = true; + indent = 0; + } + } + function displayPart(text, kind, symbol) { + return { + text: text, + kind: ts.SymbolDisplayPartKind[kind] + }; + } + function spacePart() { + return displayPart(" ", 16 /* space */); + } + ts.spacePart = spacePart; + function keywordPart(kind) { + return displayPart(ts.tokenToString(kind), 5 /* keyword */); + } + ts.keywordPart = keywordPart; + function punctuationPart(kind) { + return displayPart(ts.tokenToString(kind), 15 /* punctuation */); + } + ts.punctuationPart = punctuationPart; + function operatorPart(kind) { + return displayPart(ts.tokenToString(kind), 12 /* operator */); + } + ts.operatorPart = operatorPart; + function textPart(text) { + return displayPart(text, 17 /* text */); + } + ts.textPart = textPart; + function lineBreakPart() { + return displayPart("\n", 6 /* lineBreak */); + } + ts.lineBreakPart = lineBreakPart; + function isFirstDeclarationOfSymbolParameter(symbol) { + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 118 /* Parameter */; + } + function isLocalVariableOrFunction(symbol) { + if (symbol.parent) { + return false; + } + return ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 141 /* FunctionExpression */) { + return true; + } + if (declaration.kind !== 171 /* VariableDeclaration */ && declaration.kind !== 172 /* FunctionDeclaration */) { + return false; + } + for (var parent = declaration.parent; parent.kind !== 173 /* FunctionBlock */; parent = parent.parent) { + if (parent.kind === 182 /* SourceFile */ || parent.kind === 178 /* ModuleBlock */) { + return false; + } + } + return true; + }); + } + function symbolPart(text, symbol) { + return displayPart(text, displayPartKind(symbol), symbol); + function displayPartKind(symbol) { + var flags = symbol.flags; + if (flags & 1 /* Variable */) { + return isFirstDeclarationOfSymbolParameter(symbol) ? 13 /* parameterName */ : 9 /* localName */; + } + else if (flags & 2 /* Property */) { + return 14 /* propertyName */; + } + else if (flags & 4 /* EnumMember */) { + return 19 /* enumMemberName */; + } + else if (flags & 8 /* Function */) { + return 20 /* functionName */; + } + else if (flags & 16 /* Class */) { + return 1 /* className */; + } + else if (flags & 32 /* Interface */) { + return 4 /* interfaceName */; + } + else if (flags & 64 /* Enum */) { + return 2 /* enumName */; + } + else if (flags & ts.SymbolFlags.Module) { + return 11 /* moduleName */; + } + else if (flags & 2048 /* Method */) { + return 10 /* methodName */; + } + else if (flags & 262144 /* TypeParameter */) { + return 18 /* typeParameterName */; + } + return 17 /* text */; + } + } + ts.symbolPart = symbolPart; + function mapToDisplayParts(writeDisplayParts) { + writeDisplayParts(displayPartWriter); + var result = displayPartWriter.displayParts(); + displayPartWriter.clear(); + return result; + } + function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags) { + return mapToDisplayParts(function (writer) { + typechecker.writeType(type, writer, enclosingDeclaration, flags); + }); + } + ts.typeToDisplayParts = typeToDisplayParts; + function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags) { + return mapToDisplayParts(function (writer) { + typeChecker.writeSymbol(symbol, writer, enclosingDeclaration, meaning, flags); + }); + } + ts.symbolToDisplayParts = symbolToDisplayParts; + function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags) { + return mapToDisplayParts(function (writer) { + typechecker.writeSignature(signature, writer, enclosingDeclaration, flags); + }); + } function getDefaultCompilerOptions() { return { target: 1 /* ES5 */, @@ -32096,6 +32842,7 @@ var ts; CancellationTokenObject.None = new CancellationTokenObject(null); return CancellationTokenObject; })(); + ts.CancellationTokenObject = CancellationTokenObject; var HostCache = (function () { function HostCache(host) { this.host = host; @@ -32343,6 +33090,24 @@ var ts; }; } ts.createDocumentRegistry = createDocumentRegistry; + function getNodeModifiers(node) { + var flags = node.flags; + var result = []; + if (flags & 32 /* Private */) + result.push(ScriptElementKindModifier.privateMemberModifier); + if (flags & 64 /* Protected */) + result.push(ScriptElementKindModifier.protectedMemberModifier); + if (flags & 16 /* Public */) + result.push(ScriptElementKindModifier.publicMemberModifier); + if (flags & 128 /* Static */) + result.push(ScriptElementKindModifier.staticModifier); + if (flags & 1 /* Export */) + result.push(ScriptElementKindModifier.exportedModifier); + if (ts.isInAmbientContext(node)) + result.push(ScriptElementKindModifier.ambientModifier); + return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + } + ts.getNodeModifiers = getNodeModifiers; function getTargetLabel(referenceNode, labelName) { while (referenceNode) { if (referenceNode.kind === 164 /* LabeledStatement */ && referenceNode.label.text === labelName) { @@ -32405,13 +33170,14 @@ var ts; function isNameOfExternalModuleImportOrDeclaration(node) { return node.kind === 7 /* StringLiteral */ && ((node.parent.kind === 177 /* ModuleDeclaration */ && node.parent.name === node) || (node.parent.kind === 179 /* ImportDeclaration */ && node.parent.externalModuleName === node)); } - var SearchMeaning; - (function (SearchMeaning) { - SearchMeaning[SearchMeaning["None"] = 0x0] = "None"; - SearchMeaning[SearchMeaning["Value"] = 0x1] = "Value"; - SearchMeaning[SearchMeaning["Type"] = 0x2] = "Type"; - SearchMeaning[SearchMeaning["Namespace"] = 0x4] = "Namespace"; - })(SearchMeaning || (SearchMeaning = {})); + var SemanticMeaning; + (function (SemanticMeaning) { + SemanticMeaning[SemanticMeaning["None"] = 0x0] = "None"; + SemanticMeaning[SemanticMeaning["Value"] = 0x1] = "Value"; + SemanticMeaning[SemanticMeaning["Type"] = 0x2] = "Type"; + SemanticMeaning[SemanticMeaning["Namespace"] = 0x4] = "Namespace"; + SemanticMeaning[SemanticMeaning["All"] = SemanticMeaning.Value | SemanticMeaning.Type | SemanticMeaning.Namespace] = "All"; + })(SemanticMeaning || (SemanticMeaning = {})); var BreakContinueSearchType; (function (BreakContinueSearchType) { BreakContinueSearchType[BreakContinueSearchType["None"] = 0x0] = "None"; @@ -32440,11 +33206,14 @@ var ts; var cancellationToken = new CancellationTokenObject(host.getCancellationToken()); var activeCompletionSession; var writer = undefined; - if (!TypeScript.LocalizedDiagnosticMessages) { - TypeScript.LocalizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + if (!ts.localizedDiagnosticMessages) { + ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + } + function getCanonicalFileName(filename) { + return useCaseSensitivefilenames ? filename : filename.toLowerCase(); } function getSourceFile(filename) { - return ts.lookUp(sourceFilesByName, filename); + return ts.lookUp(sourceFilesByName, getCanonicalFileName(filename)); } function getFullTypeCheckChecker() { return fullTypeCheckChecker_doNotAccessDirectly || (fullTypeCheckChecker_doNotAccessDirectly = program.getTypeChecker(true)); @@ -32505,7 +33274,7 @@ var ts; var filename = oldSourceFiles[i].filename; if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) { documentRegistry.releaseDocument(filename, oldSettings); - delete sourceFilesByName[filename]; + delete sourceFilesByName[getCanonicalFileName(filename)]; } } } @@ -32529,7 +33298,7 @@ var ts; else { sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen); } - sourceFilesByName[filename] = sourceFile; + sourceFilesByName[getCanonicalFileName(filename)] = sourceFile; } program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost()); typeInfoResolver = program.getTypeChecker(false); @@ -32561,11 +33330,7 @@ var ts; var targetSourceFile = getSourceFile(filename); var allDiagnostics = checker.getDiagnostics(targetSourceFile); if (compilerOptions.declaration) { - var savedWriter = writer; - writer = function (filename, data, writeByteOrderMark) { - }; - allDiagnostics = allDiagnostics.concat(checker.emitFiles(targetSourceFile).errors); - writer = savedWriter; + allDiagnostics = allDiagnostics.concat(checker.getDeclarationDiagnostics(targetSourceFile)); } return allDiagnostics; } @@ -32573,9 +33338,13 @@ var ts; synchronizeHostData(); return program.getGlobalDiagnostics(); } - function getValidCompletionEntryDisplayName(displayName, target) { + function getValidCompletionEntryDisplayName(symbol, target) { + var displayName = symbol.getName(); if (displayName && displayName.length > 0) { var firstCharCode = displayName.charCodeAt(0); + if ((symbol.flags & ts.SymbolFlags.Namespace) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { + return undefined; + } if (displayName && displayName.length >= 2 && firstCharCode === displayName.charCodeAt(displayName.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { displayName = displayName.substring(1, displayName.length - 1); } @@ -32589,22 +33358,21 @@ var ts; } return undefined; } - function createCompletionEntry(symbol) { - var displayName = getValidCompletionEntryDisplayName(symbol.getName(), program.getCompilerOptions().target); + function createCompletionEntry(symbol, typeChecker) { + var displayName = getValidCompletionEntryDisplayName(symbol, program.getCompilerOptions().target); if (!displayName) { return undefined; } - var declarations = symbol.getDeclarations(); return { name: displayName, - kind: getSymbolKind(symbol), - kindModifiers: declarations ? getNodeModifiers(declarations[0]) : ScriptElementKindModifier.none + kind: getSymbolKind(symbol, typeChecker), + kindModifiers: getSymbolModifiers(symbol) }; } function getCompletionsAtPosition(filename, position, isMemberCompletion) { function getCompletionEntriesFromSymbols(symbols, session) { ts.forEach(symbols, function (symbol) { - var entry = createCompletionEntry(symbol); + var entry = createCompletionEntry(symbol, session.typeChecker); if (entry && !ts.lookUp(session.symbols, entry.name)) { session.entries.push(entry); session.symbols[entry.name] = symbol; @@ -32698,14 +33466,6 @@ var ts; function isPunctuation(kind) { return (ts.SyntaxKind.FirstPunctuation <= kind && kind <= ts.SyntaxKind.LastPunctuation); } - function isVisibleWithinClassDeclaration(symbol, containingClass) { - var declaration = symbol.declarations && symbol.declarations[0]; - if (declaration && (declaration.flags & 32 /* Private */)) { - var declarationClass = ts.getAncestor(declaration, 174 /* ClassDeclaration */); - return containingClass === declarationClass; - } - return true; - } function filterContextualMembersList(contextualMemberSymbols, existingMembers) { if (!existingMembers || existingMembers.length === 0) { return contextualMemberSymbols; @@ -32757,9 +33517,16 @@ var ts; isRightOfDot = true; node = node.parent.left; } - var mappedNode = getNodeAtPosition(sourceFile, TypeScript.end(node) - 1); - if (isPunctuation(mappedNode.kind)) { - mappedNode = mappedNode.parent; + var precedingToken = ts.findTokenOnLeftOfPosition(sourceFile, TypeScript.end(node)); + var mappedNode; + if (!precedingToken) { + mappedNode = sourceFile; + } + else if (isPunctuation(precedingToken.kind)) { + mappedNode = precedingToken.parent; + } + else { + mappedNode = precedingToken; } ts.Debug.assert(mappedNode, "Could not map a Fidelity node to an AST node"); activeCompletionSession = { @@ -32772,13 +33539,15 @@ var ts; }; if (isRightOfDot) { var symbols = []; - var containingClass = ts.getAncestor(mappedNode, 174 /* ClassDeclaration */); isMemberCompletion = true; if (mappedNode.kind === 59 /* Identifier */ || mappedNode.kind === 116 /* QualifiedName */ || mappedNode.kind === 135 /* PropertyAccess */) { var symbol = typeInfoResolver.getSymbolInfo(mappedNode); + if (symbol && symbol.flags & 4194304 /* Import */) { + symbol = typeInfoResolver.getAliasedSymbol(symbol); + } if (symbol && symbol.flags & ts.SymbolFlags.HasExports) { ts.forEachValue(symbol.exports, function (symbol) { - if (isVisibleWithinClassDeclaration(symbol, containingClass)) { + if (typeInfoResolver.isValidPropertyAccess((mappedNode.parent), symbol.name)) { symbols.push(symbol); } }); @@ -32788,7 +33557,7 @@ var ts; var apparentType = type && typeInfoResolver.getApparentType(type); if (apparentType) { ts.forEach(apparentType.getApparentProperties(), function (symbol) { - if (isVisibleWithinClassDeclaration(symbol, containingClass)) { + if (typeInfoResolver.isValidPropertyAccess((mappedNode.parent), symbol.name)) { symbols.push(symbol); } }); @@ -32813,7 +33582,7 @@ var ts; } else { isMemberCompletion = false; - var symbolMeanings = ts.SymbolFlags.Type | ts.SymbolFlags.Value | ts.SymbolFlags.Namespace; + var symbolMeanings = ts.SymbolFlags.Type | ts.SymbolFlags.Value | ts.SymbolFlags.Namespace | 4194304 /* Import */; var symbols = typeInfoResolver.getSymbolsInScope(mappedNode, symbolMeanings); getCompletionEntriesFromSymbols(symbols, activeCompletionSession); } @@ -32836,14 +33605,14 @@ var ts; if (symbol) { var type = session.typeChecker.getTypeOfSymbol(symbol); ts.Debug.assert(type, "Could not find type for symbol"); - var completionEntry = createCompletionEntry(symbol); + var completionEntry = createCompletionEntry(symbol, session.typeChecker); + var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), session.location, session.typeChecker, session.location); return { name: entryName, - kind: completionEntry.kind, + kind: displayPartsDocumentationsAndSymbolKind.symbolKind, kindModifiers: completionEntry.kindModifiers, - type: session.typeChecker.typeToString(type, session.location), - fullSymbolName: typeInfoResolver.symbolToString(symbol, session.location), - docComment: "" + displayParts: displayPartsDocumentationsAndSymbolKind.displayParts, + documentation: displayPartsDocumentationsAndSymbolKind.documentation }; } else { @@ -32851,38 +33620,11 @@ var ts; name: entryName, kind: ScriptElementKind.keyword, kindModifiers: ScriptElementKindModifier.none, - type: undefined, - fullSymbolName: entryName, - docComment: undefined + displayParts: [displayPart(entryName, 5 /* keyword */)], + documentation: undefined }; } } - function getNodeAtPosition(sourceFile, position) { - var current = sourceFile; - outer: while (true) { - for (var i = 0, n = current.getChildCount(); i < n; i++) { - var child = current.getChildAt(i); - if (child.getStart() <= position && position < child.getEnd()) { - current = child; - continue outer; - } - } - return current; - } - } - function getTokenAtPosition(sourceFile, position) { - var current = sourceFile; - outer: while (true) { - 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; - } - } function getContainerNode(node) { while (true) { node = node.parent; @@ -32904,20 +33646,42 @@ var ts; } } } - function getSymbolKind(symbol) { + function getSymbolKind(symbol, typeResolver) { var flags = typeInfoResolver.getRootSymbol(symbol).getFlags(); - if (flags & ts.SymbolFlags.Module) - return ScriptElementKind.moduleElement; if (flags & 16 /* Class */) return ScriptElementKind.classElement; - if (flags & 32 /* Interface */) - return ScriptElementKind.interfaceElement; if (flags & 64 /* Enum */) return ScriptElementKind.enumElement; - if (flags & 1 /* Variable */) + if (flags & 32 /* Interface */) + return ScriptElementKind.interfaceElement; + if (flags & 262144 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver); + if (result === ScriptElementKind.unknown) { + if (flags & 262144 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + if (flags & 4 /* EnumMember */) + return ScriptElementKind.variableElement; + if (flags & 4194304 /* Import */) + return ScriptElementKind.alias; + } + return result; + } + function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver) { + if (typeResolver.isUndefinedSymbol(symbol)) { return ScriptElementKind.variableElement; + } + if (typeResolver.isArgumentsSymbol(symbol)) { + return ScriptElementKind.localVariableElement; + } + if (flags & 1 /* Variable */) { + if (isFirstDeclarationOfSymbolParameter(symbol)) { + return ScriptElementKind.parameterElement; + } + return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement; + } if (flags & 8 /* Function */) - return ScriptElementKind.functionElement; + return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement; if (flags & 8192 /* GetAccessor */) return ScriptElementKind.memberGetAccessorElement; if (flags & 16384 /* SetAccessor */) @@ -32926,18 +33690,8 @@ var ts; return ScriptElementKind.memberFunctionElement; if (flags & 2 /* Property */) return ScriptElementKind.memberVariableElement; - if (flags & 131072 /* IndexSignature */) - return ScriptElementKind.indexSignatureElement; - if (flags & 65536 /* ConstructSignature */) - return ScriptElementKind.constructSignatureElement; - if (flags & 32768 /* CallSignature */) - return ScriptElementKind.callSignatureElement; if (flags & 4096 /* Constructor */) return ScriptElementKind.constructorImplementationElement; - if (flags & 262144 /* TypeParameter */) - return ScriptElementKind.typeParameterElement; - if (flags & 4 /* EnumMember */) - return ScriptElementKind.variableElement; return ScriptElementKind.unknown; } function getTypeKind(type) { @@ -32995,39 +33749,308 @@ var ts; return ScriptElementKind.unknown; } } - function getNodeModifiers(node) { - var flags = node.flags; - var result = []; - if (flags & 32 /* Private */) - result.push(ScriptElementKindModifier.privateMemberModifier); - if (flags & 16 /* Public */) - result.push(ScriptElementKindModifier.publicMemberModifier); - if (flags & 128 /* Static */) - result.push(ScriptElementKindModifier.staticModifier); - if (flags & 1 /* Export */) - result.push(ScriptElementKindModifier.exportedModifier); - if (ts.isInAmbientContext(node)) - result.push(ScriptElementKindModifier.ambientModifier); - return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + function getSymbolModifiers(symbol) { + return symbol && symbol.declarations && symbol.declarations.length > 0 ? getNodeModifiers(symbol.declarations[0]) : ScriptElementKindModifier.none; } - function getTypeAtPosition(fileName, position) { + function getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, enclosingDeclaration, typeResolver, location) { + var displayParts = []; + var documentation; + var symbolFlags = typeResolver.getRootSymbol(symbol).flags; + var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, symbolFlags, typeResolver); + var hasAddedSymbolInfo; + if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 16 /* Class */ || symbolFlags & 4194304 /* Import */) { + if (symbolKind === ScriptElementKind.memberGetAccessorElement || symbolKind === ScriptElementKind.memberSetAccessorElement) { + symbolKind = ScriptElementKind.memberVariableElement; + } + var type = typeResolver.getTypeOfSymbol(symbol); + if (type) { + if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { + var callExpression; + if (location.parent.kind === 135 /* PropertyAccess */ && location.parent.right === location) { + location = location.parent; + } + callExpression = location.parent; + var candidateSignatures = []; + signature = typeResolver.getResolvedSignature(callExpression, candidateSignatures); + if (!signature && candidateSignatures.length) { + signature = candidateSignatures[0]; + } + var useConstructSignatures = callExpression.kind === 138 /* NewExpression */ || callExpression.func.kind === 85 /* SuperKeyword */; + var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); + if (!ts.contains(allSignatures, signature.target || signature)) { + signature = allSignatures.length ? allSignatures[0] : undefined; + } + if (signature) { + if (useConstructSignatures && (symbolFlags & 16 /* Class */)) { + symbolKind = ScriptElementKind.constructorImplementationElement; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); + } + else if (symbolFlags & 4194304 /* Import */) { + symbolKind = ScriptElementKind.alias; + displayParts.push(punctuationPart(11 /* OpenParenToken */)); + displayParts.push(textPart(symbolKind)); + displayParts.push(punctuationPart(12 /* CloseParenToken */)); + displayParts.push(spacePart()); + if (useConstructSignatures) { + displayParts.push(keywordPart(82 /* NewKeyword */)); + displayParts.push(spacePart()); + } + addFullSymbolName(symbol); + } + else { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + } + switch (symbolKind) { + case ScriptElementKind.memberVariableElement: + case ScriptElementKind.variableElement: + case ScriptElementKind.parameterElement: + case ScriptElementKind.localVariableElement: + displayParts.push(punctuationPart(46 /* ColonToken */)); + displayParts.push(spacePart()); + if (useConstructSignatures) { + displayParts.push(keywordPart(82 /* NewKeyword */)); + displayParts.push(spacePart()); + } + if (!(type.flags & 16384 /* Anonymous */)) { + displayParts.push.apply(displayParts, symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, undefined, 1 /* WriteTypeParametersOrArguments */)); + } + addSignatureDisplayParts(signature, allSignatures, 8 /* WriteArrowStyleSignature */); + break; + default: + addSignatureDisplayParts(signature, allSignatures); + } + hasAddedSymbolInfo = true; + } + } + else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & ts.SymbolFlags.Accessor)) || (location.kind === 107 /* ConstructorKeyword */ && location.parent.kind === 121 /* Constructor */)) { + var signature; + var functionDeclaration = location.parent; + var allSignatures = functionDeclaration.kind === 121 /* Constructor */ ? type.getConstructSignatures() : type.getCallSignatures(); + if (!typeResolver.isImplementationOfOverload(functionDeclaration)) { + signature = typeResolver.getSignatureFromDeclaration(functionDeclaration); + } + else { + signature = allSignatures[0]; + } + if (functionDeclaration.kind === 121 /* Constructor */) { + addPrefixForAnyFunctionOrVar(type.symbol, ScriptElementKind.constructorImplementationElement); + } + else { + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 124 /* CallSignature */ && !(type.symbol.flags & 512 /* TypeLiteral */ || type.symbol.flags & 1024 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind); + } + addSignatureDisplayParts(signature, allSignatures); + hasAddedSymbolInfo = true; + } + } + } + if (symbolFlags & 16 /* Class */ && !hasAddedSymbolInfo) { + displayParts.push(keywordPart(63 /* ClassKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + if (symbolFlags & 32 /* Interface */) { + addNewLineIfDisplayPartsExist(); + displayParts.push(keywordPart(97 /* InterfaceKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + if (symbolFlags & 64 /* Enum */) { + addNewLineIfDisplayPartsExist(); + displayParts.push(keywordPart(71 /* EnumKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + } + if (symbolFlags & ts.SymbolFlags.Module) { + addNewLineIfDisplayPartsExist(); + displayParts.push(keywordPart(110 /* ModuleKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + } + if (symbolFlags & 262144 /* TypeParameter */) { + addNewLineIfDisplayPartsExist(); + displayParts.push(punctuationPart(11 /* OpenParenToken */)); + displayParts.push(textPart("type parameter")); + displayParts.push(punctuationPart(12 /* CloseParenToken */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + displayParts.push(spacePart()); + displayParts.push(keywordPart(80 /* InKeyword */)); + displayParts.push(spacePart()); + if (symbol.parent) { + addFullSymbolName(symbol.parent, enclosingDeclaration); + writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); + } + else { + var signatureDeclaration = ts.getDeclarationOfKind(symbol, 117 /* TypeParameter */).parent; + var signature = typeResolver.getSignatureFromDeclaration(signatureDeclaration); + if (signatureDeclaration.kind === 125 /* ConstructSignature */) { + displayParts.push(keywordPart(82 /* NewKeyword */)); + displayParts.push(spacePart()); + } + else if (signatureDeclaration.kind !== 124 /* CallSignature */ && signatureDeclaration.name) { + addFullSymbolName(signatureDeclaration.symbol); + } + displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */)); + } + } + if (symbolFlags & 4 /* EnumMember */) { + addPrefixForAnyFunctionOrVar(symbol, "enum member"); + var declaration = symbol.declarations[0]; + if (declaration.kind === 181 /* EnumMember */) { + var constantValue = typeResolver.getEnumMemberValue(declaration); + if (constantValue !== undefined) { + displayParts.push(spacePart()); + displayParts.push(operatorPart(47 /* EqualsToken */)); + displayParts.push(spacePart()); + displayParts.push(displayPart(constantValue.toString(), 7 /* numericLiteral */)); + } + } + } + if (symbolFlags & 4194304 /* Import */) { + addNewLineIfDisplayPartsExist(); + displayParts.push(keywordPart(79 /* ImportKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + displayParts.push(spacePart()); + displayParts.push(punctuationPart(47 /* EqualsToken */)); + displayParts.push(spacePart()); + ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 179 /* ImportDeclaration */) { + var importDeclaration = declaration; + if (importDeclaration.externalModuleName) { + displayParts.push(keywordPart(111 /* RequireKeyword */)); + displayParts.push(punctuationPart(11 /* OpenParenToken */)); + displayParts.push(displayPart(ts.getTextOfNode(importDeclaration.externalModuleName), 8 /* stringLiteral */)); + displayParts.push(punctuationPart(12 /* CloseParenToken */)); + } + else { + var internalAliasSymbol = typeResolver.getSymbolInfo(importDeclaration.entityName); + addFullSymbolName(internalAliasSymbol, enclosingDeclaration); + } + return true; + } + }); + } + if (!hasAddedSymbolInfo) { + if (symbolKind !== ScriptElementKind.unknown) { + if (type) { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + if (symbolKind === ScriptElementKind.memberVariableElement || symbolFlags & 1 /* Variable */ || symbolKind === ScriptElementKind.localVariableElement) { + displayParts.push(punctuationPart(46 /* ColonToken */)); + displayParts.push(spacePart()); + if (type.symbol && type.symbol.flags & 262144 /* TypeParameter */) { + var typeParameterParts = mapToDisplayParts(function (writer) { + typeResolver.writeTypeParameter(type, writer, enclosingDeclaration); + }); + displayParts.push.apply(displayParts, typeParameterParts); + } + else { + displayParts.push.apply(displayParts, typeToDisplayParts(typeResolver, type, enclosingDeclaration)); + } + } + else if (symbolFlags & 8 /* Function */ || symbolFlags & 2048 /* Method */ || symbolFlags & 4096 /* Constructor */ || symbolFlags & ts.SymbolFlags.Signature || symbolFlags & ts.SymbolFlags.Accessor) { + var allSignatures = type.getCallSignatures(); + addSignatureDisplayParts(allSignatures[0], allSignatures); + } + } + } + else { + symbolKind = getSymbolKind(symbol, typeResolver); + } + } + if (!documentation) { + documentation = symbol.getDocumentationComment(); + } + return { displayParts: displayParts, documentation: documentation, symbolKind: symbolKind }; + function addNewLineIfDisplayPartsExist() { + if (displayParts.length) { + displayParts.push(lineBreakPart()); + } + } + function addFullSymbolName(symbol, enclosingDeclaration) { + var fullSymbolDisplayParts = symbolToDisplayParts(typeResolver, symbol, enclosingDeclaration || sourceFile, undefined, 1 /* WriteTypeParametersOrArguments */ | 2 /* UseOnlyExternalAliasing */); + displayParts.push.apply(displayParts, fullSymbolDisplayParts); + } + function addPrefixForAnyFunctionOrVar(symbol, symbolKind) { + addNewLineIfDisplayPartsExist(); + if (symbolKind) { + displayParts.push(punctuationPart(11 /* OpenParenToken */)); + displayParts.push(textPart(symbolKind)); + displayParts.push(punctuationPart(12 /* CloseParenToken */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + } + } + function addSignatureDisplayParts(signature, allSignatures, flags) { + displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | 32 /* WriteTypeArgumentsOfSignature */)); + if (allSignatures.length > 1) { + displayParts.push(spacePart()); + displayParts.push(punctuationPart(11 /* OpenParenToken */)); + displayParts.push(operatorPart(28 /* PlusToken */)); + displayParts.push(displayPart((allSignatures.length - 1).toString(), 7 /* numericLiteral */)); + displayParts.push(spacePart()); + displayParts.push(textPart(allSignatures.length === 2 ? "overload" : "overloads")); + displayParts.push(punctuationPart(12 /* CloseParenToken */)); + } + documentation = signature.getDocumentationComment(); + } + function writeTypeParametersOfSymbol(symbol, enclosingDeclaration) { + var typeParameterParts = mapToDisplayParts(function (writer) { + typeResolver.writeTypeParametersOfSymbol(symbol, writer, enclosingDeclaration); + }); + displayParts.push.apply(displayParts, typeParameterParts); + } + } + function getQuickInfoAtPosition(fileName, position) { synchronizeHostData(); fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } var symbol = typeInfoResolver.getSymbolInfo(node); - var type = symbol && typeInfoResolver.getTypeOfSymbol(symbol); - if (type) { - return new TypeInfo(new TypeScript.MemberNameString(typeInfoResolver.typeToString(type)), "", typeInfoResolver.symbolToString(symbol, getContainerNode(node)), getSymbolKind(symbol), TypeScript.TextSpan.fromBounds(node.pos, node.end)); + if (!symbol) { + switch (node.kind) { + case 59 /* Identifier */: + case 135 /* PropertyAccess */: + case 116 /* QualifiedName */: + case 87 /* ThisKeyword */: + case 85 /* SuperKeyword */: + var type = typeInfoResolver.getTypeOfNode(node); + if (type) { + return { + kind: ScriptElementKind.unknown, + kindModifiers: ScriptElementKindModifier.none, + textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()), + displayParts: typeToDisplayParts(typeInfoResolver, type, getContainerNode(node)), + documentation: type.symbol ? type.symbol.getDocumentationComment() : undefined + }; + } + } + return undefined; } - return undefined; + var displayPartsDocumentationsAndKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, getContainerNode(node), typeInfoResolver, node); + return { + kind: displayPartsDocumentationsAndKind.symbolKind, + kindModifiers: getSymbolModifiers(symbol), + textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()), + displayParts: displayPartsDocumentationsAndKind.displayParts, + documentation: displayPartsDocumentationsAndKind.documentation + }; } function getDefinitionAtPosition(filename, position) { function getDefinitionInfo(node, symbolKind, symbolName, containerName) { - return new DefinitionInfo(node.getSourceFile().filename, TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()), symbolKind, symbolName, undefined, containerName); + return { + fileName: node.getSourceFile().filename, + textSpan: TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()), + kind: symbolKind, + name: symbolName, + containerKind: undefined, + containerName: containerName + }; } function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) { var declarations = []; @@ -33068,7 +34091,7 @@ var ts; synchronizeHostData(); filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } @@ -33079,9 +34102,17 @@ var ts; } var comment = ts.forEach(sourceFile.referencedFiles, function (r) { return (r.pos <= position && position < r.end) ? r : undefined; }); if (comment) { - var targetFilename = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(filename), comment.filename)); + var targetFilename = ts.isRootedDiskPath(comment.filename) ? comment.filename : ts.combinePaths(ts.getDirectoryPath(filename), comment.filename); + targetFilename = ts.normalizePath(targetFilename); if (program.getSourceFile(targetFilename)) { - return [new DefinitionInfo(targetFilename, TypeScript.TextSpan.fromBounds(0, 0), ScriptElementKind.scriptElement, comment.filename, undefined, undefined)]; + return [{ + fileName: targetFilename, + textSpan: TypeScript.TextSpan.fromBounds(0, 0), + kind: ScriptElementKind.scriptElement, + name: comment.filename, + containerName: undefined, + containerKind: undefined + }]; } return undefined; } @@ -33091,11 +34122,10 @@ var ts; } var result = []; var declarations = symbol.getDeclarations(); - var symbolName = typeInfoResolver.symbolToString(symbol, node); - var symbolKind = getSymbolKind(symbol); + var symbolName = typeInfoResolver.symbolToString(symbol); + var symbolKind = getSymbolKind(symbol, typeInfoResolver); var containerSymbol = symbol.parent; var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : ""; - var containerKind = containerSymbol ? getSymbolKind(symbol) : ""; if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) && !tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) { ts.forEach(declarations, function (declaration) { result.push(getDefinitionInfo(declaration, symbolKind, symbolName, containerName)); @@ -33107,12 +34137,12 @@ var ts; synchronizeHostData(); filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingWord(sourceFile, position); if (!node) { return undefined; } if (node.kind === 59 /* Identifier */ || node.kind === 87 /* ThisKeyword */ || node.kind === 85 /* SuperKeyword */ || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { - return getReferencesForNode(node, [sourceFile]); + return getReferencesForNode(node, [sourceFile], false, false); } switch (node.kind) { case 78 /* IfKeyword */: @@ -33126,6 +34156,11 @@ var ts; return getReturnOccurrences(node.parent); } break; + case 88 /* ThrowKeyword */: + if (hasKind(node.parent, 165 /* ThrowStatement */)) { + return getThrowOccurrences(node.parent); + } + break; case 90 /* TryKeyword */: case 62 /* CatchKeyword */: case 75 /* FinallyKeyword */: @@ -33166,6 +34201,11 @@ var ts; return getConstructorOccurrences(node.parent); } break; + case 109 /* GetKeyword */: + case 113 /* SetKeyword */: + if (hasKind(node.parent, 122 /* GetAccessor */) || hasKind(node.parent, 123 /* SetAccessor */)) { + return getGetAndSetOccurrences(node.parent); + } } return undefined; function getIfElseOccurrences(ifStatement) { @@ -33199,7 +34239,11 @@ var ts; } } if (shouldHighlightNextKeyword) { - result.push(new ReferenceEntry(filename, TypeScript.TextSpan.fromBounds(elseKeyword.getStart(), ifKeyword.end), false)); + result.push({ + fileName: filename, + textSpan: TypeScript.TextSpan.fromBounds(elseKeyword.getStart(), ifKeyword.end), + isWriteAccess: false + }); i++; continue; } @@ -33217,8 +34261,70 @@ var ts; ts.forEachReturnStatement(func.body, function (returnStatement) { pushKeywordIf(keywords, returnStatement.getFirstToken(), 84 /* ReturnKeyword */); }); + ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) { + pushKeywordIf(keywords, throwStatement.getFirstToken(), 88 /* ThrowKeyword */); + }); return ts.map(keywords, getReferenceEntryFromNode); } + function getThrowOccurrences(throwStatement) { + var owner = getThrowStatementOwner(throwStatement); + if (!owner) { + return undefined; + } + var keywords = []; + ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) { + pushKeywordIf(keywords, throwStatement.getFirstToken(), 88 /* ThrowKeyword */); + }); + if (owner.kind === 173 /* FunctionBlock */) { + ts.forEachReturnStatement(owner, function (returnStatement) { + pushKeywordIf(keywords, returnStatement.getFirstToken(), 84 /* ReturnKeyword */); + }); + } + return ts.map(keywords, getReferenceEntryFromNode); + } + function aggregateOwnedThrowStatements(node) { + var statementAccumulator = []; + aggregate(node); + return statementAccumulator; + function aggregate(node) { + if (node.kind === 165 /* ThrowStatement */) { + statementAccumulator.push(node); + } + else if (node.kind === 166 /* TryStatement */) { + var tryStatement = node; + if (tryStatement.catchBlock) { + aggregate(tryStatement.catchBlock); + } + else { + aggregate(tryStatement.tryBlock); + } + if (tryStatement.finallyBlock) { + aggregate(tryStatement.finallyBlock); + } + } + else if (!ts.isAnyFunction(node)) { + ts.forEachChild(node, aggregate); + } + } + ; + } + function getThrowStatementOwner(throwStatement) { + var child = throwStatement; + while (child.parent) { + var parent = child.parent; + if (parent.kind === 173 /* FunctionBlock */ || parent.kind === 182 /* SourceFile */) { + return parent; + } + if (parent.kind === 166 /* TryStatement */) { + var tryStatement = parent; + if (tryStatement.tryBlock === child && tryStatement.catchBlock) { + return child; + } + } + child = parent; + } + return undefined; + } function getTryCatchFinallyOccurrences(tryStatement) { var keywords = []; pushKeywordIf(keywords, tryStatement.getFirstToken(), 90 /* TryKeyword */); @@ -33332,6 +34438,18 @@ var ts; }); return ts.map(keywords, getReferenceEntryFromNode); } + function getGetAndSetOccurrences(accessorDeclaration) { + var keywords = []; + tryPushAccessorKeyword(accessorDeclaration.symbol, 122 /* GetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 123 /* SetAccessor */); + return ts.map(keywords, getReferenceEntryFromNode); + function tryPushAccessorKeyword(accessorSymbol, accessorKind) { + var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind); + if (accessor) { + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 109 /* GetKeyword */, 113 /* SetKeyword */); }); + } + } + } function hasKind(node, kind) { return node !== undefined && node.kind === kind; } @@ -33350,20 +34468,27 @@ var ts; return false; } } - function getReferencesAtPosition(filename, position) { + function findRenameLocations(fileName, position, findInStrings, findInComments) { + return findReferences(fileName, position, findInStrings, findInComments); + } + function getReferencesAtPosition(fileName, position) { + return findReferences(fileName, position, false, false); + } + function findReferences(fileName, position, findInStrings, findInComments) { synchronizeHostData(); - filename = TypeScript.switchToForwardSlashes(filename); - var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getSourceFile(fileName); + var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } if (node.kind !== 59 /* Identifier */ && !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && !isNameOfExternalModuleImportOrDeclaration(node)) { return undefined; } - return getReferencesForNode(node, program.getSourceFiles()); + ts.Debug.assert(node.kind === 59 /* Identifier */ || node.kind === 6 /* NumericLiteral */ || node.kind === 7 /* StringLiteral */); + return getReferencesForNode(node, program.getSourceFiles(), findInStrings, findInComments); } - function getReferencesForNode(node, sourceFiles) { + function getReferencesForNode(node, sourceFiles, findInStrings, findInComments) { if (isLabelName(node)) { if (isJumpStatementTarget(node)) { var labelDefinition = getTargetLabel(node.parent, node.text); @@ -33392,14 +34517,14 @@ var ts; var scope = getSymbolScope(symbol); if (scope) { result = []; - getReferencesInNode(scope, symbol, symbolName, node, searchMeaning, result); + getReferencesInNode(scope, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result); } else { ts.forEach(sourceFiles, function (sourceFile) { cancellationToken.throwIfCancellationRequested(); if (ts.lookUp(sourceFile.identifiers, symbolName)) { result = result || []; - getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, result); + getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result); } }); } @@ -33471,7 +34596,7 @@ var ts; var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, labelName, container.getStart(), container.getEnd()); ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingWord(sourceFile, position); if (!node || node.getWidth() !== labelName.length) { return; } @@ -33500,15 +34625,23 @@ var ts; } return false; } - function getReferencesInNode(container, searchSymbol, searchText, searchLocation, searchMeaning, result) { + function getReferencesInNode(container, searchSymbol, searchText, searchLocation, searchMeaning, findInStrings, findInComments, result) { var sourceFile = container.getSourceFile(); + var tripleSlashDirectivePrefixRegex = /^\/\/\/\s* token.getStart(); + } + function isInComment(position) { + var token = ts.getTokenAtPosition(sourceFile, position); + if (token && position < token.getStart()) { + var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); + return ts.forEach(commentRanges, function (c) { + if (c.pos < position && position < c.end) { + var commentText = sourceFile.text.substring(c.pos, c.end); + if (!tripleSlashDirectivePrefixRegex.test(commentText)) { + return true; + } + } + }); + } + return false; + } } function getReferencesForSuperKeyword(superKeyword) { var searchSpaceNode = ts.getSuperContainer(superKeyword); @@ -33547,7 +34699,7 @@ var ts; var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "super", searchSpaceNode.getStart(), searchSpaceNode.getEnd()); ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingWord(sourceFile, position); if (!node || node.kind !== 85 /* SuperKeyword */) { return; } @@ -33596,7 +34748,7 @@ var ts; function getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result) { ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingWord(sourceFile, position); if (!node || node.kind !== 87 /* ThisKeyword */) { return; } @@ -33639,7 +34791,7 @@ var ts; return result; } function getPropertySymbolsFromBaseTypes(symbol, propertyName, result) { - if (symbol.flags & (16 /* Class */ | 32 /* Interface */)) { + if (symbol && symbol.flags & (16 /* Class */ | 32 /* Interface */)) { ts.forEach(symbol.getDeclarations(), function (declaration) { if (declaration.kind === 174 /* ClassDeclaration */) { getPropertySymbolFromTypeReference(declaration.baseType); @@ -33653,12 +34805,13 @@ var ts; return; function getPropertySymbolFromTypeReference(typeReference) { if (typeReference) { - var typeReferenceSymbol = typeInfoResolver.getSymbolInfo(typeReference.typeName); - if (typeReferenceSymbol) { - var propertySymbol = typeReferenceSymbol.members[propertyName]; - if (propertySymbol) - result.push(typeReferenceSymbol.members[propertyName]); - getPropertySymbolsFromBaseTypes(typeReferenceSymbol, propertyName, result); + var type = typeInfoResolver.getTypeOfNode(typeReference); + if (type) { + var propertySymbol = typeInfoResolver.getPropertyOfType(type, propertyName); + if (propertySymbol) { + result.push(propertySymbol); + } + getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result); } } } @@ -33691,93 +34844,6 @@ var ts; } return undefined; } - function getMeaningFromDeclaration(node) { - switch (node.kind) { - case 118 /* Parameter */: - case 171 /* VariableDeclaration */: - case 119 /* Property */: - case 134 /* PropertyAssignment */: - case 181 /* EnumMember */: - case 120 /* Method */: - case 121 /* Constructor */: - case 122 /* GetAccessor */: - case 123 /* SetAccessor */: - case 172 /* FunctionDeclaration */: - case 141 /* FunctionExpression */: - case 142 /* ArrowFunction */: - case 168 /* CatchBlock */: - return 1 /* Value */; - case 117 /* TypeParameter */: - case 175 /* InterfaceDeclaration */: - case 129 /* TypeLiteral */: - return 2 /* Type */; - case 174 /* ClassDeclaration */: - case 176 /* EnumDeclaration */: - return 1 /* Value */ | 2 /* Type */; - case 177 /* ModuleDeclaration */: - if (node.name.kind === 7 /* StringLiteral */) { - return 4 /* Namespace */ | 1 /* Value */; - } - else if (ts.isInstantiated(node)) { - return 4 /* Namespace */ | 1 /* Value */; - } - else { - return 4 /* Namespace */; - } - break; - case 179 /* ImportDeclaration */: - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; - } - ts.Debug.fail("Unknown declaration type"); - } - function isTypeReference(node) { - if (node.parent.kind === 116 /* QualifiedName */ && node.parent.right === node) - node = node.parent; - return node.parent.kind === 127 /* TypeReference */; - } - function isNamespaceReference(node) { - var root = node; - var isLastClause = true; - if (root.parent.kind === 116 /* QualifiedName */) { - while (root.parent && root.parent.kind === 116 /* QualifiedName */) - root = root.parent; - isLastClause = root.right === node; - } - return root.parent.kind === 127 /* TypeReference */ && !isLastClause; - } - function isInRightSideOfImport(node) { - while (node.parent.kind === 116 /* QualifiedName */) { - node = node.parent; - } - return node.parent.kind === 179 /* ImportDeclaration */ && node.parent.entityName === node; - } - function getMeaningFromRightHandSideOfImport(node) { - ts.Debug.assert(node.kind === 59 /* Identifier */); - if (node.parent.kind === 116 /* QualifiedName */ && node.parent.right === node && node.parent.parent.kind === 179 /* ImportDeclaration */) { - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; - } - return 4 /* Namespace */; - } - function getMeaningFromLocation(node) { - if (node.parent.kind === 180 /* ExportAssignment */) { - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; - } - else if (isInRightSideOfImport(node)) { - return getMeaningFromRightHandSideOfImport(node); - } - else if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { - return getMeaningFromDeclaration(node.parent); - } - else if (isTypeReference(node)) { - return 2 /* Type */; - } - else if (isNamespaceReference(node)) { - return 4 /* Namespace */; - } - else { - return 1 /* Value */; - } - } function getIntersectingMeaningFromDeclarations(meaning, declarations) { if (declarations) { do { @@ -33800,7 +34866,11 @@ var ts; start += 1; end -= 1; } - return new ReferenceEntry(node.getSourceFile().filename, TypeScript.TextSpan.fromBounds(start, end), isWriteAccess(node)); + return { + fileName: node.getSourceFile().filename, + textSpan: TypeScript.TextSpan.fromBounds(start, end), + isWriteAccess: isWriteAccess(node) + }; } function isWriteAccess(node) { if (node.kind === 59 /* Identifier */ && ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { @@ -33886,7 +34956,7 @@ var ts; filename = TypeScript.switchToForwardSlashes(filename); var compilerOptions = program.getCompilerOptions(); var targetSourceFile = program.getSourceFile(filename); - var emitToSingleFile = ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions); + var shouldEmitToOwnFile = ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions); var emitDeclaration = compilerOptions.declaration; var emitOutput = { outputFiles: [], @@ -33902,7 +34972,7 @@ var ts; writer = getEmitOutputWriter; var syntacticDiagnostics = []; var containSyntacticErrors = false; - if (emitToSingleFile) { + if (shouldEmitToOwnFile) { containSyntacticErrors = containErrors(program.getDiagnostics(targetSourceFile)); } else { @@ -33918,11 +34988,152 @@ var ts; writer = undefined; return emitOutput; } - var emitFilesResult = emitToSingleFile ? getFullTypeCheckChecker().emitFiles(targetSourceFile) : getFullTypeCheckChecker().emitFiles(); + var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile); emitOutput.emitOutputStatus = emitFilesResult.emitResultStatus; writer = undefined; return emitOutput; } + function getMeaningFromDeclaration(node) { + switch (node.kind) { + case 118 /* Parameter */: + case 171 /* VariableDeclaration */: + case 119 /* Property */: + case 134 /* PropertyAssignment */: + case 181 /* EnumMember */: + case 120 /* Method */: + case 121 /* Constructor */: + case 122 /* GetAccessor */: + case 123 /* SetAccessor */: + case 172 /* FunctionDeclaration */: + case 141 /* FunctionExpression */: + case 142 /* ArrowFunction */: + case 168 /* CatchBlock */: + return 1 /* Value */; + case 117 /* TypeParameter */: + case 175 /* InterfaceDeclaration */: + case 129 /* TypeLiteral */: + return 2 /* Type */; + case 174 /* ClassDeclaration */: + case 176 /* EnumDeclaration */: + return 1 /* Value */ | 2 /* Type */; + case 177 /* ModuleDeclaration */: + if (node.name.kind === 7 /* StringLiteral */) { + return 4 /* Namespace */ | 1 /* Value */; + } + else if (ts.isInstantiated(node)) { + return 4 /* Namespace */ | 1 /* Value */; + } + else { + return 4 /* Namespace */; + } + break; + case 179 /* ImportDeclaration */: + return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + } + ts.Debug.fail("Unknown declaration type"); + } + function isTypeReference(node) { + if (node.parent.kind === 116 /* QualifiedName */ && node.parent.right === node) + node = node.parent; + return node.parent.kind === 127 /* TypeReference */; + } + function isNamespaceReference(node) { + var root = node; + var isLastClause = true; + if (root.parent.kind === 116 /* QualifiedName */) { + while (root.parent && root.parent.kind === 116 /* QualifiedName */) + root = root.parent; + isLastClause = root.right === node; + } + return root.parent.kind === 127 /* TypeReference */ && !isLastClause; + } + function isInRightSideOfImport(node) { + while (node.parent.kind === 116 /* QualifiedName */) { + node = node.parent; + } + return node.parent.kind === 179 /* ImportDeclaration */ && node.parent.entityName === node; + } + function getMeaningFromRightHandSideOfImport(node) { + ts.Debug.assert(node.kind === 59 /* Identifier */); + if (node.parent.kind === 116 /* QualifiedName */ && node.parent.right === node && node.parent.parent.kind === 179 /* ImportDeclaration */) { + return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + } + return 4 /* Namespace */; + } + function getMeaningFromLocation(node) { + if (node.parent.kind === 180 /* ExportAssignment */) { + return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + } + else if (isInRightSideOfImport(node)) { + return getMeaningFromRightHandSideOfImport(node); + } + else if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + return getMeaningFromDeclaration(node.parent); + } + else if (isTypeReference(node)) { + return 2 /* Type */; + } + else if (isNamespaceReference(node)) { + return 4 /* Namespace */; + } + else { + return 1 /* Value */; + } + } + function getSignatureHelpItems(fileName, position) { + synchronizeHostData(); + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getSourceFile(fileName); + return ts.SignatureHelp.getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken); + } + function getSignatureAtPosition(filename, position) { + var signatureHelpItems = getSignatureHelpItems(filename, position); + if (!signatureHelpItems) { + return undefined; + } + var currentArgumentState = { argumentIndex: signatureHelpItems.argumentIndex, argumentCount: signatureHelpItems.argumentCount }; + var formalSignatures = []; + ts.forEach(signatureHelpItems.items, function (signature) { + var signatureInfoString = displayPartsToString(signature.prefixDisplayParts); + var parameters = []; + if (signature.parameters) { + for (var i = 0, n = signature.parameters.length; i < n; i++) { + var parameter = signature.parameters[i]; + if (i) { + signatureInfoString += displayPartsToString(signature.separatorDisplayParts); + } + var start = signatureInfoString.length; + signatureInfoString += displayPartsToString(parameter.displayParts); + var end = signatureInfoString.length - 1; + parameters.push({ + name: parameter.name, + isVariable: i === n - 1 && signature.isVariadic, + docComment: displayPartsToString(parameter.documentation), + minChar: start, + limChar: end + }); + } + } + signatureInfoString += displayPartsToString(signature.suffixDisplayParts); + formalSignatures.push({ + signatureInfo: signatureInfoString, + docComment: displayPartsToString(signature.documentation), + parameters: parameters, + typeParameters: [] + }); + }); + var actualSignature = { + parameterMinChar: signatureHelpItems.applicableSpan.start(), + parameterLimChar: signatureHelpItems.applicableSpan.end(), + currentParameterIsTypeParameter: false, + currentParameter: currentArgumentState.argumentIndex + }; + return { + actual: actualSignature, + formal: formalSignatures, + activeFormal: 0 + }; + } function getSyntaxTree(filename) { filename = TypeScript.switchToForwardSlashes(filename); return syntaxTreeCache.getCurrentFileSyntaxTree(filename); @@ -33985,8 +35196,7 @@ var ts; } function getNavigationBarItems(filename) { filename = TypeScript.switchToForwardSlashes(filename); - var syntaxTree = getSyntaxTree(filename); - return new TypeScript.Services.NavigationBarItemGetter().getItems(syntaxTree.sourceUnit()); + return ts.NavigationBar.getNavigationBarItems(getCurrentSourceFile(filename)); } function getSemanticClassifications(fileName, span) { synchronizeHostData(); @@ -33995,7 +35205,7 @@ var ts; var result = []; processNode(sourceFile); return result; - function classifySymbol(symbol) { + function classifySymbol(symbol, meaningAtPosition) { var flags = symbol.getFlags(); if (flags & 16 /* Class */) { return ClassificationTypeNames.className; @@ -34003,24 +35213,30 @@ var ts; else if (flags & 64 /* Enum */) { return ClassificationTypeNames.enumName; } - else if (flags & 32 /* Interface */) { - return ClassificationTypeNames.interfaceName; + else if (meaningAtPosition & 2 /* Type */) { + if (flags & 32 /* Interface */) { + return ClassificationTypeNames.interfaceName; + } + else if (flags & 262144 /* TypeParameter */) { + return ClassificationTypeNames.typeParameterName; + } } else if (flags & ts.SymbolFlags.Module) { return ClassificationTypeNames.moduleName; } - else if (flags & 262144 /* TypeParameter */) { - return ClassificationTypeNames.typeParameterName; - } + return undefined; } function processNode(node) { if (node && span.intersectsWith(node.getStart(), node.getWidth())) { if (node.kind === 59 /* Identifier */ && node.getWidth() > 0) { var symbol = typeInfoResolver.getSymbolInfo(node); if (symbol) { - var type = classifySymbol(symbol); + var type = classifySymbol(symbol, getMeaningFromLocation(node)); if (type) { - result.push(new ClassifiedSpan(new TypeScript.TextSpan(node.getStart(), node.getWidth()), type)); + result.push({ + textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()), + classificationType: type + }); } } } @@ -34036,7 +35252,10 @@ var ts; return result; function classifyTrivia(trivia) { if (trivia.isComment() && span.intersectsWith(trivia.fullStart(), trivia.fullWidth())) { - result.push(new ClassifiedSpan(new TypeScript.TextSpan(trivia.fullStart(), trivia.fullWidth()), ClassificationTypeNames.comment)); + result.push({ + textSpan: new TypeScript.TextSpan(trivia.fullStart(), trivia.fullWidth()), + classificationType: ClassificationTypeNames.comment + }); } } function classifyTriviaList(trivia) { @@ -34051,7 +35270,10 @@ var ts; if (TypeScript.width(token) > 0) { var type = classifyTokenType(token); if (type) { - result.push(new ClassifiedSpan(new TypeScript.TextSpan(TypeScript.start(token), TypeScript.width(token)), type)); + result.push({ + textSpan: new TypeScript.TextSpan(TypeScript.start(token), TypeScript.width(token)), + classificationType: type + }); } } if (token.hasTrailingComment()) { @@ -34149,9 +35371,52 @@ var ts; return ts.OutliningElementsCollector.collectElements(sourceFile); } function getBraceMatchingAtPosition(filename, position) { - filename = TypeScript.switchToForwardSlashes(filename); - var syntaxTree = getSyntaxTree(filename); - return TypeScript.Services.BraceMatcher.getMatchSpans(syntaxTree, position); + var sourceFile = getCurrentSourceFile(filename); + var result = []; + var token = ts.getTouchingToken(sourceFile, position); + if (token.getStart(sourceFile) === position) { + var matchKind = getMatchingTokenKind(token); + if (matchKind) { + var parentElement = token.parent; + var childNodes = parentElement.getChildren(sourceFile); + for (var i = 0, n = childNodes.length; i < n; i++) { + var current = childNodes[i]; + if (current.kind === matchKind) { + var range1 = new TypeScript.TextSpan(token.getStart(sourceFile), token.getWidth(sourceFile)); + var range2 = new TypeScript.TextSpan(current.getStart(sourceFile), current.getWidth(sourceFile)); + if (range1.start() < range2.start()) { + result.push(range1, range2); + } + else { + result.push(range2, range1); + } + break; + } + } + } + } + return result; + function getMatchingTokenKind(token) { + switch (token.kind) { + case 9 /* OpenBraceToken */: + return 10 /* CloseBraceToken */; + case 11 /* OpenParenToken */: + return 12 /* CloseParenToken */; + case 13 /* OpenBracketToken */: + return 14 /* CloseBracketToken */; + case 19 /* LessThanToken */: + return 20 /* GreaterThanToken */; + case 10 /* CloseBraceToken */: + return 9 /* OpenBraceToken */; + case 12 /* CloseParenToken */: + return 11 /* OpenParenToken */; + case 14 /* CloseBracketToken */: + return 13 /* OpenBracketToken */; + case 20 /* GreaterThanToken */: + return 19 /* LessThanToken */; + } + return undefined; + } } function getIndentationAtPosition(filename, position, editorOptions) { filename = TypeScript.switchToForwardSlashes(filename); @@ -34211,11 +35476,11 @@ var ts; ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); var preamble = matchArray[1]; var matchPosition = matchArray.index + preamble.length; - var token = getTokenAtPosition(sourceFile, matchPosition); + var token = ts.getTokenAtPosition(sourceFile, matchPosition); if (token.getStart() <= matchPosition && matchPosition < token.getEnd()) { continue; } - if (!getContainingComment(ts.getTrailingComments(fileContents, token.getFullStart()), matchPosition) && !getContainingComment(ts.getLeadingComments(fileContents, token.getFullStart()), matchPosition)) { + if (!getContainingComment(ts.getTrailingCommentRanges(fileContents, token.getFullStart()), matchPosition) && !getContainingComment(ts.getLeadingCommentRanges(fileContents, token.getFullStart()), matchPosition)) { continue; } var descriptor = undefined; @@ -34229,7 +35494,11 @@ var ts; continue; } var message = matchArray[2]; - result.push(new TodoComment(descriptor, message, matchPosition)); + result.push({ + descriptor: descriptor, + message: message, + position: matchPosition + }); } } return result; @@ -34267,17 +35536,39 @@ var ts; synchronizeHostData(); fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getNodeAtPosition(sourceFile, position); + var node = ts.getTouchingWord(sourceFile, position); if (node && node.kind === 59 /* Identifier */) { var symbol = typeInfoResolver.getSymbolInfo(node); if (symbol && symbol.getDeclarations() && symbol.getDeclarations().length > 0) { - var kind = getSymbolKind(symbol); + var kind = getSymbolKind(symbol, typeInfoResolver); if (kind) { - return RenameInfo.Create(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, getNodeModifiers(symbol.getDeclarations()[0]), new TypeScript.TextSpan(node.getStart(), node.getWidth())); + return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, getSymbolModifiers(symbol), new TypeScript.TextSpan(node.getStart(), node.getWidth())); } } } - return RenameInfo.CreateError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key)); + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key)); + function getRenameInfoError(localizedErrorMessage) { + return { + canRename: false, + localizedErrorMessage: ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key), + displayName: undefined, + fullDisplayName: undefined, + kind: undefined, + kindModifiers: undefined, + triggerSpan: undefined + }; + } + function getRenameInfo(displayName, fullDisplayName, kind, kindModifiers, triggerSpan) { + return { + canRename: true, + localizedErrorMessage: undefined, + displayName: displayName, + fullDisplayName: fullDisplayName, + kind: kind, + kindModifiers: kindModifiers, + triggerSpan: triggerSpan + }; + } } return { dispose: dispose, @@ -34289,9 +35580,8 @@ var ts; getSemanticClassifications: getSemanticClassifications, getCompletionsAtPosition: getCompletionsAtPosition, getCompletionEntryDetails: getCompletionEntryDetails, - getTypeAtPosition: getTypeAtPosition, - getSignatureHelpItems: function (filename, position) { return null; }, - getSignatureHelpCurrentArgumentState: function (fileName, position, applicableSpanStart) { return null; }, + getSignatureHelpItems: getSignatureHelpItems, + getQuickInfoAtPosition: getQuickInfoAtPosition, getDefinitionAtPosition: getDefinitionAtPosition, getReferencesAtPosition: getReferencesAtPosition, getOccurrencesAtPosition: getOccurrencesAtPosition, @@ -34300,6 +35590,7 @@ var ts; getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, getNavigateToItems: getNavigateToItems, getRenameInfo: getRenameInfo, + findRenameLocations: findRenameLocations, getNavigationBarItems: getNavigationBarItems, getOutliningSpans: getOutliningSpans, getTodoComments: getTodoComments, @@ -34308,33 +35599,49 @@ var ts; getFormattingEditsForRange: getFormattingEditsForRange, getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, - getEmitOutput: getEmitOutput + getEmitOutput: getEmitOutput, + getSignatureAtPosition: getSignatureAtPosition }; } ts.createLanguageService = createLanguageService; function createClassifier(host) { - var scanner; - var noRegexTable; - if (!noRegexTable) { - noRegexTable = []; - noRegexTable[59 /* Identifier */] = true; - noRegexTable[7 /* StringLiteral */] = true; - noRegexTable[6 /* NumericLiteral */] = true; - noRegexTable[8 /* RegularExpressionLiteral */] = true; - noRegexTable[87 /* ThisKeyword */] = true; - noRegexTable[33 /* PlusPlusToken */] = true; - noRegexTable[34 /* MinusMinusToken */] = true; - noRegexTable[12 /* CloseParenToken */] = true; - noRegexTable[14 /* CloseBracketToken */] = true; - noRegexTable[10 /* CloseBraceToken */] = true; - noRegexTable[89 /* TrueKeyword */] = true; - noRegexTable[74 /* FalseKeyword */] = true; + var scanner = ts.createScanner(1 /* ES5 */, false); + var noRegexTable = []; + noRegexTable[59 /* Identifier */] = true; + noRegexTable[7 /* StringLiteral */] = true; + noRegexTable[6 /* NumericLiteral */] = true; + noRegexTable[8 /* RegularExpressionLiteral */] = true; + noRegexTable[87 /* ThisKeyword */] = true; + noRegexTable[33 /* PlusPlusToken */] = true; + noRegexTable[34 /* MinusMinusToken */] = true; + noRegexTable[12 /* CloseParenToken */] = true; + noRegexTable[14 /* CloseBracketToken */] = true; + noRegexTable[10 /* CloseBraceToken */] = true; + noRegexTable[89 /* TrueKeyword */] = true; + noRegexTable[74 /* FalseKeyword */] = true; + function isAccessibilityModifier(kind) { + switch (kind) { + case 102 /* PublicKeyword */: + case 100 /* PrivateKeyword */: + case 101 /* ProtectedKeyword */: + return true; + } + return false; + } + function canFollow(keyword1, keyword2) { + if (isAccessibilityModifier(keyword1)) { + if (keyword2 === 109 /* GetKeyword */ || keyword2 === 113 /* SetKeyword */ || keyword2 === 107 /* ConstructorKeyword */ || keyword2 === 103 /* StaticKeyword */) { + return true; + } + return false; + } + return true; } function getClassificationsForLine(text, lexState) { var offset = 0; var lastTokenOrCommentEnd = 0; - var lastToken = 0 /* Unknown */; - var inUnterminatedMultiLineComment = false; + var token = 0 /* Unknown */; + var lastNonTriviaToken = 0 /* Unknown */; switch (lexState) { case 3 /* InDoubleQuoteStringLiteral */: text = '"\\\n' + text; @@ -34349,57 +35656,62 @@ var ts; offset = 3; break; } + scanner.setText(text); var result = { finalLexState: 0 /* Start */, entries: [] }; - scanner = ts.createScanner(1 /* ES5 */, true, text, onError, processComment); - var token = 0 /* Unknown */; + var angleBracketStack = 0; do { token = scanner.scan(); - if ((token === 31 /* SlashToken */ || token === 51 /* SlashEqualsToken */) && !noRegexTable[lastToken]) { - if (scanner.reScanSlashToken() === 8 /* RegularExpressionLiteral */) { - token = 8 /* RegularExpressionLiteral */; + if (!ts.isTrivia(token)) { + if ((token === 31 /* SlashToken */ || token === 51 /* SlashEqualsToken */) && !noRegexTable[lastNonTriviaToken]) { + if (scanner.reScanSlashToken() === 8 /* RegularExpressionLiteral */) { + token = 8 /* RegularExpressionLiteral */; + } } + else if (lastNonTriviaToken === 15 /* DotToken */ && isKeyword(token)) { + token = 59 /* Identifier */; + } + else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { + token = 59 /* Identifier */; + } + else if (lastNonTriviaToken === 59 /* Identifier */ && token === 19 /* LessThanToken */) { + angleBracketStack++; + } + else if (token === 20 /* GreaterThanToken */ && angleBracketStack > 0) { + angleBracketStack--; + } + else if (token === 105 /* AnyKeyword */ || token === 114 /* StringKeyword */ || token === 112 /* NumberKeyword */ || token === 106 /* BooleanKeyword */) { + if (angleBracketStack > 0) { + token = 59 /* Identifier */; + } + } + lastNonTriviaToken = token; } - else if (lastToken === 15 /* DotToken */) { - token = 59 /* Identifier */; - } - lastToken = token; processToken(); } while (token !== 1 /* EndOfFileToken */); return result; - function onError(message) { - inUnterminatedMultiLineComment = message.key === ts.Diagnostics.Asterisk_Slash_expected.key; - } - function processComment(start, end) { - addLeadingWhiteSpace(start, end); - addResult(end - start, 3 /* Comment */); - } function processToken() { var start = scanner.getTokenPos(); var end = scanner.getTextPos(); - addLeadingWhiteSpace(start, end); addResult(end - start, classFromKind(token)); if (end >= text.length) { - if (inUnterminatedMultiLineComment) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; - } - else if (token === 7 /* StringLiteral */) { + if (token === 7 /* StringLiteral */) { var tokenText = scanner.getTokenText(); if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { var quoteChar = tokenText.charCodeAt(0); result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; } } + else if (token === 3 /* MultiLineCommentTrivia */) { + var tokenText = scanner.getTokenText(); + if (!(tokenText.length > 3 && tokenText.charCodeAt(tokenText.length - 2) === 42 /* asterisk */ && tokenText.charCodeAt(tokenText.length - 1) === 47 /* slash */)) { + result.finalLexState = 1 /* InMultiLineCommentTrivia */; + } + } } } - function addLeadingWhiteSpace(start, end) { - if (start > lastTokenOrCommentEnd) { - addResult(start - lastTokenOrCommentEnd, 4 /* Whitespace */); - } - lastTokenOrCommentEnd = end; - } function addResult(length, classification) { if (length > 0) { if (result.entries.length === 0) { @@ -34485,6 +35797,11 @@ var ts; return 7 /* StringLiteral */; case 8 /* RegularExpressionLiteral */: return 8 /* RegExpLiteral */; + case 3 /* MultiLineCommentTrivia */: + case 2 /* SingleLineCommentTrivia */: + return 3 /* Comment */; + case 5 /* WhitespaceTrivia */: + return 4 /* Whitespace */; case 59 /* Identifier */: default: return 5 /* Identifier */; @@ -34641,11 +35958,11 @@ var TypeScript; var debugObjectHost = this; var ts; (function (ts) { - var LanguageVersion; (function (LanguageVersion) { LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; - })(LanguageVersion || (LanguageVersion = {})); + })(ts.LanguageVersion || (ts.LanguageVersion = {})); + var LanguageVersion = ts.LanguageVersion; (function (ModuleGenTarget) { ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; @@ -34785,7 +36102,6 @@ var ts; return null; } var options = compilationSettingsToCompilerOptions(JSON.parse(settingsJson)); - options.noResolve = true; return options; }; LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { @@ -34904,7 +36220,8 @@ var ts; message: diagnostic.messageText, start: diagnostic.start, length: diagnostic.length, - category: ts.DiagnosticCategory[diagnostic.category].toLowerCase() + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase(), + code: diagnostic.code }; }; LanguageServiceShimObject.prototype.realizeDiagnosticWithFileName = function (diagnostic) { @@ -34951,11 +36268,11 @@ var ts; return errors.map(function (d) { return _this.realizeDiagnosticWithFileName(d); }); }); }; - LanguageServiceShimObject.prototype.getTypeAtPosition = function (fileName, position) { + LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) { var _this = this; - return this.forwardJSONCall("getTypeAtPosition('" + fileName + "', " + position + ")", function () { - var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); - return typeInfo; + return this.forwardJSONCall("getQuickInfoAtPosition('" + fileName + "', " + position + ")", function () { + var quickInfo = _this.languageService.getQuickInfoAtPosition(fileName, position); + return quickInfo; }); }; LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { @@ -34979,11 +36296,10 @@ var ts; return signatureInfo; }); }; - LanguageServiceShimObject.prototype.getSignatureHelpCurrentArgumentState = function (fileName, position, applicableSpanStart) { + LanguageServiceShimObject.prototype.getSignatureAtPosition = function (fileName, position) { var _this = this; - return this.forwardJSONCall("getSignatureHelpCurrentArgumentState('" + fileName + "', " + position + ", " + applicableSpanStart + ")", function () { - var signatureInfo = _this.languageService.getSignatureHelpItems(fileName, position); - return signatureInfo; + return this.forwardJSONCall("getSignatureAtPosition('" + fileName + "', " + position + ")", function () { + return _this.languageService.getSignatureAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) { @@ -34998,6 +36314,12 @@ var ts; return _this.languageService.getRenameInfo(fileName, position); }); }; + LanguageServiceShimObject.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) { + var _this = this; + return this.forwardJSONCall("findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")", function () { + return _this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments); + }); + }; LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { From 2e36faed2862d575356086701660e3c0addde9ea Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 22 Oct 2014 10:23:15 -0700 Subject: [PATCH 011/178] Fix the crash in declaration file emit when alias is used before its declaration Fixes #938 --- src/compiler/emitter.ts | 21 ++++++++++---- .../declFileAliasUseBeforeDeclaration.js | 29 +++++++++++++++++++ .../declFileAliasUseBeforeDeclaration.types | 15 ++++++++++ .../declFileAliasUseBeforeDeclaration.ts | 9 ++++++ 4 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/declFileAliasUseBeforeDeclaration.js create mode 100644 tests/baselines/reference/declFileAliasUseBeforeDeclaration.types create mode 100644 tests/cases/compiler/declFileAliasUseBeforeDeclaration.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 008f4f49331..b5919472fc6 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -345,13 +345,22 @@ module ts { var oldWriter = writer; forEach(importDeclarations, aliasToWrite => { var aliasEmitInfo = forEach(aliasDeclarationEmitInfo, declEmitInfo => declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined); - writer = createTextWriter(newLine, trackSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); - } + // If the alias was marked as not visible when we saw its declaration, we would have saved the aliasEmitInfo, but if we haven't yet visited the alias declaration + // then we don't need to write it at this point. We will write it when we actually see its declaration + // Eg. + // export function bar(a: foo.Foo) { } + // import foo = require("foo"); + // Writing of function bar would mark alias declaration foo as visible but we haven't yet visited that declaration so do nothing, + // we would write alias foo declaration when we visit it since it would now be marked as visible + if (aliasEmitInfo) { + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); + } }); writer = oldWriter; } diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration.js b/tests/baselines/reference/declFileAliasUseBeforeDeclaration.js new file mode 100644 index 00000000000..30ba24ed405 --- /dev/null +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration.js @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/declFileAliasUseBeforeDeclaration.ts] //// + +//// [declFileAliasUseBeforeDeclaration_foo.ts] + +export class Foo { } + +//// [declFileAliasUseBeforeDeclaration_test.ts] +export function bar(a: foo.Foo) { } +import foo = require("declFileAliasUseBeforeDeclaration_foo"); + +//// [declFileAliasUseBeforeDeclaration_foo.js] +var Foo = (function () { + function Foo() { + } + return Foo; +})(); +exports.Foo = Foo; +//// [declFileAliasUseBeforeDeclaration_test.js] +function bar(a) { +} +exports.bar = bar; + + +//// [declFileAliasUseBeforeDeclaration_foo.d.ts] +export declare class Foo { +} +//// [declFileAliasUseBeforeDeclaration_test.d.ts] +export declare function bar(a: foo.Foo): void; +import foo = require("declFileAliasUseBeforeDeclaration_foo"); diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration.types b/tests/baselines/reference/declFileAliasUseBeforeDeclaration.types new file mode 100644 index 00000000000..800df4ada49 --- /dev/null +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/declFileAliasUseBeforeDeclaration_test.ts === +export function bar(a: foo.Foo) { } +>bar : (a: foo.Foo) => void +>a : foo.Foo +>foo : unknown +>Foo : foo.Foo + +import foo = require("declFileAliasUseBeforeDeclaration_foo"); +>foo : typeof foo + +=== tests/cases/compiler/declFileAliasUseBeforeDeclaration_foo.ts === + +export class Foo { } +>Foo : Foo + diff --git a/tests/cases/compiler/declFileAliasUseBeforeDeclaration.ts b/tests/cases/compiler/declFileAliasUseBeforeDeclaration.ts new file mode 100644 index 00000000000..c803f65cf7c --- /dev/null +++ b/tests/cases/compiler/declFileAliasUseBeforeDeclaration.ts @@ -0,0 +1,9 @@ +//@module: commonjs +//@declaration: true + +// @Filename: declFileAliasUseBeforeDeclaration_foo.ts +export class Foo { } + +// @Filename: declFileAliasUseBeforeDeclaration_test.ts +export function bar(a: foo.Foo) { } +import foo = require("declFileAliasUseBeforeDeclaration_foo"); \ No newline at end of file From eebc8f903dd191ed2a6a249e3be1bba41d67460b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 23 Oct 2014 10:20:33 -0700 Subject: [PATCH 012/178] Added another test case (#948) --- .../declFileAliasUseBeforeDeclaration2.js | 25 +++++++++++++++++++ .../declFileAliasUseBeforeDeclaration2.types | 19 ++++++++++++++ .../declFileAliasUseBeforeDeclaration2.ts | 12 +++++++++ 3 files changed, 56 insertions(+) create mode 100644 tests/baselines/reference/declFileAliasUseBeforeDeclaration2.js create mode 100644 tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types create mode 100644 tests/cases/compiler/declFileAliasUseBeforeDeclaration2.ts diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.js b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.js new file mode 100644 index 00000000000..905a298bd32 --- /dev/null +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.js @@ -0,0 +1,25 @@ +//// [declFileAliasUseBeforeDeclaration2.ts] + +declare module "test" { + module A { + class C { + } + } + class B extends E { + } + import E = A.C; +} + +//// [declFileAliasUseBeforeDeclaration2.js] + + +//// [declFileAliasUseBeforeDeclaration2.d.ts] +declare module "test" { + module A { + class C { + } + } + class B extends E { + } + import E = A.C; +} diff --git a/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types new file mode 100644 index 00000000000..362dd031e09 --- /dev/null +++ b/tests/baselines/reference/declFileAliasUseBeforeDeclaration2.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/declFileAliasUseBeforeDeclaration2.ts === + +declare module "test" { + module A { +>A : typeof A + + class C { +>C : C + } + } + class B extends E { +>B : B +>E : E + } + import E = A.C; +>E : typeof E +>A : typeof A +>C : E +} diff --git a/tests/cases/compiler/declFileAliasUseBeforeDeclaration2.ts b/tests/cases/compiler/declFileAliasUseBeforeDeclaration2.ts new file mode 100644 index 00000000000..25f19ec276e --- /dev/null +++ b/tests/cases/compiler/declFileAliasUseBeforeDeclaration2.ts @@ -0,0 +1,12 @@ +//@module: commonjs +//@declaration: true + +declare module "test" { + module A { + class C { + } + } + class B extends E { + } + import E = A.C; +} \ No newline at end of file From 2e7d2921281231e9cc9e90b1e8c993c9c496c9f9 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 27 Oct 2014 16:55:10 -0700 Subject: [PATCH 013/178] Update LKG --- bin/tsc.js | 20 +++++++++++--------- bin/typescriptServices.js | 12 +++++++----- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/bin/tsc.js b/bin/tsc.js index f706bebc0ff..cfa3d992657 100644 --- a/bin/tsc.js +++ b/bin/tsc.js @@ -529,10 +529,10 @@ var ts; "|=": 57 /* BarEqualsToken */, "^=": 58 /* CaretEqualsToken */ }; - var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; - var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; function lookupInUnicodeMap(code, map) { if (code < map[0]) { return false; @@ -6505,12 +6505,14 @@ var ts; var oldWriter = writer; ts.forEach(importDeclarations, function (aliasToWrite) { var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); - writer = createTextWriter(newLine, trackSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); + if (aliasEmitInfo) { + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); } - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); }); writer = oldWriter; } diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js index 5c3e31f30e1..c3ca7ac4975 100644 --- a/bin/typescriptServices.js +++ b/bin/typescriptServices.js @@ -6310,12 +6310,14 @@ var ts; var oldWriter = writer; ts.forEach(importDeclarations, function (aliasToWrite) { var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; }); - writer = createTextWriter(newLine, trackSymbol); - for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); + if (aliasEmitInfo) { + writer = createTextWriter(newLine, trackSymbol); + for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { + writer.increaseIndent(); + } + writeImportDeclaration(aliasToWrite); + aliasEmitInfo.asynchronousOutput = writer.getText(); } - writeImportDeclaration(aliasToWrite); - aliasEmitInfo.asynchronousOutput = writer.getText(); }); writer = oldWriter; } From ffc34b8494f6bc995eff4112836958bc25f84394 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 27 Oct 2014 17:36:01 -0700 Subject: [PATCH 014/178] Expose getSourceFile on the LanguageService interface --- src/services/services.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index a83fb7e0e75..702ad9be2f7 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -874,7 +874,7 @@ module ts { getEmitOutput(fileName: string): EmitOutput; - //getSyntaxTree(fileName: string): TypeScript.SyntaxTree; + getSourceFile(filename: string): SourceFile; dispose(): void; } @@ -5247,6 +5247,7 @@ module ts { getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getEmitOutput: getEmitOutput, getSignatureAtPosition: getSignatureAtPosition, + getSourceFile: getSourceFile }; } From 7fba80606a48ceb1a5b42f7e7610259c2596c0db Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 31 Oct 2014 18:19:49 +0100 Subject: [PATCH 015/178] make getSourceFile use getCurrentSourceFile --- src/services/services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index 702ad9be2f7..b27ab36b915 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -5247,7 +5247,7 @@ module ts { getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getEmitOutput: getEmitOutput, getSignatureAtPosition: getSignatureAtPosition, - getSourceFile: getSourceFile + getSourceFile: getCurrentSourceFile }; } From e119c575e8a1b32df99705edf652fc7206193466 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 4 Nov 2014 17:30:37 -0800 Subject: [PATCH 016/178] Classify keywords in type args in the absence of syntactic classification. --- src/services/services.ts | 7 ++++--- src/services/shims.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index b27ab36b915..0a7aa8652f1 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1118,7 +1118,7 @@ module ts { } export interface Classifier { - getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult; + getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): ClassificationResult; } export interface DocumentRegistry { @@ -5307,7 +5307,8 @@ module ts { return true; } - function getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult { + // 'classifyKeywordsInGenerics' should be 'true' when a syntactic classifier is not present. + function getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): ClassificationResult { var offset = 0; var lastTokenOrCommentEnd = 0; var token = SyntaxKind.Unknown; @@ -5395,7 +5396,7 @@ module ts { token === SyntaxKind.StringKeyword || token === SyntaxKind.NumberKeyword || token === SyntaxKind.BooleanKeyword) { - if (angleBracketStack > 0) { + if (angleBracketStack > 0 && !classifyKeywordsInGenerics) { // 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. diff --git a/src/services/shims.ts b/src/services/shims.ts index fdea0202323..c3df67e6db1 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -162,7 +162,7 @@ module ts { } export interface ClassifierShim extends Shim { - getClassificationsForLine(text: string, lexState: EndOfLineState): string; + getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): string; } export interface CoreServicesShim extends Shim { @@ -821,8 +821,8 @@ module ts { } /// COLORIZATION - public getClassificationsForLine(text: string, lexState: EndOfLineState): string { - var classification = this.classifier.getClassificationsForLine(text, lexState); + public getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): string { + var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); var items = classification.entries; var result = ""; for (var i = 0; i < items.length; i++) { From 9ba4d37d7b9045796c50aba52709d3ef062d7fa2 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 15:36:10 -0800 Subject: [PATCH 017/178] Emit the type annotation as it is in the declaration file if we have it --- src/compiler/checker.ts | 59 ++++- src/compiler/emitter.ts | 490 ++++++++++++++++++++++++++++------------ src/compiler/types.ts | 9 +- 3 files changed, 399 insertions(+), 159 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0ddea8baf08..21255d5ed94 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -883,13 +883,13 @@ module ts { if (accessibleSymbolChain) { var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); if (!hasAccessibleDeclarations) { - return { + return { accessibility: SymbolAccessibility.NotAccessible, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, SymbolFlags.Namespace) : undefined, }; } - return { accessibility: SymbolAccessibility.Accessible, aliasesToMakeVisible: hasAccessibleDeclarations.aliasesToMakeVisible }; + return hasAccessibleDeclarations; } // If we haven't got the accessible symbol, it doesn't mean the symbol is actually inaccessible. @@ -946,12 +946,12 @@ module ts { (declaration.kind === SyntaxKind.SourceFile && isExternalModule(declaration)); } - function hasVisibleDeclarations(symbol: Symbol): { aliasesToMakeVisible?: ImportDeclaration[]; } { + function hasVisibleDeclarations(symbol: Symbol): SymbolVisibilityResult { var aliasesToMakeVisible: ImportDeclaration[]; if (forEach(symbol.declarations, declaration => !getIsDeclarationVisible(declaration))) { return undefined; } - return { aliasesToMakeVisible: aliasesToMakeVisible }; + return { accessibility: SymbolAccessibility.Accessible, aliasesToMakeVisible: aliasesToMakeVisible }; function getIsDeclarationVisible(declaration: Declaration) { if (!isDeclarationVisible(declaration)) { @@ -980,14 +980,50 @@ module ts { } } - function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName: EntityName): SymbolAccessiblityResult { + function isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult { + // get symbol of the first identifier of the entityName + var meaning: SymbolFlags; + if (entityName.parent.kind === SyntaxKind.TypeQuery) { + // Typeof value + meaning = SymbolFlags.Value | SymbolFlags.ExportValue; + } + else if (entityName.kind === SyntaxKind.QualifiedName || + entityName.parent.kind === SyntaxKind.ImportDeclaration) { + // Left identifier from type reference or TypeAlias + // Entity name of the import declaration + meaning = SymbolFlags.Namespace; + } + else { + // Type Reference or TypeAlias entity = Identifier + meaning = SymbolFlags.Type; + } var firstIdentifier = getFirstIdentifier(entityName); - var symbolOfNameSpace = resolveName(entityName.parent, (firstIdentifier).text, SymbolFlags.Namespace, Diagnostics.Cannot_find_name_0, firstIdentifier); + var symbol = resolveName(enclosingDeclaration, (firstIdentifier).text, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined); + // Verify if the symbol is accessible - var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace); - return hasNamespaceDeclarationsVisibile ? - { accessibility: SymbolAccessibility.Accessible, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : - { accessibility: SymbolAccessibility.NotAccessible, errorSymbolName: declarationNameToString(firstIdentifier) }; + var isVisible = hasVisibleDeclarations(symbol); + if (isVisible) { + return isVisible; + } + + // Not visible populate error info + var errorSymbolName: string; + var errorModuleName: string; + // TODO(shkamat) For now lets just do this for alias declarations, but in all cases only first identifier text should be enough + if (entityName.parent.kind === SyntaxKind.ImportDeclaration) { + errorSymbolName = getTextOfNode(firstIdentifier); + } + else { + errorSymbolName = getTextOfNode(entityName); + errorModuleName = entityName.kind === SyntaxKind.QualifiedName ? + getTextOfNode(firstIdentifier) : + undefined; + } + return { + accessibility: SymbolAccessibility.NotAccessible, + errorSymbolName: errorSymbolName, + errorModuleName: errorModuleName + }; } function releaseStringWriter(writer: StringSymbolWriter) { @@ -1599,6 +1635,7 @@ module ts { case SyntaxKind.IndexSignature: case SyntaxKind.Parameter: case SyntaxKind.ModuleBlock: + case SyntaxKind.TypeParameter: return isDeclarationVisible(node.parent); // Source file is always visible @@ -8918,7 +8955,7 @@ module ts { writeTypeAtLocation: writeTypeAtLocation, writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, isSymbolAccessible: isSymbolAccessible, - isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile, + isEntityNameVisible: isEntityNameVisible, getConstantValue: getConstantValue, }; checkProgram(); diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f61d4403eec..70e4d0c1328 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -6,6 +6,7 @@ module ts { interface EmitTextWriter { write(s: string): void; + writeTextOfNode(node: Node): void; writeLine(): void; increaseIndent(): void; decreaseIndent(): void; @@ -18,7 +19,15 @@ module ts { getIndent(): number; } + interface SymbolAccessibilityDiagnostic { + errorNode: Node; + diagnosticMessage: DiagnosticMessage; + typeName?: DeclarationName; + } + type GetSymbolAccessibilityDiagnostic = (symbolAccesibilityResult: SymbolAccessiblityResult) => SymbolAccessibilityDiagnostic; + interface EmitTextWriterWithSymbolWriter extends EmitTextWriter, SymbolWriter{ + getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic; } var indentStrings: string[] = ["", " "]; @@ -156,9 +165,14 @@ module ts { } } + function writeTextOfNode(node: Node) { + write(getSourceTextOfLocalNode(node)); + } + return { write: write, rawWrite: rawWrite, + writeTextOfNode: writeTextOfNode, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: () => indent++, @@ -317,6 +331,7 @@ module ts { function emitJavaScript(jsFilePath: string, root?: SourceFile) { var writer = createTextWriter(); var write = writer.write; + var writeTextOfNode = writer.writeTextOfNode; var writeLine = writer.writeLine; var increaseIndent = writer.increaseIndent; var decreaseIndent = writer.decreaseIndent; @@ -920,7 +935,7 @@ module ts { write((node).text); } else { - write(getSourceTextOfLocalNode(node)); + writeTextOfNode(node); } write("\""); @@ -965,7 +980,7 @@ module ts { write("."); } } - write(getSourceTextOfLocalNode(node)); + writeTextOfNode(node); } function emitThis(node: Node) { @@ -2489,11 +2504,13 @@ module ts { } function emitDeclarations(jsFilePath: string, root?: SourceFile) { - var writer = createTextWriterWithSymbolWriter(); - var write = writer.write; - var writeLine = writer.writeLine; - var increaseIndent = writer.increaseIndent; - var decreaseIndent = writer.decreaseIndent; + var write: (s: string) => void; + var writeLine: () => void; + var increaseIndent: () => void; + var decreaseIndent: () => void; + var writeTextOfNode: (node: Node) => void; + + var writer = createAndSetNewTextWriterWithSymbolWriter(); var enclosingDeclaration: Node; var reportedDeclarationError = false; @@ -2507,13 +2524,7 @@ module ts { asynchronousOutput?: string; // If the output for alias was written asynchronously, the corresponding output }[] = []; - var getSymbolVisibilityDiagnosticMessage: (symbolAccesibilityResult: SymbolAccessiblityResult) => { - errorNode: Node; - diagnosticMessage: DiagnosticMessage; - typeName?: DeclarationName - } - - function createTextWriterWithSymbolWriter(): EmitTextWriterWithSymbolWriter { + function createAndSetNewTextWriterWithSymbolWriter(): EmitTextWriterWithSymbolWriter { var writer = createTextWriter(); writer.trackSymbol = trackSymbol; writer.writeKeyword = writer.write; @@ -2523,28 +2534,36 @@ module ts { writer.writeStringLiteral = writer.writeLiteral; writer.writeParameter = writer.write; writer.writeSymbol = writer.write; + setWriter(writer); return writer; } + function setWriter(newWriter: EmitTextWriterWithSymbolWriter) { + writer = newWriter; + write = newWriter.write; + writeTextOfNode = newWriter.writeTextOfNode; + writeLine = newWriter.writeLine; + increaseIndent = newWriter.increaseIndent; + decreaseIndent = newWriter.decreaseIndent; + } + function writeAsychronousImportDeclarations(importDeclarations: ImportDeclaration[]) { var oldWriter = writer; forEach(importDeclarations, aliasToWrite => { var aliasEmitInfo = forEach(aliasDeclarationEmitInfo, declEmitInfo => declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined); - writer = createTextWriterWithSymbolWriter(); + createAndSetNewTextWriterWithSymbolWriter(); for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) { - writer.increaseIndent(); + increaseIndent(); } writeImportDeclaration(aliasToWrite); aliasEmitInfo.asynchronousOutput = writer.getText(); }); - writer = oldWriter; + setWriter(oldWriter); } - function trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags) { - var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning); + function handleSymbolAccessibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { - // write the aliases if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); @@ -2553,7 +2572,7 @@ module ts { else { // Report error reportedDeclarationError = true; - var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult); + var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult); if (errorInfo) { if (errorInfo.typeName) { diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, @@ -2572,23 +2591,55 @@ module ts { } } + function trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags) { + handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning)); + } + + function writeTypeAtLocation(location: Node, type: TypeNode, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) { + writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic; + write(": "); + if (type) { + // Write the type + emitType(type); + } + else { + resolver.writeTypeAtLocation(location, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + } + + function writeReturnTypeAtSignature(signature: SignatureDeclaration, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) { + writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic; + write(": "); + if (signature.type) { + // Write the type + emitType(signature.type); + } + else { + resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + } + } + function emitLines(nodes: Node[]) { for (var i = 0, n = nodes.length; i < n; i++) { emitNode(nodes[i]); } } - function emitCommaList(nodes: Node[], eachNodeEmitFn: (node: Node) => void) { + function emitSeparatedList(nodes: Node[], separator: string, eachNodeEmitFn: (node: Node) => void) { var currentWriterPos = writer.getTextPos(); for (var i = 0, n = nodes.length; i < n; i++) { if (currentWriterPos !== writer.getTextPos()) { - write(", "); + write(separator); } currentWriterPos = writer.getTextPos(); eachNodeEmitFn(nodes[i]); } } + function emitCommaList(nodes: Node[], eachNodeEmitFn: (node: Node) => void) { + emitSeparatedList(nodes, ", ", eachNodeEmitFn); + } + function writeJsDocComments(declaration: Declaration) { if (declaration) { var jsDocComments = getJsDocComments(declaration, currentSourceFile); @@ -2598,8 +2649,121 @@ module ts { } } - function emitSourceTextOfNode(node: Node) { - write(getSourceTextOfLocalNode(node)); + function emitTypeWithNewGetSymbolAccessibilityDiangostic(type: TypeNode, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) { + writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic; + emitType(type); + } + + function emitType(type: TypeNode) { + switch (type.kind) { + case SyntaxKind.AnyKeyword: + case SyntaxKind.StringKeyword: + case SyntaxKind.NumberKeyword: + case SyntaxKind.BooleanKeyword: + case SyntaxKind.VoidKeyword: + case SyntaxKind.StringLiteral: + return writeTextOfNode(type); + case SyntaxKind.TypeReference: + return emitTypeReference(type); + case SyntaxKind.TypeQuery: + return emitTypeQuery(type); + case SyntaxKind.ArrayType: + return emitArrayType(type); + case SyntaxKind.TupleType: + return emitTupleType(type); + case SyntaxKind.UnionType: + return emitUnionType(type); + case SyntaxKind.ParenType: + return emitParenType(type); + case SyntaxKind.TypeLiteral: + return emitTypeLiteral(type); + case SyntaxKind.Identifier: + return emitEntityName(type); + case SyntaxKind.QualifiedName: + return emitEntityName(type); + default: + Debug.fail("Unknown type annotation: " + type.kind); + } + + function emitEntityName(entityName: EntityName) { + var visibilityResult = resolver.isEntityNameVisible(entityName, + // Aliases can be written asynchronously so use correct enclosing declaration + entityName.parent.kind === SyntaxKind.ImportDeclaration ? entityName.parent : enclosingDeclaration); + + handleSymbolAccessibilityError(visibilityResult); + writeEntityName(entityName); + + function writeEntityName(entityName: EntityName) { + if (entityName.kind === SyntaxKind.Identifier) { + writeTextOfNode(entityName); + } + else { + var qualifiedName = entityName; + writeEntityName(qualifiedName.left); + write("."); + writeTextOfNode(qualifiedName.right); + } + } + } + + function emitTypeReference(type: TypeReferenceNode) { + emitEntityName(type.typeName); + if (type.typeArguments) { + write("<"); + emitCommaList(type.typeArguments, emitType); + write(">"); + } + } + + function emitTypeQuery(type: TypeQueryNode) { + write("typeof "); + emitEntityName(type.exprName); + } + + function emitArrayType(type: ArrayTypeNode) { + emitType(type.elementType); + write("[]"); + } + + function emitTupleType(type: TupleTypeNode) { + write("["); + emitCommaList(type.elementTypes, emitType); + write("]"); + } + + function emitUnionType(type: UnionTypeNode) { + emitSeparatedList(type.types, " | ", emitType); + } + + function emitParenType(type: ParenTypeNode) { + write("("); + emitType(type.type); + write(")"); + } + + function emitTypeLiteral(type: TypeLiteralNode) { + if (getTokenPosOfNode(type, currentSourceFile) !== skipTrivia(currentSourceFile.text, type.members.pos)) { + write("{"); + if (type.members.length) { + writeLine(); + increaseIndent(); + // write members + emitLines(type.members); + decreaseIndent(); + } + write("}"); + } + else { + // Write call/construct signature as arrow style + var signature = type.members[0]; + if (signature.kind === SyntaxKind.CallSignature) { + emitSignatureDeclaration(signature, /*arrowStyle*/true); + } + else { + emitConstructSignatureDeclaration(signature, /*arrowStyle*/ true); + } + } + } } function emitSourceFile(node: SourceFile) { @@ -2610,42 +2774,38 @@ module ts { function emitExportAssignment(node: ExportAssignment) { write("export = "); - emitSourceTextOfNode(node.exportName); + writeTextOfNode(node.exportName); write(";"); writeLine(); } - function emitDeclarationFlags(node: Declaration) { - if (node.flags & NodeFlags.Static) { - if (node.flags & NodeFlags.Private) { - write("private "); + function emitModuleElementDeclarationFlags(node: Declaration) { + // If the node is parented in the current source file we need to emit export declare or just export + if (node.parent === currentSourceFile) { + // If the node is exported + if (node.flags & NodeFlags.Export) { + write("export "); } - else if (node.flags & NodeFlags.Protected) { - write("protected "); - } - write("static "); - } - else { - if (node.flags & NodeFlags.Private) { - write("private "); - } - else if (node.flags & NodeFlags.Protected) { - write("protected "); - } - // If the node is parented in the current source file we need to emit export declare or just export - else if (node.parent === currentSourceFile) { - // If the node is exported - if (node.flags & NodeFlags.Export) { - write("export "); - } - if (node.kind !== SyntaxKind.InterfaceDeclaration) { - write("declare "); - } + if (node.kind !== SyntaxKind.InterfaceDeclaration) { + write("declare "); } } } + function emitClassMemberDeclarationFlags(node: Declaration) { + if (node.flags & NodeFlags.Private) { + write("private "); + } + else if (node.flags & NodeFlags.Protected) { + write("protected "); + } + + if (node.flags & NodeFlags.Static) { + write("static "); + } + } + function emitImportDeclaration(node: ImportDeclaration) { var nodeEmitInfo = { declaration: node, @@ -2664,52 +2824,41 @@ module ts { // correct writer especially to handle asynchronous alias writing emitJsDocComments(node); if (node.flags & NodeFlags.Export) { - writer.write("export "); + write("export "); } - writer.write("import "); - writer.write(getSourceTextOfLocalNode(node.name)); - writer.write(" = "); + write("import "); + writeTextOfNode(node.name); + write(" = "); if (node.entityName) { - checkEntityNameAccessible(); - writer.write(getSourceTextOfLocalNode(node.entityName)); - writer.write(";"); + emitTypeWithNewGetSymbolAccessibilityDiangostic(node.entityName, getImportEntityNameVisibilityError); + write(";"); } else { - writer.write("require("); - writer.write(getSourceTextOfLocalNode(node.externalModuleName)); - writer.write(");"); + write("require("); + writeTextOfNode(node.externalModuleName); + write(");"); } writer.writeLine(); - function checkEntityNameAccessible() { - var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName); - if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { - // write the aliases - if (symbolAccesibilityResult.aliasesToMakeVisible) { - writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); - } - } - else { - // Report error - reportedDeclarationError = true; - diagnostics.push(createDiagnosticForNode(node, - Diagnostics.Import_declaration_0_is_using_private_name_1, - getSourceTextOfLocalNode(node.name), - symbolAccesibilityResult.errorSymbolName)); - } + function getImportEntityNameVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + return { + diagnosticMessage: Diagnostics.Import_declaration_0_is_using_private_name_1, + errorNode: node, + typeName: node.name + }; } } function emitModuleDeclaration(node: ModuleDeclaration) { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); write("module "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); while (node.body.kind !== SyntaxKind.ModuleBlock) { node = node.body; write("."); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); } var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; @@ -2727,12 +2876,11 @@ module ts { function emitTypeAliasDeclaration(node: TypeAliasDeclaration) { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); write("type "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); write(" = "); - getSymbolVisibilityDiagnosticMessage = getTypeAliasDeclarationVisibilityError; - resolver.writeTypeAtLocation(node.type, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + emitTypeWithNewGetSymbolAccessibilityDiangostic(node.type, getTypeAliasDeclarationVisibilityError); write(";"); writeLine(); } @@ -2753,12 +2901,12 @@ module ts { function emitEnumDeclaration(node: EnumDeclaration) { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); if (isConstEnumDeclaration(node)) { write("const ") } write("enum "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); write(" {"); writeLine(); increaseIndent(); @@ -2771,7 +2919,7 @@ module ts { function emitEnumMemberDeclaration(node: EnumMember) { emitJsDocComments(node); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); var enumMemberValue = resolver.getEnumMemberValue(node); if (enumMemberValue !== undefined) { write(" = "); @@ -2783,7 +2931,25 @@ module ts { function emitTypeParameters(typeParameters: TypeParameterDeclaration[]) { function emitTypeParameter(node: TypeParameterDeclaration) { - function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + increaseIndent(); + emitJsDocComments(node); + decreaseIndent(); + writeTextOfNode(node.name); + // If there is constraint present and this is not a type parameter of the private method emit the constraint + if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { + write(" extends "); + if (node.parent.parent && node.parent.parent.kind === SyntaxKind.TypeLiteral) { + Debug.assert(node.parent.kind === SyntaxKind.Method || + node.parent.kind === SyntaxKind.CallSignature || + node.parent.kind === SyntaxKind.ConstructSignature); + emitType(node.constraint); + } + else { + emitTypeWithNewGetSymbolAccessibilityDiangostic(node.constraint, getTypeParameterConstraintVisibilityError); + } + } + + function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { // Type parameter constraints are named by user so we should always be able to name it var diagnosticMessage: DiagnosticMessage; switch (node.parent.kind) { @@ -2845,17 +3011,6 @@ module ts { typeName: node.name }; } - - increaseIndent(); - emitJsDocComments(node); - decreaseIndent(); - emitSourceTextOfNode(node.name); - // If there is constraint present and this is not a type parameter of the private method emit the constraint - if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { - write(" extends "); - getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError; - resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); - } } if (typeParameters) { @@ -2872,10 +3027,9 @@ module ts { } function emitTypeOfTypeReference(node: Node) { - getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.WriteArrayAsGenericType | TypeFormatFlags.UseTypeOfFunction, writer); + emitTypeWithNewGetSymbolAccessibilityDiangostic(node, getHeritageClauseVisibilityError); - function getHeritageClauseVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function getHeritageClauseVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { var diagnosticMessage: DiagnosticMessage; // Heritage clause is written by user so it can always be named if (node.parent.kind === SyntaxKind.ClassDeclaration) { @@ -2926,9 +3080,9 @@ module ts { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); write("class "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; emitTypeParameters(node.typeParameters); @@ -2951,9 +3105,9 @@ module ts { function emitInterfaceDeclaration(node: InterfaceDeclaration) { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); write("interface "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; emitTypeParameters(node.typeParameters); @@ -2971,7 +3125,7 @@ module ts { function emitPropertyDeclaration(node: PropertyDeclaration) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitClassMemberDeclarationFlags(node); emitVariableDeclaration(node); write(";"); writeLine(); @@ -2982,19 +3136,20 @@ module ts { // If we are emitting property it isn't moduleElement and hence we already know it needs to be emitted // so there is no check needed to see if declaration is visible if (node.kind !== SyntaxKind.VariableDeclaration || resolver.isDeclarationVisible(node)) { - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); // If optional property emit ? if (node.kind === SyntaxKind.Property && (node.flags & NodeFlags.QuestionMark)) { write("?"); } - if (!(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + if (node.kind === SyntaxKind.Property && node.parent.kind === SyntaxKind.TypeLiteral) { + emitTypeOfVariableDeclarationFromTypeLiteral(node); + } + else if (!(node.flags & NodeFlags.Private)) { + writeTypeAtLocation(node, node.type, getVariableDeclarationTypeVisibilityError); } } - function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { var diagnosticMessage: DiagnosticMessage; if (node.kind === SyntaxKind.VariableDeclaration) { diagnosticMessage = symbolAccesibilityResult.errorModuleName ? @@ -3036,11 +3191,21 @@ module ts { } } + function emitTypeOfVariableDeclarationFromTypeLiteral(node: VariableDeclaration) { + // if this is property of type literal, + // or is parameter of method/call/construct/index signature of type literal + // emit only if type is specified + if (node.type) { + write(": "); + emitType(node.type); + } + } + function emitVariableStatement(node: VariableStatement) { var hasDeclarationWithEmit = forEach(node.declarations, varDeclaration => resolver.isDeclarationVisible(varDeclaration)); if (hasDeclarationWithEmit) { emitJsDocComments(node); - emitDeclarationFlags(node); + emitModuleElementDeclarationFlags(node); if (node.flags & NodeFlags.Let) { write("let "); } @@ -3061,22 +3226,38 @@ module ts { if (node === accessors.firstAccessor) { emitJsDocComments(accessors.getAccessor); emitJsDocComments(accessors.setAccessor); - emitDeclarationFlags(node); - emitSourceTextOfNode(node.name); + emitClassMemberDeclarationFlags(node); + writeTextOfNode(node.name); if (!(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + var accessorWithTypeAnnotation: AccessorDeclaration = node; + var type = getTypeAnnotationFromAccessor(node); + if (!type) { + // couldn't get type for the first accessor, try the another one + var anotherAccessor = node.kind === SyntaxKind.GetAccessor ? accessors.setAccessor : accessors.getAccessor; + type = getTypeAnnotationFromAccessor(anotherAccessor); + if (type) { + accessorWithTypeAnnotation = anotherAccessor; + } + } + writeTypeAtLocation(node, type, getAccessorDeclarationTypeVisibilityError); } write(";"); writeLine(); } - function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function getTypeAnnotationFromAccessor(accessor: AccessorDeclaration): TypeNode { + if (accessor) { + return accessor.kind === SyntaxKind.GetAccessor ? + accessor.type : // Getter - return type + accessor.parameters[0].type; // Setter parameter type + } + } + + function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { var diagnosticMessage: DiagnosticMessage; - if (node.kind === SyntaxKind.SetAccessor) { + if (accessorWithTypeAnnotation.kind === SyntaxKind.SetAccessor) { // Setters have to have type named and cannot infer it so, the type should always be named - if (node.parent.flags & NodeFlags.Static) { + if (accessorWithTypeAnnotation.parent.flags & NodeFlags.Static) { diagnosticMessage = symbolAccesibilityResult.errorModuleName ? Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1; @@ -3088,13 +3269,13 @@ module ts { } return { diagnosticMessage: diagnosticMessage, - errorNode: node.parameters[0], + errorNode: accessorWithTypeAnnotation.parameters[0], // TODO(jfreeman): Investigate why we are passing node.name instead of node.parameters[0].name - typeName: node.name + typeName: accessorWithTypeAnnotation.name }; } else { - if (node.flags & NodeFlags.Static) { + if (accessorWithTypeAnnotation.flags & NodeFlags.Static) { diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -3110,7 +3291,7 @@ module ts { } return { diagnosticMessage: diagnosticMessage, - errorNode: node.name, + errorNode: accessorWithTypeAnnotation.name, typeName: undefined }; } @@ -3123,16 +3304,21 @@ module ts { if ((node.kind !== SyntaxKind.FunctionDeclaration || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - emitDeclarationFlags(node); + if (node.kind === SyntaxKind.FunctionDeclaration) { + emitModuleElementDeclarationFlags(node); + } + else if (node.kind === SyntaxKind.Method) { + emitClassMemberDeclarationFlags(node); + } if (node.kind === SyntaxKind.FunctionDeclaration) { write("function "); - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); } else if (node.kind === SyntaxKind.Constructor) { write("constructor"); } else { - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); if (node.flags & NodeFlags.QuestionMark) { write("?"); } @@ -3141,13 +3327,13 @@ module ts { } } - function emitConstructSignatureDeclaration(node: SignatureDeclaration) { + function emitConstructSignatureDeclaration(node: SignatureDeclaration, arrowStyle?: boolean) { emitJsDocComments(node); write("new "); - emitSignatureDeclaration(node); + emitSignatureDeclaration(node, arrowStyle); } - function emitSignatureDeclaration(node: SignatureDeclaration) { + function emitSignatureDeclaration(node: SignatureDeclaration, arrowStyle?: boolean) { if (node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.IndexSignature) { // Only index and call signatures are emitted directly, so emit their js doc comments, rest will do that in their own functions emitJsDocComments(node); @@ -3160,6 +3346,9 @@ module ts { write("("); } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + // Parameters emitCommaList(node.parameters, emitParameterDeclaration); @@ -3171,15 +3360,25 @@ module ts { } // If this is not a constructor and is not private, emit the return type - if (node.kind !== SyntaxKind.Constructor && !(node.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError; - resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + if (node.parent.kind === SyntaxKind.TypeLiteral) { + // Emit type literal signature return type only if specified + if (node.type) { + write(arrowStyle ? " => " : ": "); + emitType(node.type); + } + } + else if (node.kind !== SyntaxKind.Constructor && !(node.flags & NodeFlags.Private)) { + writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } - write(";"); - writeLine(); - function getReturnTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + enclosingDeclaration = prevEnclosingDeclaration; + + if (!arrowStyle) { + write(";"); + writeLine(); + } + + function getReturnTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { var diagnosticMessage: DiagnosticMessage; switch (node.kind) { case SyntaxKind.ConstructSignature: @@ -3251,19 +3450,20 @@ module ts { if (node.flags & NodeFlags.Rest) { write("..."); } - emitSourceTextOfNode(node.name); + writeTextOfNode(node.name); if (node.initializer || (node.flags & NodeFlags.QuestionMark)) { write("?"); } decreaseIndent(); - if (!(node.parent.flags & NodeFlags.Private)) { - write(": "); - getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError; - resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction, writer); + if (node.parent.parent.kind === SyntaxKind.TypeLiteral) { + emitTypeOfVariableDeclarationFromTypeLiteral(node); + } + else if (!(node.parent.flags & NodeFlags.Private)) { + writeTypeAtLocation(node, node.type, getParameterDeclarationTypeVisibilityError); } - function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { var diagnosticMessage: DiagnosticMessage; switch (node.parent.kind) { case SyntaxKind.Constructor: diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 020b6432c7f..1ef50051ec3 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -789,11 +789,14 @@ module ts { CannotBeNamed } - export interface SymbolAccessiblityResult { + export interface SymbolVisibilityResult { accessibility: SymbolAccessibility; + aliasesToMakeVisible?: ImportDeclaration[]; // aliases that need to have this symbol visible + } + + export interface SymbolAccessiblityResult extends SymbolVisibilityResult { errorSymbolName?: string // Optional symbol name that results in error errorModuleName?: string // If the symbol is not visible from module, module's name - aliasesToMakeVisible?: ImportDeclaration[]; // aliases that need to have this symbol visible } export interface EmitResolver { @@ -811,7 +814,7 @@ module ts { writeTypeAtLocation(location: Node, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): SymbolAccessiblityResult; - isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName: EntityName): SymbolAccessiblityResult; + isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; // Returns the constant value this property access resolves to, or 'undefined' for a non-constant getConstantValue(node: PropertyAccess | IndexedAccess): number; hasEarlyErrors(sourceFile?: SourceFile): boolean; From 7719f39faf8b49c235530ec1e39a627447e9e039 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 15:39:01 -0800 Subject: [PATCH 018/178] Update the baselines --- .../baselines/reference/commentsInterface.js | 4 +- .../constructorTypeWithTypeParameters.js | 8 +- .../declFileForInterfaceWithRestParams.js | 6 +- .../reference/declFileGenericType.js | 6 +- .../reference/declFileGenericType2.js | 10 +-- ...RestParametersOfFunctionAndFunctionType.js | 12 ++- .../reference/declFileTypeofFunction.js | 2 +- ...lictingWithClassReferredByExtendsClause.js | 2 +- .../declarationEmit_nameConflicts.js | 2 +- ...tionWithArgumentOfTypeFunctionTypeArray.js | 4 +- ...lassDeclarationWhenInBaseTypeResolution.js | 86 +++++++++---------- tests/baselines/reference/typeofUndefined.js | 2 +- tests/baselines/reference/vardecl.js | 10 ++- 13 files changed, 84 insertions(+), 70 deletions(-) diff --git a/tests/baselines/reference/commentsInterface.js b/tests/baselines/reference/commentsInterface.js index 1951137b048..bff79a02aa5 100644 --- a/tests/baselines/reference/commentsInterface.js +++ b/tests/baselines/reference/commentsInterface.js @@ -116,7 +116,7 @@ interface i2 { /** this is x*/ x: number; /** this is foo*/ - foo: (b: number) => string; + foo: (/**param help*/ b: number) => string; /** this is indexer*/ [/**string param*/ i: string]: any; /**new method*/ @@ -152,7 +152,7 @@ interface i3 { /** Function i3 f*/ f(/**number parameter*/ a: number): string; /** i3 l*/ - l: (b: number) => string; + l: (/**comment i3 l b*/ b: number) => string; nc_x: number; nc_f(a: number): string; nc_l: (b: number) => string; diff --git a/tests/baselines/reference/constructorTypeWithTypeParameters.js b/tests/baselines/reference/constructorTypeWithTypeParameters.js index 195536d5b15..9b93d54ba89 100644 --- a/tests/baselines/reference/constructorTypeWithTypeParameters.js +++ b/tests/baselines/reference/constructorTypeWithTypeParameters.js @@ -12,6 +12,10 @@ var anotherVar; //// [constructorTypeWithTypeParameters.d.ts] -declare var X: new () => number; -declare var Y: new () => number; +declare var X: { + new (): number; +}; +declare var Y: { + new (): number; +}; declare var anotherVar: new () => number; diff --git a/tests/baselines/reference/declFileForInterfaceWithRestParams.js b/tests/baselines/reference/declFileForInterfaceWithRestParams.js index b2da71ba208..8979f7df6da 100644 --- a/tests/baselines/reference/declFileForInterfaceWithRestParams.js +++ b/tests/baselines/reference/declFileForInterfaceWithRestParams.js @@ -11,7 +11,7 @@ interface I { //// [declFileForInterfaceWithRestParams.d.ts] interface I { - foo(...x: any[]): any[]; - foo2(a: number, ...x: any[]): any[]; - foo3(b: string, ...x: string[]): string[]; + foo(...x: any[]): typeof x; + foo2(a: number, ...x: any[]): typeof x; + foo3(b: string, ...x: string[]): typeof x; } diff --git a/tests/baselines/reference/declFileGenericType.js b/tests/baselines/reference/declFileGenericType.js index ef8d6d453af..3c8120e8db9 100644 --- a/tests/baselines/reference/declFileGenericType.js +++ b/tests/baselines/reference/declFileGenericType.js @@ -120,9 +120,9 @@ export declare module C { class B { } function F(x: T): A; - function F2(x: T): A; - function F3(x: T): A[]; - function F4>(x: T): A[]; + function F2(x: T): C.A; + function F3(x: T): C.A[]; + function F4>(x: T): Array>; function F5(): T; function F6>(x: T): T; class D { diff --git a/tests/baselines/reference/declFileGenericType2.js b/tests/baselines/reference/declFileGenericType2.js index 0e0381cd87d..db1399e64d3 100644 --- a/tests/baselines/reference/declFileGenericType2.js +++ b/tests/baselines/reference/declFileGenericType2.js @@ -97,16 +97,16 @@ declare module templa.mvc { } } declare module templa.mvc { - interface IController { + interface IController { } } declare module templa.mvc { - class AbstractController implements IController { + class AbstractController implements mvc.IController { } } declare module templa.mvc.composite { - interface ICompositeControllerModel extends IModel { - getControllers(): IController[]; + interface ICompositeControllerModel extends mvc.IModel { + getControllers(): mvc.IController[]; } } declare module templa.dom.mvc { @@ -119,7 +119,7 @@ declare module templa.dom.mvc { } } declare module templa.dom.mvc.composite { - class AbstractCompositeElementController extends AbstractElementController { + class AbstractCompositeElementController extends templa.dom.mvc.AbstractElementController { _controllers: templa.mvc.IController[]; constructor(); } diff --git a/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.js b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.js index 5ff631c6aad..2d071c80de9 100644 --- a/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.js +++ b/tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.js @@ -32,8 +32,12 @@ var f6 = function () { //// [declFileRestParametersOfFunctionAndFunctionType.d.ts] declare function f1(...args: any[]): void; -declare function f2(x: (...args: any[]) => void): void; -declare function f3(x: (...args: any[]) => void): void; -declare function f4 void>(): void; -declare function f5 void>(): void; +declare function f2(x: (...args) => void): void; +declare function f3(x: { + (...args): void; +}): void; +declare function f4 void>(): void; +declare function f5(): void; declare var f6: () => any[]; diff --git a/tests/baselines/reference/declFileTypeofFunction.js b/tests/baselines/reference/declFileTypeofFunction.js index ea876e6dad8..2af519f411d 100644 --- a/tests/baselines/reference/declFileTypeofFunction.js +++ b/tests/baselines/reference/declFileTypeofFunction.js @@ -68,7 +68,7 @@ declare function f(n: typeof f): string; declare function f(n: typeof g): string; declare function g(n: typeof g): number; declare function g(n: typeof f): number; -declare var b: () => any; +declare var b: () => typeof b; declare function b1(): typeof b1; declare function foo(): typeof foo; declare var foo1: typeof foo; diff --git a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.js b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.js index 0bcbf2fff68..7da7dd8716a 100644 --- a/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.js +++ b/tests/baselines/reference/declFileWithClassNameConflictingWithClassReferredByExtendsClause.js @@ -78,7 +78,7 @@ declare module X.Y.base { } } declare module X.Y.base.Z { - class W extends base.W { + class W extends X.Y.base.W { value: boolean; } } diff --git a/tests/baselines/reference/declarationEmit_nameConflicts.js b/tests/baselines/reference/declarationEmit_nameConflicts.js index ab2e5fce42a..161224659f1 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts.js @@ -184,7 +184,7 @@ export declare module M.Q { interface I { } } - interface b extends M.C { + interface b extends M.b { } interface I extends M.c.I { } diff --git a/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.js b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.js index f58b1047b8f..a959e52bdae 100644 --- a/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.js +++ b/tests/baselines/reference/functionDeclarationWithArgumentOfTypeFunctionTypeArray.js @@ -11,4 +11,6 @@ function foo(args) { //// [functionDeclarationWithArgumentOfTypeFunctionTypeArray.d.ts] -declare function foo(args: ((x: any) => number)[]): number; +declare function foo(args: { + (x): number; +}[]): number; diff --git a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.js b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.js index b514fb088e9..608090e8722 100644 --- a/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.js +++ b/tests/baselines/reference/resolvingClassDeclarationWhenInBaseTypeResolution.js @@ -7510,7 +7510,7 @@ declare module julianae { declare module ruatanica { class hector { humulis(): julianae.steerii; - eurycerus(): panamensis.linulus, lavali.wilsoni>; + eurycerus(): panamensis.linulus, lavali.wilsoni>; } } declare module Lanthanum { @@ -7648,7 +7648,7 @@ declare module quasiater { crassicaudatus(): samarensis.cahirinus; mulatta(): argurus.oreas; ansorgei(): rendalli.moojeni, gabriellae.echinatus>; - Copper(): argurus.netscheri; + Copper(): argurus.netscheri; } } declare module ruatanica { @@ -7769,10 +7769,10 @@ declare module lutreolus { culionensis(): argurus.dauricus; scrofa(): petrophilus.sodyi; fernandoni(): quasiater.carolinensis; - Tin(): sagitta.leptoceros>; - marmorata(): panamensis.setulosus>; + Tin(): sagitta.leptoceros>; + marmorata(): panamensis.setulosus>; tavaratra(): Lanthanum.nitidus; - peregrina(): daubentonii.nesiotes; + peregrina(): daubentonii.nesiotes; frontalis(): macrorhinos.marmosurus>, samarensis.pallidus>; cuniculus(): patas.uralensis; magdalenae(): julianae.gerbillus>; @@ -7789,9 +7789,9 @@ declare module argurus { darienensis(): trivirgatus.oconnelli; hardwickii(): macrorhinos.daphaenodon; albifrons(): rionegrensis.veraecrucis; - jacobitus(): caurinus.johorensis>>; - guentheri(): rendalli.moojeni; - mahomet(): imperfecta.ciliolabrum; + jacobitus(): caurinus.johorensis>>; + guentheri(): rendalli.moojeni; + mahomet(): imperfecta.ciliolabrum; misionensis(): macrorhinos.marmosurus, gabriellae.echinatus>; } } @@ -7799,7 +7799,7 @@ declare module nigra { class dolichurus { solomonis(): panglima.abidi, argurus.netscheri, julianae.oralis>>>; alfredi(): caurinus.psilurus; - morrisi(): ruatanica.hector, quasiater.wattsi>>>; + morrisi(): ruatanica.hector, quasiater.wattsi>>>; lekaguli(): Lanthanum.nitidus; dimissus(): imperfecta.subspinosus; phaeotis(): julianae.sumatrana; @@ -7847,7 +7847,7 @@ declare module minutus { rusticus(): dogramacii.aurata; latona(): daubentonii.nesiotes; famulus(): patas.uralensis; - flaviceps(): inez>; + flaviceps(): minutus.inez>; paradoxolophus(): nigra.dolichurus>; Osmium(): lavali.wilsoni; vulgaris(): Lanthanum.nitidus; @@ -7858,12 +7858,12 @@ declare module minutus { } declare module caurinus { class mahaganus extends panglima.fundatus { - martiniquensis(): ruatanica.hector>>; + martiniquensis(): ruatanica.hector>>; devius(): samarensis.pelurus, trivirgatus.falconeri>>; masalai(): argurus.oreas; - kathleenae(): nigra.dolichurus; + kathleenae(): nigra.dolichurus; simulus(): gabriellae.echinatus; - nigrovittatus(): mahaganus>>; + nigrovittatus(): caurinus.mahaganus>>; senegalensis(): gabriellae.klossii, dammermani.melanops>; acticola(): argurus.luctuosa; } @@ -7875,7 +7875,7 @@ declare module macrorhinos { } declare module howi { class angulatus extends sagitta.stolzmanni { - pennatus(): marcanoi; + pennatus(): howi.marcanoi; } } declare module daubentonii { @@ -7923,13 +7923,13 @@ declare module panamensis { } declare module nigra { class gracilis { - weddellii(): dolichurus; + weddellii(): nigra.dolichurus; echinothrix(): Lanthanum.nitidus, argurus.oreas>; garridoi(): dogramacii.koepckeae; - rouxii(): gracilis, thalia>; + rouxii(): nigra.gracilis, nigra.thalia>; aurita(): sagitta.stolzmanni; geoffrensis(): rionegrensis.caniventer; - theresa(): macrorhinos.marmosurus, argurus.luctuosa>, dolichurus>; + theresa(): macrorhinos.marmosurus, argurus.luctuosa>, nigra.dolichurus>; melanocarpus(): julianae.albidens, julianae.sumatrana>; dubiaquercus(): dogramacii.robustulus; pectoralis(): julianae.sumatrana; @@ -7985,7 +7985,7 @@ declare module samarensis { } } declare module sagitta { - class leptoceros extends caurinus.johorensis> { + class leptoceros extends caurinus.johorensis> { victus(): rionegrensis.caniventer; hoplomyoides(): panglima.fundatus, nigra.gracilis>; gratiosus(): lavali.lepturus; @@ -8025,7 +8025,7 @@ declare module argurus { leucoptera(): petrophilus.rosalia; ochraventer(): sagitta.walkeri; tephromelas(): Lanthanum.jugularis; - cracens(): gilbertii; + cracens(): argurus.gilbertii; jamaicensis(): nigra.thalia>; gymnocaudus(): dogramacii.aurata; mayori(): sagitta.stolzmanni; @@ -8038,9 +8038,9 @@ declare module argurus { fagani(): trivirgatus.oconnelli; papuanus(): panglima.fundatus; timidus(): dammermani.melanops; - nghetinhensis(): gabriellae.klossii; + nghetinhensis(): gabriellae.klossii; barbei(): samarensis.cahirinus; - univittatus(): peninsulae; + univittatus(): argurus.peninsulae; } } declare module daubentonii { @@ -8085,7 +8085,7 @@ declare module provocax { declare module sagitta { class sicarius { Chlorine(): samarensis.cahirinus, dogramacii.robustulus>; - simulator(): macrorhinos.marmosurus, macrorhinos.marmosurus, gabriellae.echinatus>, stolzmanni>>; + simulator(): macrorhinos.marmosurus, macrorhinos.marmosurus, gabriellae.echinatus>, sagitta.stolzmanni>>; } } declare module howi { @@ -8096,7 +8096,7 @@ declare module howi { martinsi(): dogramacii.aurata; beatrix(): imperfecta.ciliolabrum, gabriellae.echinatus>, dogramacii.aurata>, imperfecta.ciliolabrum>>; griseoventer(): argurus.oreas; - zerda(): quasiater.wattsi, coludo>>; + zerda(): quasiater.wattsi, howi.coludo>>; yucatanicus(): julianae.nudicaudus; nigrita(): argurus.peninsulae; jouvenetae(): argurus.dauricus; @@ -8110,9 +8110,9 @@ declare module argurus { class gilbertii { nasutus(): lavali.lepturus; poecilops(): julianae.steerii; - sondaicus(): samarensis.fuscus; + sondaicus(): samarensis.fuscus; auriventer(): petrophilus.rosalia; - cherriei(): ruatanica.Praseodymium; + cherriei(): ruatanica.Praseodymium; lindberghi(): minutus.inez; pipistrellus(): quasiater.carolinensis; paranus(): lutreolus.punicus; @@ -8132,12 +8132,12 @@ declare module lutreolus { lar(): caurinus.mahaganus; erica(): dogramacii.koepckeae; trichura(): macrorhinos.konganensis; - lemniscatus(): panglima.fundatus; + lemniscatus(): panglima.fundatus; aspalax(): panamensis.linulus; marshalli(): julianae.nudicaudus; Zinc(): julianae.galapagoensis; - monochromos(): howi.coludo; - purinus(): ruatanica.hector; + monochromos(): howi.coludo; + purinus(): ruatanica.hector; ischyrus(): lavali.lepturus; tenuis(): macrorhinos.daphaenodon; Helium(): julianae.acariensis; @@ -8165,8 +8165,8 @@ declare module sagitta { dorsalis(): petrophilus.sodyi; fimbriatus(): provocax.melanoleuca; sara(): nigra.gracilis; - epimelas(): stolzmanni; - pittieri(): samarensis.fuscus; + epimelas(): sagitta.stolzmanni; + pittieri(): samarensis.fuscus; } } declare module nigra { @@ -8264,7 +8264,7 @@ declare module minutus { } declare module lutreolus { class foina { - tarfayensis(): punicus; + tarfayensis(): lutreolus.punicus; Promethium(): samarensis.pelurus; salinae(): gabriellae.klossii; kerri(): howi.coludo; @@ -8276,7 +8276,7 @@ declare module lutreolus { layardi(): julianae.albidens; bishopi(): dogramacii.aurata; apodemoides(): caurinus.psilurus; - argentiventer(): trivirgatus.mixtus; + argentiventer(): trivirgatus.mixtus; } } declare module lutreolus { @@ -8284,7 +8284,7 @@ declare module lutreolus { antinorii(): petrophilus.sodyi; voi(): caurinus.johorensis; mussoi(): quasiater.carolinensis; - truncatus(): trivirgatus.lotor; + truncatus(): trivirgatus.lotor; achates(): provocax.melanoleuca; praedatrix(): howi.angulatus; mzabi(): quasiater.wattsi, minutus.inez>; @@ -8321,8 +8321,8 @@ declare module sagitta { } } declare module dammermani { - class melanops extends minutus.inez { - blarina(): melanops; + class melanops extends minutus.inez { + blarina(): dammermani.melanops; harwoodi(): rionegrensis.veraecrucis, lavali.wilsoni>; ashaninka(): julianae.nudicaudus; wiedii(): julianae.steerii; @@ -8339,14 +8339,14 @@ declare module dammermani { } declare module argurus { class peninsulae extends patas.uralensis { - aitkeni(): trivirgatus.mixtus, panglima.amphibius>; + aitkeni(): trivirgatus.mixtus, panglima.amphibius>; novaeangliae(): lavali.xanthognathus; olallae(): julianae.sumatrana; anselli(): dogramacii.aurata; timminsi(): macrorhinos.konganensis; sordidus(): rendalli.moojeni; telfordi(): trivirgatus.oconnelli; - cavernarum(): minutus.inez; + cavernarum(): minutus.inez; } } declare module argurus { @@ -8354,21 +8354,21 @@ declare module argurus { gravis(): nigra.caucasica, dogramacii.kaiseri>; ruschii(): imperfecta.lasiurus>; tricuspidatus(): lavali.wilsoni; - fernandezi(): dammermani.siberu, panglima.abidi>; + fernandezi(): dammermani.siberu, panglima.abidi>; colletti(): samarensis.pallidus; microbullatus(): lutreolus.schlegeli; eburneae(): chrysaeolus.sarasinorum; - tatei(): pygmaea>; + tatei(): argurus.pygmaea>; millardi(): sagitta.walkeri; pruinosus(): trivirgatus.falconeri; - delator(): netscheri; + delator(): argurus.netscheri; nyikae(): trivirgatus.tumidifrons, petrophilus.minutilla>, julianae.acariensis>; ruemmleri(): panglima.amphibius, gabriellae.echinatus>, dogramacii.aurata>, imperfecta.ciliolabrum>; } } declare module ruatanica { - class Praseodymium extends hector { - clara(): panglima.amphibius, argurus.dauricus>; + class Praseodymium extends ruatanica.hector { + clara(): panglima.amphibius, argurus.dauricus>; spectabilis(): petrophilus.sodyi; kamensis(): trivirgatus.lotor, lavali.lepturus>; ruddi(): lutreolus.foina; @@ -8416,7 +8416,7 @@ declare module petrophilus { } declare module caurinus { class psilurus extends lutreolus.punicus { - socialis(): panglima.amphibius; + socialis(): panglima.amphibius; lundi(): petrophilus.sodyi; araeum(): imperfecta.ciliolabrum; calamianensis(): julianae.gerbillus; diff --git a/tests/baselines/reference/typeofUndefined.js b/tests/baselines/reference/typeofUndefined.js index f21bc529f9e..5d9d4681eb9 100644 --- a/tests/baselines/reference/typeofUndefined.js +++ b/tests/baselines/reference/typeofUndefined.js @@ -9,5 +9,5 @@ var x; // shouldn't be an error since type is the same as the first declaration //// [typeofUndefined.d.ts] -declare var x: any; +declare var x: typeof undefined; declare var x: any; diff --git a/tests/baselines/reference/vardecl.js b/tests/baselines/reference/vardecl.js index 5ce8e095020..3ff8f4e8ab3 100644 --- a/tests/baselines/reference/vardecl.js +++ b/tests/baselines/reference/vardecl.js @@ -191,7 +191,7 @@ declare var complicatedArrayVar: { y: string; }[]; declare var n1: { - [x: string]: number; + [s: string]: number; }; declare var c: { new?(): any; @@ -212,8 +212,12 @@ declare var d2: { x: number; }; }; -declare var n2: () => void; -declare var n4: (() => void)[]; +declare var n2: { + (): void; +}; +declare var n4: { + (): void; +}[]; declare var d4: { foo(n: string, x: { x: number; From ffdb0fc45da1d05eee27009674b3343982ba0b54 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 15:56:18 -0800 Subject: [PATCH 019/178] Show error about entity name visibility on entity name resulting in the error --- src/compiler/checker.ts | 23 +- src/compiler/emitter.ts | 8 +- .../aliasInaccessibleModule.errors.txt | 4 +- .../aliasInaccessibleModule2.errors.txt | 4 +- .../reference/declInput-2.errors.txt | 20 +- .../privacyAccessorDeclFile.errors.txt | 120 +++---- .../privacyCheckTypeOfFunction.errors.txt | 4 +- ...CheckTypeOfInvisibleModuleError.errors.txt | 4 +- ...eckTypeOfInvisibleModuleNoError.errors.txt | 4 +- ...ivacyClassExtendsClauseDeclFile.errors.txt | 8 +- ...cyClassImplementsClauseDeclFile.errors.txt | 8 +- ...rivacyFunctionParameterDeclFile.errors.txt | 300 +++++++++--------- ...ivacyFunctionReturnTypeDeclFile.errors.txt | 240 +++++++------- .../reference/privacyGloImport.errors.txt | 8 +- .../reference/privacyImport.errors.txt | 8 +- ...yInterfaceExtendsClauseDeclFile.errors.txt | 8 +- ...ternalReferenceImportWithExport.errors.txt | 28 +- ...nalReferenceImportWithoutExport.errors.txt | 20 +- ...ternalReferenceImportWithExport.errors.txt | 28 +- ...nalReferenceImportWithoutExport.errors.txt | 20 +- ...TypeParameterOfFunctionDeclFile.errors.txt | 192 +++++------ ...cyTypeParametersOfClassDeclFile.errors.txt | 20 +- ...peParametersOfInterfaceDeclFile.errors.txt | 92 +++--- .../reference/privacyVarDeclFile.errors.txt | 150 ++++----- 24 files changed, 651 insertions(+), 670 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 21255d5ed94..5a044d7dadd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1001,28 +1001,9 @@ module ts { var symbol = resolveName(enclosingDeclaration, (firstIdentifier).text, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined); // Verify if the symbol is accessible - var isVisible = hasVisibleDeclarations(symbol); - if (isVisible) { - return isVisible; - } - - // Not visible populate error info - var errorSymbolName: string; - var errorModuleName: string; - // TODO(shkamat) For now lets just do this for alias declarations, but in all cases only first identifier text should be enough - if (entityName.parent.kind === SyntaxKind.ImportDeclaration) { - errorSymbolName = getTextOfNode(firstIdentifier); - } - else { - errorSymbolName = getTextOfNode(entityName); - errorModuleName = entityName.kind === SyntaxKind.QualifiedName ? - getTextOfNode(firstIdentifier) : - undefined; - } - return { + return hasVisibleDeclarations(symbol) || { accessibility: SymbolAccessibility.NotAccessible, - errorSymbolName: errorSymbolName, - errorModuleName: errorModuleName + errorSymbolName: getTextOfNode(firstIdentifier), }; } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 70e4d0c1328..3faeea6cc44 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2562,7 +2562,7 @@ module ts { setWriter(oldWriter); } - function handleSymbolAccessibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function handleSymbolAccessibilityError(symbolAccesibilityResult: SymbolAccessiblityResult, errorNode?: Node) { if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { // write the aliases if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { @@ -2575,14 +2575,14 @@ module ts { var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult); if (errorInfo) { if (errorInfo.typeName) { - diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, + diagnostics.push(createDiagnosticForNode(errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); } else { - diagnostics.push(createDiagnosticForNode(errorInfo.errorNode, + diagnostics.push(createDiagnosticForNode(errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); @@ -2690,7 +2690,7 @@ module ts { // Aliases can be written asynchronously so use correct enclosing declaration entityName.parent.kind === SyntaxKind.ImportDeclaration ? entityName.parent : enclosingDeclaration); - handleSymbolAccessibilityError(visibilityResult); + handleSymbolAccessibilityError(visibilityResult, entityName); writeEntityName(entityName); function writeEntityName(entityName: EntityName) { diff --git a/tests/baselines/reference/aliasInaccessibleModule.errors.txt b/tests/baselines/reference/aliasInaccessibleModule.errors.txt index 9967979442a..3a9c64e50ab 100644 --- a/tests/baselines/reference/aliasInaccessibleModule.errors.txt +++ b/tests/baselines/reference/aliasInaccessibleModule.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/aliasInaccessibleModule.ts(4,5): error TS4000: Import declaration 'X' is using private name 'N'. +tests/cases/compiler/aliasInaccessibleModule.ts(4,23): error TS4000: Import declaration 'X' is using private name 'N'. ==== tests/cases/compiler/aliasInaccessibleModule.ts (1 errors) ==== @@ -6,6 +6,6 @@ tests/cases/compiler/aliasInaccessibleModule.ts(4,5): error TS4000: Import decla module N { } export import X = N; - ~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS4000: Import declaration 'X' is using private name 'N'. } \ No newline at end of file diff --git a/tests/baselines/reference/aliasInaccessibleModule2.errors.txt b/tests/baselines/reference/aliasInaccessibleModule2.errors.txt index ffeb4ff86dd..03a37147aba 100644 --- a/tests/baselines/reference/aliasInaccessibleModule2.errors.txt +++ b/tests/baselines/reference/aliasInaccessibleModule2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/aliasInaccessibleModule2.ts(7,5): error TS4000: Import declaration 'R' is using private name 'N'. +tests/cases/compiler/aliasInaccessibleModule2.ts(7,16): error TS4000: Import declaration 'R' is using private name 'N'. ==== tests/cases/compiler/aliasInaccessibleModule2.ts (1 errors) ==== @@ -9,7 +9,7 @@ tests/cases/compiler/aliasInaccessibleModule2.ts(7,5): error TS4000: Import decl } import R = N; - ~~~~~~~~~~~~~ + ~ !!! error TS4000: Import declaration 'R' is using private name 'N'. export import X = R; } \ No newline at end of file diff --git a/tests/baselines/reference/declInput-2.errors.txt b/tests/baselines/reference/declInput-2.errors.txt index ed0be8f64e5..f151f3e7122 100644 --- a/tests/baselines/reference/declInput-2.errors.txt +++ b/tests/baselines/reference/declInput-2.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/declInput-2.ts(10,9): error TS4031: Public property 'm22' of exported class has or is using private name 'C'. -tests/cases/compiler/declInput-2.ts(13,9): error TS4031: Public property 'm25' of exported class has or is using private name 'I2'. -tests/cases/compiler/declInput-2.ts(16,16): error TS4055: Return type of public method from exported class has or is using private name 'I2'. -tests/cases/compiler/declInput-2.ts(18,21): error TS4073: Parameter 'i' of public method from exported class has or is using private name 'I2'. -tests/cases/compiler/declInput-2.ts(19,16): error TS4055: Return type of public method from exported class has or is using private name 'C'. +tests/cases/compiler/declInput-2.ts(10,21): error TS4031: Public property 'm22' of exported class has or is using private name 'C'. +tests/cases/compiler/declInput-2.ts(13,21): error TS4031: Public property 'm25' of exported class has or is using private name 'I2'. +tests/cases/compiler/declInput-2.ts(16,24): error TS4055: Return type of public method from exported class has or is using private name 'I2'. +tests/cases/compiler/declInput-2.ts(18,23): error TS4073: Parameter 'i' of public method from exported class has or is using private name 'I2'. +tests/cases/compiler/declInput-2.ts(19,21): error TS4055: Return type of public method from exported class has or is using private name 'C'. ==== tests/cases/compiler/declInput-2.ts (5 errors) ==== @@ -16,24 +16,24 @@ tests/cases/compiler/declInput-2.ts(19,16): error TS4055: Return type of public public m1: number; public m2: string; public m22: C; // don't generate - ~~~~~~~~~~~~~~ + ~ !!! error TS4031: Public property 'm22' of exported class has or is using private name 'C'. public m23: E; public m24: I1; public m25: I2; // don't generate - ~~~~~~~~~~~~~~~ + ~~ !!! error TS4031: Public property 'm25' of exported class has or is using private name 'I2'. public m232(): E { return null;} public m242(): I1 { return null; } public m252(): I2 { return null; } // don't generate - ~~~~ + ~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'I2'. public m26(i:I1) {} public m262(i:I2) {} - ~~~~ + ~~ !!! error TS4073: Parameter 'i' of public method from exported class has or is using private name 'I2'. public m3():C { return new C(); } - ~~ + ~ !!! error TS4055: Return type of public method from exported class has or is using private name 'C'. } } \ No newline at end of file diff --git a/tests/baselines/reference/privacyAccessorDeclFile.errors.txt b/tests/baselines/reference/privacyAccessorDeclFile.errors.txt index 59c460d4800..31147f04716 100644 --- a/tests/baselines/reference/privacyAccessorDeclFile.errors.txt +++ b/tests/baselines/reference/privacyAccessorDeclFile.errors.txt @@ -1,39 +1,39 @@ -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(253,20): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(259,13): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(253,44): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(259,31): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(265,20): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(271,13): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(361,41): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(365,28): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(405,20): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(408,13): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(361,48): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(365,35): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(405,44): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(408,31): error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(411,20): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(414,13): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(420,41): error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(422,28): error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(9,16): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(15,9): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(420,48): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_GlobalFile.ts(422,35): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(9,40): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(15,27): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(21,16): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(27,9): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(117,37): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(121,24): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(161,16): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(164,9): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(117,44): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(121,31): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(161,40): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(164,27): error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(167,16): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(170,9): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(176,37): error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(178,24): error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(211,20): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(217,13): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(176,44): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(178,31): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(211,44): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(217,31): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(223,20): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(229,13): error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(319,41): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(323,28): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(363,20): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(366,13): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(319,48): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(323,35): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(363,44): error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(366,31): error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(369,20): error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(372,13): error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(378,41): error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(378,48): error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts (24 errors) ==== @@ -46,7 +46,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithWithPrivateGetAccessorTypes { static get myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. return null; } @@ -54,7 +54,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS return null; } get myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. return null; } @@ -162,13 +162,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithWithPrivateSetAccessorTypes { static set myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. } private static set myPrivateStaticMethod(param: privateClass) { } set myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. } private set myPrivateMethod(param: privateClass) { @@ -210,13 +210,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } static get myPublicStaticMethod1() { // Error @@ -233,12 +233,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } @@ -272,7 +272,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS } export class publicClassWithWithPrivateGetAccessorTypes { static get myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. return null; } @@ -280,7 +280,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS return null; } get myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. return null; } @@ -388,13 +388,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithWithPrivateSetAccessorTypes { static set myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. } private static set myPrivateStaticMethod(param: privateClass) { } set myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. } private set myPrivateMethod(param: privateClass) { @@ -436,13 +436,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } static get myPublicStaticMethod1() { // Error @@ -459,12 +459,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } @@ -948,7 +948,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithWithPrivateGetAccessorTypes { static get myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateClass'. return null; } @@ -956,7 +956,7 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS return null; } get myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateClass'. return null; } @@ -1064,13 +1064,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithWithPrivateSetAccessorTypes { static set myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateClass'. } private static set myPrivateStaticMethod(param: privateClass) { } set myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateClass'. } private set myPrivateMethod(param: privateClass) { @@ -1112,13 +1112,13 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4039: Return type of public static property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4042: Return type of public property getter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } static get myPublicStaticMethod1() { // Error @@ -1135,12 +1135,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,28): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4036: Parameter 'myPublicMethod' of public property setter from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } diff --git a/tests/baselines/reference/privacyCheckTypeOfFunction.errors.txt b/tests/baselines/reference/privacyCheckTypeOfFunction.errors.txt index 5f2a0adc9e0..88801e06dfd 100644 --- a/tests/baselines/reference/privacyCheckTypeOfFunction.errors.txt +++ b/tests/baselines/reference/privacyCheckTypeOfFunction.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/privacyCheckTypeOfFunction.ts(3,12): error TS4025: Exported variable 'x' has or is using private name 'foo'. +tests/cases/compiler/privacyCheckTypeOfFunction.ts(3,22): error TS4025: Exported variable 'x' has or is using private name 'foo'. tests/cases/compiler/privacyCheckTypeOfFunction.ts(4,12): error TS4025: Exported variable 'b' has or is using private name 'foo'. @@ -6,7 +6,7 @@ tests/cases/compiler/privacyCheckTypeOfFunction.ts(4,12): error TS4025: Exported function foo() { } export var x: typeof foo; - ~ + ~~~ !!! error TS4025: Exported variable 'x' has or is using private name 'foo'. export var b = foo; ~ diff --git a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleError.errors.txt b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleError.errors.txt index fa8de5499db..e8accf360dc 100644 --- a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleError.errors.txt +++ b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleError.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/privacyCheckTypeOfInvisibleModuleError.ts(6,16): error TS4025: Exported variable 'f' has or is using private name 'Inner'. +tests/cases/compiler/privacyCheckTypeOfInvisibleModuleError.ts(6,26): error TS4025: Exported variable 'f' has or is using private name 'Inner'. ==== tests/cases/compiler/privacyCheckTypeOfInvisibleModuleError.ts (1 errors) ==== @@ -8,7 +8,7 @@ tests/cases/compiler/privacyCheckTypeOfInvisibleModuleError.ts(6,16): error TS40 } export var f: typeof Inner; - ~ + ~~~~~ !!! error TS4025: Exported variable 'f' has or is using private name 'Inner'. } \ No newline at end of file diff --git a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.errors.txt b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.errors.txt index 917e4e62e83..bbc8954cff1 100644 --- a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.errors.txt +++ b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/privacyCheckTypeOfInvisibleModuleNoError.ts(6,16): error TS4025: Exported variable 'f' has or is using private name 'Inner'. +tests/cases/compiler/privacyCheckTypeOfInvisibleModuleNoError.ts(6,26): error TS4025: Exported variable 'f' has or is using private name 'Inner'. ==== tests/cases/compiler/privacyCheckTypeOfInvisibleModuleNoError.ts (1 errors) ==== @@ -8,7 +8,7 @@ tests/cases/compiler/privacyCheckTypeOfInvisibleModuleNoError.ts(6,16): error TS } export var f: typeof Inner; // Since we dont unwind inner any more, it is error here - ~ + ~~~~~ !!! error TS4025: Exported variable 'f' has or is using private name 'Inner'. } \ No newline at end of file diff --git a/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt index 4ec739d6ce6..9bd892d6b69 100644 --- a/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt @@ -1,8 +1,8 @@ tests/cases/compiler/privacyClassExtendsClauseDeclFile_GlobalFile.ts(16,67): error TS4020: Extends clause of exported class 'publicClassExtendingPrivateClassInModule' has or is using private name 'privateClassInPublicModule'. tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(17,67): error TS4020: Extends clause of exported class 'publicClassExtendingPrivateClassInModule' has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(22,69): error TS4018: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(22,69): error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(64,55): error TS4020: Extends clause of exported class 'publicClassExtendingPrivateClass' has or is using private name 'privateClass'. -tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): error TS4018: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts (4 errors) ==== @@ -31,7 +31,7 @@ tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): } export class publicClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4018: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +!!! error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. } } @@ -82,7 +82,7 @@ tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): } export class publicClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4018: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +!!! error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. } ==== tests/cases/compiler/privacyClassExtendsClauseDeclFile_GlobalFile.ts (1 errors) ==== diff --git a/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt index 07a1c6a357b..6e74ad8b2ad 100644 --- a/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt @@ -1,9 +1,9 @@ tests/cases/compiler/privacyClassImplementsClauseDeclFile_GlobalFile.ts(14,77): error TS4019: Implements clause of exported class 'publicClassImplementingPrivateInterfaceInModule' has or is using private name 'privateInterfaceInPublicModule'. tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(15,77): error TS4019: Implements clause of exported class 'publicClassImplementingPrivateInterfaceInModule' has or is using private name 'privateInterfaceInPublicModule'. -tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(20,79): error TS4017: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(20,79): error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(23,78): error TS4019: Implements clause of exported class 'publicClassImplementingPrivateAndPublicInterface' has or is using private name 'privateInterfaceInPublicModule'. tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(63,65): error TS4019: Implements clause of exported class 'publicClassImplementingPrivateInterface' has or is using private name 'privateInterface'. -tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,75): error TS4017: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,75): error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts (5 errors) ==== @@ -30,7 +30,7 @@ tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,7 } export class publicClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4017: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +!!! error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } export class publicClassImplementingPrivateAndPublicInterface implements privateInterfaceInPublicModule, publicInterfaceInPublicModule { // Should error @@ -84,7 +84,7 @@ tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,7 } export class publicClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4017: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +!!! error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } ==== tests/cases/compiler/privacyClassImplementsClauseDeclFile_GlobalFile.ts (1 errors) ==== diff --git a/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt b/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt index ce0ff604570..851032858e7 100644 --- a/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt +++ b/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt @@ -1,63 +1,63 @@ -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(164,14): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(165,10): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(166,18): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(188,37): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(192,24): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,21): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,42): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,72): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(239,60): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(248,75): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(254,14): error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(255,10): error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(256,18): error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(259,37): error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(261,24): error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,21): error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,55): error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,98): error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(266,67): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(268,82): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(9,10): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(10,6): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(11,14): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(33,33): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(37,20): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,17): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,38): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,68): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(84,56): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(93,71): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(99,10): error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(100,6): error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(101,14): error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(104,33): error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(106,20): error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,17): error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,51): error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,94): error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(111,63): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(113,78): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(141,14): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(142,10): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(143,18): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(165,37): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(169,24): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,21): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,42): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,72): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(216,60): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(225,75): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(231,14): error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(232,10): error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(233,18): error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(236,37): error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(238,24): error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,21): error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,55): error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,98): error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(243,67): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(164,21): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(165,17): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(166,25): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(188,44): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(192,31): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,28): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,58): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(196,87): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(239,67): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(248,82): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(254,21): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(255,17): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(256,25): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(259,44): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(261,31): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,28): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,71): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(263,113): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(266,74): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_GlobalFile.ts(268,89): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(9,17): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(10,13): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(11,21): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(33,40): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(37,27): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,24): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,54): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(41,83): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(84,63): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(93,78): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(99,17): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(100,13): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(101,21): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(104,40): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(106,27): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,24): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,67): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(108,109): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(111,70): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(113,85): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(141,21): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(142,17): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(143,25): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(165,44): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(169,31): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,28): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,58): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(173,87): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(216,67): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(225,82): error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(231,21): error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(232,17): error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(233,25): error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(236,44): error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(238,31): error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,28): error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,71): error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(240,113): error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(243,74): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,89): error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts (40 errors) ==== @@ -70,13 +70,13 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateParmeterTypes { new (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. myMethod(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. } @@ -100,23 +100,23 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. } private static myPrivateStaticMethod(param: privateClass) { } myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. } private myPrivateMethod(param: privateClass) { } constructor(param: privateClass, private param1: privateClass, public param2: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. } } @@ -161,7 +161,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export function publicFunctionWithPrivateParmeterTypes(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. } export function publicFunctionWithPublicParmeterTypes(param: publicClass) { @@ -172,7 +172,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export declare function publicAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(param: publicClass): void; declare function privateAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; @@ -180,40 +180,40 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; @@ -242,13 +242,13 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateParmeterTypes { new (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. myMethod(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. } @@ -272,23 +272,23 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. } private static myPrivateStaticMethod(param: privateClass) { } myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. } private myPrivateMethod(param: privateClass) { } constructor(param: privateClass, private param1: privateClass, public param2: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. } } @@ -333,7 +333,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export function publicFunctionWithPrivateParmeterTypes(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. } export function publicFunctionWithPublicParmeterTypes(param: publicClass) { @@ -344,7 +344,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export declare function publicAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(param: publicClass): void; declare function privateAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; @@ -352,40 +352,40 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; @@ -703,13 +703,13 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateParmeterTypes { new (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateClass'. (param: privateClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateClass'. myMethod(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateClass'. } @@ -733,23 +733,23 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateClass'. } private static myPrivateStaticMethod(param: privateClass) { } myPublicMethod(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateClass'. } private myPrivateMethod(param: privateClass) { } constructor(param: privateClass, private param1: privateClass, public param2: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateClass'. } } @@ -794,7 +794,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export function publicFunctionWithPrivateParmeterTypes(param: privateClass) { // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. } export function publicFunctionWithPublicParmeterTypes(param: publicClass) { @@ -805,7 +805,7 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): } export declare function publicAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; // Error - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(param: publicClass): void; declare function privateAmbientFunctionWithPrivateParmeterTypes(param: privateClass): void; @@ -813,40 +813,40 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,82): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4064: Parameter 'param' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4066: Parameter 'param' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4074: Parameter 'param' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4069: Parameter 'param' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4072: Parameter 'param' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param1' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4062: Parameter 'param2' of constructor from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4077: Parameter 'param' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; diff --git a/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt b/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt index 2efd3d3323a..b3aa71a3143 100644 --- a/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt +++ b/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt @@ -1,69 +1,69 @@ -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(281,9): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(282,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(283,9): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(284,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(309,16): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(315,9): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(281,17): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(282,13): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(283,22): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(284,21): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(309,40): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(315,27): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(321,16): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(327,9): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(416,21): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(416,63): error TS4060: Return type of exported function has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(428,21): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(441,29): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(447,9): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(448,9): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(449,9): error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(450,9): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(453,16): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(456,9): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(441,78): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(447,17): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(448,13): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(449,22): error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(450,21): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(453,40): error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(456,27): error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(459,16): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(462,9): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(466,21): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(466,70): error TS4060: Return type of exported function has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(469,21): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(472,29): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(9,5): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(10,5): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(11,5): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(12,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(37,12): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(43,5): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_GlobalFile.ts(472,85): error TS4060: Return type of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(9,13): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(10,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(11,18): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(12,17): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(37,36): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(43,23): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(49,12): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(55,5): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(144,17): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(144,59): error TS4060: Return type of exported function has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(156,17): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(169,25): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(175,5): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(176,5): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(177,5): error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(178,5): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(181,12): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(184,5): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(169,74): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(175,13): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(176,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(177,18): error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(178,17): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(181,36): error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(184,23): error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(187,12): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(190,5): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(194,17): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(194,66): error TS4060: Return type of exported function has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(197,17): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(200,25): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(238,9): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(239,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(240,9): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(241,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(266,16): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(272,9): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(200,81): error TS4060: Return type of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(238,17): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(239,13): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(240,22): error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(241,21): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(266,40): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(272,27): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(278,16): error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(284,9): error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(373,21): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(373,63): error TS4060: Return type of exported function has or is using private name 'privateClass'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(385,21): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(398,29): error TS4060: Return type of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(404,9): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(405,9): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(406,9): error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(407,9): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(410,16): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(413,9): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(398,78): error TS4060: Return type of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(404,17): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(405,13): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(406,22): error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(407,21): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(410,40): error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(413,27): error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(416,16): error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(419,9): error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(423,21): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(423,70): error TS4060: Return type of exported function has or is using private name 'privateModule'. tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(426,21): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29): error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85): error TS4060: Return type of exported function has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts (44 errors) ==== @@ -76,16 +76,16 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateParmeterTypes { new (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. (): privateClass; // Error - ~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. [x: number]: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. myMethod(): privateClass; // Error - ~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. } @@ -112,7 +112,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. return null; } @@ -120,7 +120,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return null; } myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. return null; } @@ -227,7 +227,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export function publicFunctionWithPrivateParmeterTypes(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. return null; } @@ -256,7 +256,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export declare function publicAmbientFunctionWithPrivateParmeterTypes(): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(): publicClass; declare function privateAmbientFunctionWithPrivateParmeterTypes(): privateClass; @@ -264,27 +264,27 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~ -!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } static myPublicStaticMethod1() { // Error @@ -299,8 +299,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } export function publicFunctionWithPrivateModuleParameterTypes1() { // Error @@ -309,8 +309,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; @@ -349,16 +349,16 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateParmeterTypes { new (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. (): privateClass; // Error - ~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. [x: number]: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. myMethod(): privateClass; // Error - ~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. } @@ -385,7 +385,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. return null; } @@ -393,7 +393,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return null; } myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. return null; } @@ -500,7 +500,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export function publicFunctionWithPrivateParmeterTypes(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. return null; } @@ -529,7 +529,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export declare function publicAmbientFunctionWithPrivateParmeterTypes(): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(): publicClass; declare function privateAmbientFunctionWithPrivateParmeterTypes(): privateClass; @@ -537,27 +537,27 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~ -!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } static myPublicStaticMethod1() { // Error @@ -572,8 +572,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } export function publicFunctionWithPrivateModuleParameterTypes1() { // Error @@ -582,8 +582,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; @@ -1126,16 +1126,16 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateParmeterTypes { new (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. (): privateClass; // Error - ~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. [x: number]: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateClass'. myMethod(): privateClass; // Error - ~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. } @@ -1162,7 +1162,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export class publicClassWithWithPrivateParmeterTypes { static myPublicStaticMethod(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateClass'. return null; } @@ -1170,7 +1170,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return null; } myPublicMethod(): privateClass { // Error - ~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateClass'. return null; } @@ -1277,7 +1277,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export function publicFunctionWithPrivateParmeterTypes(): privateClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. return null; } @@ -1306,7 +1306,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } export declare function publicAmbientFunctionWithPrivateParmeterTypes(): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateClass'. export declare function publicAmbientFunctionWithPublicParmeterTypes(): publicClass; declare function privateAmbientFunctionWithPrivateParmeterTypes(): privateClass; @@ -1314,27 +1314,27 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4048: Return type of index signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~ -!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4051: Return type of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~ -!!! error TS4054: Return type of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } static myPublicStaticMethod1() { // Error @@ -1349,8 +1349,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } export function publicFunctionWithPrivateModuleParameterTypes1() { // Error @@ -1359,8 +1359,8 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,29) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4059: Return type of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; diff --git a/tests/baselines/reference/privacyGloImport.errors.txt b/tests/baselines/reference/privacyGloImport.errors.txt index b5578216980..933af3315a7 100644 --- a/tests/baselines/reference/privacyGloImport.errors.txt +++ b/tests/baselines/reference/privacyGloImport.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/privacyGloImport.ts(49,5): error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. -tests/cases/compiler/privacyGloImport.ts(80,5): error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. +tests/cases/compiler/privacyGloImport.ts(49,29): error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. +tests/cases/compiler/privacyGloImport.ts(80,35): error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. ==== tests/cases/compiler/privacyGloImport.ts (2 errors) ==== @@ -52,7 +52,7 @@ tests/cases/compiler/privacyGloImport.ts(80,5): error TS4000: Import declaration import m1_im2_private = m1_M2_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. export var m1_im2_private_v1_public = m1_im2_private.c1; export var m1_im2_private_v2_public = new m1_im2_private.c1(); @@ -85,7 +85,7 @@ tests/cases/compiler/privacyGloImport.ts(80,5): error TS4000: Import declaration export import m1_im1_public = m1_M1_public; export import m1_im2_public = m1_M2_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. //export import m1_im3_public = require("m1_M3_public"); //export import m1_im4_public = require("m1_M4_private"); diff --git a/tests/baselines/reference/privacyImport.errors.txt b/tests/baselines/reference/privacyImport.errors.txt index 931bbf13ff0..d5cb61d99b5 100644 --- a/tests/baselines/reference/privacyImport.errors.txt +++ b/tests/baselines/reference/privacyImport.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/privacyImport.ts(49,5): error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. -tests/cases/compiler/privacyImport.ts(80,5): error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. +tests/cases/compiler/privacyImport.ts(49,29): error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. +tests/cases/compiler/privacyImport.ts(80,35): error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. ==== tests/cases/compiler/privacyImport.ts (2 errors) ==== @@ -52,7 +52,7 @@ tests/cases/compiler/privacyImport.ts(80,5): error TS4000: Import declaration 'm import m1_im2_private = m1_M2_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. export var m1_im2_private_v1_public = m1_im2_private.c1; export var m1_im2_private_v2_public = new m1_im2_private.c1(); @@ -85,7 +85,7 @@ tests/cases/compiler/privacyImport.ts(80,5): error TS4000: Import declaration 'm export import m1_im1_public = m1_M1_public; export import m1_im2_public = m1_M2_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. //export import m1_im3_public = require("m1_M3_public"); //export import m1_im4_public = require("m1_M4_private"); diff --git a/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt index 64cbd76763f..dadbaa018ba 100644 --- a/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt @@ -1,9 +1,9 @@ tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_GlobalFile.ts(14,82): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingPrivateInterfaceInModule' has or is using private name 'privateInterfaceInPublicModule'. tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(15,82): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingPrivateInterfaceInModule' has or is using private name 'privateInterfaceInPublicModule'. -tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(20,84): error TS4021: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(20,84): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(23,83): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingPrivateAndPublicInterface' has or is using private name 'privateInterfaceInPublicModule'. tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(63,70): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingPrivateInterface' has or is using private name 'privateInterface'. -tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68,80): error TS4021: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68,80): error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts (5 errors) ==== @@ -30,7 +30,7 @@ tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68, } export interface publicInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4021: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +!!! error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } export interface publicInterfaceImplementingPrivateAndPublicInterface extends privateInterfaceInPublicModule, publicInterfaceInPublicModule { // Should error @@ -84,7 +84,7 @@ tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68, } export interface publicInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { // Should error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4021: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using name 'privateModule.publicInterfaceInPrivateModule' from private module 'privateModule'. +!!! error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } ==== tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_GlobalFile.ts (1 errors) ==== diff --git a/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt b/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt index 77eef3f32a5..5b6d1af921d 100644 --- a/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt +++ b/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(51,5): error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(52,5): error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(53,5): error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(54,5): error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(55,5): error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(56,5): error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(57,5): error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(51,41): error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(52,41): error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(53,41): error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(54,41): error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(55,41): error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(56,42): error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(57,42): error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. ==== tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts (7 errors) ==== @@ -59,25 +59,25 @@ tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(57,5): err export module import_public { // Privacy errors - importing private elements export import im_public_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. export import im_public_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. export import im_public_f_private = m_private.f_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. export import im_public_v_private = m_private.v_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. export import im_public_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. export import im_public_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. export import im_public_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. // Usage of privacy error imports diff --git a/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt b/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt index c5b18127129..0060febb7ad 100644 --- a/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt +++ b/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(51,5): error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(52,5): error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(55,5): error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(56,5): error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. -tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(57,5): error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(51,35): error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(52,35): error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(55,35): error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(56,36): error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. +tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(57,36): error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. ==== tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts (5 errors) ==== @@ -57,21 +57,21 @@ tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(57,5): export module import_public { // No Privacy errors - importing private elements import im_private_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. import im_private_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. import im_private_f_private = m_private.f_private; import im_private_v_private = m_private.v_private; import im_private_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. import im_private_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. import im_private_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. // Usage of above decls diff --git a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt index e601feabe91..c3708c45311 100644 --- a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt +++ b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(50,1): error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(51,1): error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(52,1): error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(53,1): error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(54,1): error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(55,1): error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(56,1): error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(50,37): error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(51,37): error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(52,37): error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(53,37): error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(54,37): error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(55,38): error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(56,38): error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. ==== tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts (7 errors) ==== @@ -58,25 +58,25 @@ tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(56,1): // Privacy errors - importing private elements export import im_public_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. export import im_public_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. export import im_public_f_private = m_private.f_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. export import im_public_v_private = m_private.v_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. export import im_public_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. export import im_public_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. export import im_public_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. // Usage of privacy error imports diff --git a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt index 739f2fafaea..ac7c865c4f1 100644 --- a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt +++ b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(51,1): error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(52,1): error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(55,1): error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(56,1): error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. -tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(57,1): error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(51,31): error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(52,31): error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(55,31): error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(56,32): error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. +tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(57,32): error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. ==== tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts (5 errors) ==== @@ -57,21 +57,21 @@ tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(57,1 // No Privacy errors - importing private elements import im_private_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. import im_private_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. import im_private_f_private = m_private.f_private; import im_private_v_private = m_private.v_private; import im_private_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. import im_private_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. import im_private_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. // Usage of above decls diff --git a/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt index eef4c3be375..7d6bebdfd3f 100644 --- a/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt @@ -1,39 +1,39 @@ -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,5): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,10): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,5): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,6): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,14): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(32,33): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(36,20): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(75,57): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,5): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,10): error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,5): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,6): error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,5): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,14): error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(132,33): error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(134,20): error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(137,64): error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,9): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,14): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,10): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,18): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(188,37): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(192,24): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(231,61): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,9): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,14): error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,9): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,10): error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,9): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,18): error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(288,37): error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(290,24): error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,20): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,37): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,16): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,33): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,24): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,41): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(32,43): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(36,30): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(75,67): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,20): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,50): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,16): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,46): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,24): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,54): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(132,43): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(134,30): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(137,74): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,24): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,41): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,20): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,37): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,28): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,45): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(188,47): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(192,34): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(231,71): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,24): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,54): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,20): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,50): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,28): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,58): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(288,47): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(290,34): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,78): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts (36 errors) ==== @@ -45,20 +45,20 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export interface publicInterfaceWithPrivateTypeParameters { new (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. myMethod(): privateClass; // Error - ~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. } export interface publicInterfaceWithPublicTypeParameters { @@ -81,13 +81,13 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export class publicClassWithWithPrivateTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. } private static myPrivateStaticMethod() { } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. } private myPrivateMethod() { @@ -128,7 +128,7 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS } export function publicFunctionWithPrivateTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. } @@ -182,34 +182,34 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export interface publicInterfaceWithPrivatModuleTypeParameters { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~ -!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithWithPrivateModuleTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateMopduleTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. } @@ -237,20 +237,20 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export interface publicInterfaceWithPrivateTypeParameters { new (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'. (): privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'. myMethod(): privateClass; // Error - ~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'. + ~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. } export interface publicInterfaceWithPublicTypeParameters { @@ -273,13 +273,13 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export class publicClassWithWithPrivateTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'. } private static myPrivateStaticMethod() { } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'. } private myPrivateMethod() { @@ -320,7 +320,7 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS } export function publicFunctionWithPrivateTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'. } @@ -374,34 +374,34 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS export interface publicInterfaceWithPrivatModuleTypeParameters { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~ -!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithWithPrivateModuleTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateMopduleTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt index bc47d164759..bccd9c3b05d 100644 --- a/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(7,51): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(43,61): error TS4001: Type parameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(62,55): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,65): error TS4001: Type parameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(7,61): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(43,71): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(62,65): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,75): error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts (4 errors) ==== @@ -12,7 +12,7 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,65): error TS400 } export class publicClassWithPrivateTypeParameters { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClass'. myMethod(val: T): T { return val; @@ -50,8 +50,8 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,65): error TS400 } export class publicClassWithTypeParametersFromPrivateModule { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4001: Type parameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. myMethod(val: T): T { return val; } @@ -71,7 +71,7 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,65): error TS400 } export class publicClassWithPrivateTypeParameters { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateClassInPublicModule'. myMethod(val: T): T { return val; @@ -109,8 +109,8 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,65): error TS400 } export class publicClassWithTypeParametersFromPrivateModule { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4001: Type parameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. myMethod(val: T): T { return val; } diff --git a/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt index f4ea800e792..b040fdf4fe3 100644 --- a/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt @@ -1,23 +1,23 @@ -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(13,59): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(16,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(16,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(17,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(18,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(25,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(25,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(26,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(27,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(60,75): error TS4003: Type parameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(79,63): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(82,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(82,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(83,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(84,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(91,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(91,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(92,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(93,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. -tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error TS4003: Type parameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(13,69): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(16,18): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(16,32): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(17,18): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(18,31): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(25,18): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(25,32): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(26,18): error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(27,31): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(60,85): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(79,73): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(82,22): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(82,50): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(83,22): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(84,49): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(91,22): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(91,50): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(92,22): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(93,49): error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. +tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,89): error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts (20 errors) ==== @@ -34,20 +34,20 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error } export interface publicInterfaceWithPrivateTypeParameters { // Error - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClass'. myMethod(val: T): T; myMethod0(): publicClassT; myMethod1(): privateClassT; - ~~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. + ~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. myMethod2(): privateClassT; - ~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. myMethod3(): publicClassT; - ~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. myMethod4(): publicClassT; } @@ -56,15 +56,15 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error myMethod(val: T): T; myMethod0(): publicClassT myMethod1(): privateClassT; - ~~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. - ~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. + ~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. myMethod2(): privateClassT; - ~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassT'. myMethod3(): publicClassT; - ~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'. myMethod4(): publicClassT; } @@ -99,8 +99,8 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error export interface publicInterfaceWithPrivateModuleTypeParameterConstraints { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4003: Type parameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. } interface privateInterfaceWithPrivateModuleTypeParameterConstraints { // Error @@ -120,20 +120,20 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error } export interface publicInterfaceWithPrivateTypeParameters { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateClassInPublicModule'. myMethod(val: T): T; myMethod0(): publicClassInPublicModuleT; myMethod1(): privateClassInPublicModuleT; - ~~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. myMethod2(): privateClassInPublicModuleT; - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. myMethod3(): publicClassInPublicModuleT; - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. myMethod4(): publicClassInPublicModuleT; } @@ -142,15 +142,15 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error myMethod(val: T): T; myMethod0(): publicClassInPublicModuleT myMethod1(): privateClassInPublicModuleT; - ~~~~~~~~~ -!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. myMethod2(): privateClassInPublicModuleT; - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModuleT'. myMethod3(): publicClassInPublicModuleT; - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateClassInPublicModule'. myMethod4(): publicClassInPublicModuleT; } @@ -184,8 +184,8 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,79): error } export interface publicInterfaceWithPrivateModuleTypeParameterConstraints { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4003: Type parameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. } interface privateInterfaceWithPrivateModuleTypeParameterConstraints { // Error diff --git a/tests/baselines/reference/privacyVarDeclFile.errors.txt b/tests/baselines/reference/privacyVarDeclFile.errors.txt index 03e5f951a9d..528b5c3c66f 100644 --- a/tests/baselines/reference/privacyVarDeclFile.errors.txt +++ b/tests/baselines/reference/privacyVarDeclFile.errors.txt @@ -1,33 +1,33 @@ -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(105,9): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(121,9): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(123,9): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(148,16): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(153,24): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(159,9): error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(162,9): error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(163,9): error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(165,16): error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(166,24): error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(9,5): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(25,5): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(27,5): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(52,12): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(57,20): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(63,5): error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(66,5): error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(67,5): error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(69,12): error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(70,20): error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(90,9): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(106,9): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(108,9): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(133,16): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(138,24): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(144,9): error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(147,9): error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(148,9): error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(150,16): error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. -tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(105,21): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(121,40): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(123,27): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(148,51): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(153,66): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(159,21): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(162,40): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(163,27): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(165,57): error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_GlobalFile.ts(166,72): error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(9,17): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(25,36): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(27,23): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(52,47): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(57,62): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(63,17): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(66,36): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(67,23): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(69,53): error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(70,68): error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(90,21): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(106,40): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(108,27): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(133,51): error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(138,66): error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(144,21): error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(147,40): error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(148,27): error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(150,57): error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. +tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,72): error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. ==== tests/cases/compiler/privacyVarDeclFile_externalModule.ts (20 errors) ==== @@ -40,7 +40,7 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivatePropertyTypes { myProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. } @@ -58,11 +58,11 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export class publicClassWithWithPrivatePropertyTypes { static myPublicStaticProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. private static myPrivateStaticProperty: privateClass; myPublicProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. private myPrivateProperty: privateClass; } @@ -89,14 +89,14 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: } export var publicVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export var publicVarWithPublicPropertyTypes: publicClass; var privateVarWithPrivatePropertyTypes: privateClass; var privateVarWithPublicPropertyTypes: publicClass; export declare var publicAmbientVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export declare var publicAmbientVarWithPublicPropertyTypes: publicClass; declare var privateAmbientVarWithPrivatePropertyTypes: privateClass; @@ -104,23 +104,23 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; @@ -141,7 +141,7 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivatePropertyTypes { myProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. } @@ -159,11 +159,11 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export class publicClassWithWithPrivatePropertyTypes { static myPublicStaticProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. private static myPrivateStaticProperty: privateClass; myPublicProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. private myPrivateProperty: privateClass; } @@ -190,14 +190,14 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: } export var publicVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export var publicVarWithPublicPropertyTypes: publicClass; var privateVarWithPrivatePropertyTypes: privateClass; var privateVarWithPublicPropertyTypes: publicClass; export declare var publicAmbientVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export declare var publicAmbientVarWithPublicPropertyTypes: publicClass; declare var privateAmbientVarWithPrivatePropertyTypes: privateClass; @@ -205,23 +205,23 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; @@ -422,7 +422,7 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivatePropertyTypes { myProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateClass'. } @@ -440,11 +440,11 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export class publicClassWithWithPrivatePropertyTypes { static myPublicStaticProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateClass'. private static myPrivateStaticProperty: privateClass; myPublicProperty: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateClass'. private myPrivateProperty: privateClass; } @@ -471,14 +471,14 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: } export var publicVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export var publicVarWithPublicPropertyTypes: publicClass; var privateVarWithPrivatePropertyTypes: privateClass; var privateVarWithPublicPropertyTypes: publicClass; export declare var publicAmbientVarWithPrivatePropertyTypes: privateClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivatePropertyTypes' has or is using private name 'privateClass'. export declare var publicAmbientVarWithPublicPropertyTypes: publicClass; declare var privateAmbientVarWithPrivatePropertyTypes: privateClass; @@ -486,23 +486,23 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,24): error TS4024: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4032: Property 'myProperty' of exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4027: Public static property 'myPublicStaticProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4030: Public property 'myPublicProperty' of exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS4024: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using name 'privateModule.publicClass' from private module 'privateModule'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; From cee6452e93e9973c3f280f0ee3683106ace61955 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 16:29:54 -0800 Subject: [PATCH 020/178] Tests for built in type name reference in type annotation --- .../declFileTypeAnnotationBuiltInType.js | 91 +++++++++++++++++++ .../declFileTypeAnnotationBuiltInType.types | 63 +++++++++++++ .../declFileTypeAnnotationBuiltInType.ts | 42 +++++++++ 3 files changed, 196 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationBuiltInType.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationBuiltInType.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationBuiltInType.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationBuiltInType.js b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.js new file mode 100644 index 00000000000..fc877ab4b32 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.js @@ -0,0 +1,91 @@ +//// [declFileTypeAnnotationBuiltInType.ts] + +// string +function foo(): string { + return ""; +} +function foo2() { + return ""; +} + +// number +function foo3(): number { + return 10; +} +function foo4() { + return 10; +} + +// boolean +function foo5(): boolean { + return true; +} +function foo6() { + return false; +} + +// void +function foo7(): void { + return; +} +function foo8() { + return; +} + +// any +function foo9(): any { + return undefined; +} +function foo10() { + return undefined; +} + +//// [declFileTypeAnnotationBuiltInType.js] +// string +function foo() { + return ""; +} +function foo2() { + return ""; +} +// number +function foo3() { + return 10; +} +function foo4() { + return 10; +} +// boolean +function foo5() { + return true; +} +function foo6() { + return false; +} +// void +function foo7() { + return; +} +function foo8() { + return; +} +// any +function foo9() { + return undefined; +} +function foo10() { + return undefined; +} + + +//// [declFileTypeAnnotationBuiltInType.d.ts] +declare function foo(): string; +declare function foo2(): string; +declare function foo3(): number; +declare function foo4(): number; +declare function foo5(): boolean; +declare function foo6(): boolean; +declare function foo7(): void; +declare function foo8(): void; +declare function foo9(): any; +declare function foo10(): any; diff --git a/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types new file mode 100644 index 00000000000..ce4f5654a89 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationBuiltInType.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/declFileTypeAnnotationBuiltInType.ts === + +// string +function foo(): string { +>foo : () => string + + return ""; +} +function foo2() { +>foo2 : () => string + + return ""; +} + +// number +function foo3(): number { +>foo3 : () => number + + return 10; +} +function foo4() { +>foo4 : () => number + + return 10; +} + +// boolean +function foo5(): boolean { +>foo5 : () => boolean + + return true; +} +function foo6() { +>foo6 : () => boolean + + return false; +} + +// void +function foo7(): void { +>foo7 : () => void + + return; +} +function foo8() { +>foo8 : () => void + + return; +} + +// any +function foo9(): any { +>foo9 : () => any + + return undefined; +>undefined : undefined +} +function foo10() { +>foo10 : () => any + + return undefined; +>undefined : undefined +} diff --git a/tests/cases/compiler/declFileTypeAnnotationBuiltInType.ts b/tests/cases/compiler/declFileTypeAnnotationBuiltInType.ts new file mode 100644 index 00000000000..3b234476579 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationBuiltInType.ts @@ -0,0 +1,42 @@ +// @target: ES5 +// @declaration: true + +// string +function foo(): string { + return ""; +} +function foo2() { + return ""; +} + +// number +function foo3(): number { + return 10; +} +function foo4() { + return 10; +} + +// boolean +function foo5(): boolean { + return true; +} +function foo6() { + return false; +} + +// void +function foo7(): void { + return; +} +function foo8() { + return; +} + +// any +function foo9(): any { + return undefined; +} +function foo10() { + return undefined; +} \ No newline at end of file From e11fa3fcc7c62a7bce2f758ff28b6f184b12a23a Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 16:30:09 -0800 Subject: [PATCH 021/178] Tests for type reference annotation --- .../declFileTypeAnnotationTypeReference.js | 120 ++++++++++++++++++ .../declFileTypeAnnotationTypeReference.types | 98 ++++++++++++++ .../declFileTypeAnnotationTypeReference.ts | 45 +++++++ 3 files changed, 263 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeReference.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeReference.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationTypeReference.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeReference.js b/tests/baselines/reference/declFileTypeAnnotationTypeReference.js new file mode 100644 index 00000000000..3818f38d2c1 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeReference.js @@ -0,0 +1,120 @@ +//// [declFileTypeAnnotationTypeReference.ts] + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): c { + return new c(); +} +function foo2() { + return new c(); +} + +// Qualified name +function foo3(): m.c { + return new m.c(); +} +function foo4() { + return new m.c(); +} + +// Just the name with type arguments +function foo5(): g { + return new g(); +} +function foo6() { + return new g(); +} + +// Qualified name with type arguments +function foo7(): m.g { + return new m.g(); +} +function foo8() { + return new m.g(); +} + +//// [declFileTypeAnnotationTypeReference.js] +var c = (function () { + function c() { + } + return c; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + var g = (function () { + function g() { + } + return g; + })(); + m.g = g; +})(m || (m = {})); +var g = (function () { + function g() { + } + return g; +})(); +// Just the name +function foo() { + return new c(); +} +function foo2() { + return new c(); +} +// Qualified name +function foo3() { + return new m.c(); +} +function foo4() { + return new m.c(); +} +// Just the name with type arguments +function foo5() { + return new g(); +} +function foo6() { + return new g(); +} +// Qualified name with type arguments +function foo7() { + return new m.g(); +} +function foo8() { + return new m.g(); +} + + +//// [declFileTypeAnnotationTypeReference.d.ts] +declare class c { +} +declare module m { + class c { + } + class g { + } +} +declare class g { +} +declare function foo(): c; +declare function foo2(): c; +declare function foo3(): m.c; +declare function foo4(): m.c; +declare function foo5(): g; +declare function foo6(): g; +declare function foo7(): m.g; +declare function foo8(): m.g; diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeReference.types b/tests/baselines/reference/declFileTypeAnnotationTypeReference.types new file mode 100644 index 00000000000..765c86c3415 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeReference.types @@ -0,0 +1,98 @@ +=== tests/cases/compiler/declFileTypeAnnotationTypeReference.ts === + +class c { +>c : c +} +module m { +>m : typeof m + + export class c { +>c : c + } + export class g { +>g : g +>T : T + } +} +class g { +>g : g +>T : T +} + +// Just the name +function foo(): c { +>foo : () => c +>c : c + + return new c(); +>new c() : c +>c : typeof c +} +function foo2() { +>foo2 : () => c + + return new c(); +>new c() : c +>c : typeof c +} + +// Qualified name +function foo3(): m.c { +>foo3 : () => m.c +>m : unknown +>c : m.c + + return new m.c(); +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} +function foo4() { +>foo4 : () => m.c + + return new m.c(); +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} + +// Just the name with type arguments +function foo5(): g { +>foo5 : () => g +>g : g + + return new g(); +>new g() : g +>g : typeof g +} +function foo6() { +>foo6 : () => g + + return new g(); +>new g() : g +>g : typeof g +} + +// Qualified name with type arguments +function foo7(): m.g { +>foo7 : () => m.g +>m : unknown +>g : m.g + + return new m.g(); +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} +function foo8() { +>foo8 : () => m.g + + return new m.g(); +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} diff --git a/tests/cases/compiler/declFileTypeAnnotationTypeReference.ts b/tests/cases/compiler/declFileTypeAnnotationTypeReference.ts new file mode 100644 index 00000000000..e20ecff32f0 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationTypeReference.ts @@ -0,0 +1,45 @@ +// @target: ES5 +// @declaration: true + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): c { + return new c(); +} +function foo2() { + return new c(); +} + +// Qualified name +function foo3(): m.c { + return new m.c(); +} +function foo4() { + return new m.c(); +} + +// Just the name with type arguments +function foo5(): g { + return new g(); +} +function foo6() { + return new g(); +} + +// Qualified name with type arguments +function foo7(): m.g { + return new m.g(); +} +function foo8() { + return new m.g(); +} \ No newline at end of file From ab1558828a74d2be557e6c8357f9515e37cf2179 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 16:33:06 -0800 Subject: [PATCH 022/178] Test cases for type query --- .../declFileTypeAnnotationTypeQuery.js | 120 ++++++++++++++++++ .../declFileTypeAnnotationTypeQuery.types | 90 +++++++++++++ .../declFileTypeAnnotationTypeQuery.ts | 45 +++++++ 3 files changed, 255 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeQuery.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeQuery.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationTypeQuery.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeQuery.js b/tests/baselines/reference/declFileTypeAnnotationTypeQuery.js new file mode 100644 index 00000000000..28443bc04ad --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeQuery.js @@ -0,0 +1,120 @@ +//// [declFileTypeAnnotationTypeQuery.ts] + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): typeof c { + return c; +} +function foo2() { + return c; +} + +// Qualified name +function foo3(): typeof m.c { + return m.c; +} +function foo4() { + return m.c; +} + +// Just the name with type arguments +function foo5(): typeof g { + return g; +} +function foo6() { + return g; +} + +// Qualified name with type arguments +function foo7(): typeof m.g { + return m.g +} +function foo8() { + return m.g +} + +//// [declFileTypeAnnotationTypeQuery.js] +var c = (function () { + function c() { + } + return c; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + var g = (function () { + function g() { + } + return g; + })(); + m.g = g; +})(m || (m = {})); +var g = (function () { + function g() { + } + return g; +})(); +// Just the name +function foo() { + return c; +} +function foo2() { + return c; +} +// Qualified name +function foo3() { + return m.c; +} +function foo4() { + return m.c; +} +// Just the name with type arguments +function foo5() { + return g; +} +function foo6() { + return g; +} +// Qualified name with type arguments +function foo7() { + return m.g; +} +function foo8() { + return m.g; +} + + +//// [declFileTypeAnnotationTypeQuery.d.ts] +declare class c { +} +declare module m { + class c { + } + class g { + } +} +declare class g { +} +declare function foo(): typeof c; +declare function foo2(): typeof c; +declare function foo3(): typeof m.c; +declare function foo4(): typeof m.c; +declare function foo5(): typeof g; +declare function foo6(): typeof g; +declare function foo7(): typeof m.g; +declare function foo8(): typeof m.g; diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeQuery.types b/tests/baselines/reference/declFileTypeAnnotationTypeQuery.types new file mode 100644 index 00000000000..c7b5c421de1 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeQuery.types @@ -0,0 +1,90 @@ +=== tests/cases/compiler/declFileTypeAnnotationTypeQuery.ts === + +class c { +>c : c +} +module m { +>m : typeof m + + export class c { +>c : c + } + export class g { +>g : g +>T : T + } +} +class g { +>g : g +>T : T +} + +// Just the name +function foo(): typeof c { +>foo : () => typeof c +>c : typeof c + + return c; +>c : typeof c +} +function foo2() { +>foo2 : () => typeof c + + return c; +>c : typeof c +} + +// Qualified name +function foo3(): typeof m.c { +>foo3 : () => typeof m.c +>m : typeof m +>c : typeof m.c + + return m.c; +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} +function foo4() { +>foo4 : () => typeof m.c + + return m.c; +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} + +// Just the name with type arguments +function foo5(): typeof g { +>foo5 : () => typeof g +>g : typeof g + + return g; +>g : typeof g +} +function foo6() { +>foo6 : () => typeof g + + return g; +>g : typeof g +} + +// Qualified name with type arguments +function foo7(): typeof m.g { +>foo7 : () => typeof m.g +>m : typeof m +>g : typeof m.g + + return m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} +function foo8() { +>foo8 : () => typeof m.g + + return m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} diff --git a/tests/cases/compiler/declFileTypeAnnotationTypeQuery.ts b/tests/cases/compiler/declFileTypeAnnotationTypeQuery.ts new file mode 100644 index 00000000000..d3cde6a1faa --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationTypeQuery.ts @@ -0,0 +1,45 @@ +// @target: ES5 +// @declaration: true + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): typeof c { + return c; +} +function foo2() { + return c; +} + +// Qualified name +function foo3(): typeof m.c { + return m.c; +} +function foo4() { + return m.c; +} + +// Just the name with type arguments +function foo5(): typeof g { + return g; +} +function foo6() { + return g; +} + +// Qualified name with type arguments +function foo7(): typeof m.g { + return m.g +} +function foo8() { + return m.g +} \ No newline at end of file From 737b72d73d21dbe20e4daaaee6ba7534ac038c4d Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 16:38:15 -0800 Subject: [PATCH 023/178] Test cases for array type annotation --- .../declFileTypeAnnotationArrayType.js | 137 ++++++++++++++++++ .../declFileTypeAnnotationArrayType.types | 125 ++++++++++++++++ .../declFileTypeAnnotationArrayType.ts | 53 +++++++ 3 files changed, 315 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationArrayType.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationArrayType.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationArrayType.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationArrayType.js b/tests/baselines/reference/declFileTypeAnnotationArrayType.js new file mode 100644 index 00000000000..0a9d04d6bc7 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationArrayType.js @@ -0,0 +1,137 @@ +//// [declFileTypeAnnotationArrayType.ts] + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): c[] { + return [new c()]; +} +function foo2() { + return [new c()]; +} + +// Qualified name +function foo3(): m.c[] { + return [new m.c()]; +} +function foo4() { + return m.c; +} + +// Just the name with type arguments +function foo5(): g[] { + return [new g()]; +} +function foo6() { + return [new g()]; +} + +// Qualified name with type arguments +function foo7(): m.g[] { + return [new m.g()]; +} +function foo8() { + return [new m.g()]; +} + +// Array of function types +function foo9(): (()=>c)[] { + return [() => new c()]; +} +function foo10() { + return [() => new c()]; +} + +//// [declFileTypeAnnotationArrayType.js] +var c = (function () { + function c() { + } + return c; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + var g = (function () { + function g() { + } + return g; + })(); + m.g = g; +})(m || (m = {})); +var g = (function () { + function g() { + } + return g; +})(); +// Just the name +function foo() { + return [new c()]; +} +function foo2() { + return [new c()]; +} +// Qualified name +function foo3() { + return [new m.c()]; +} +function foo4() { + return m.c; +} +// Just the name with type arguments +function foo5() { + return [new g()]; +} +function foo6() { + return [new g()]; +} +// Qualified name with type arguments +function foo7() { + return [new m.g()]; +} +function foo8() { + return [new m.g()]; +} +// Array of function types +function foo9() { + return [function () { return new c(); }]; +} +function foo10() { + return [function () { return new c(); }]; +} + + +//// [declFileTypeAnnotationArrayType.d.ts] +declare class c { +} +declare module m { + class c { + } + class g { + } +} +declare class g { +} +declare function foo(): c[]; +declare function foo2(): c[]; +declare function foo3(): m.c[]; +declare function foo4(): typeof m.c; +declare function foo5(): g[]; +declare function foo6(): g[]; +declare function foo7(): m.g[]; +declare function foo8(): m.g[]; +declare function foo9(): (() => c)[]; +declare function foo10(): (() => c)[]; diff --git a/tests/baselines/reference/declFileTypeAnnotationArrayType.types b/tests/baselines/reference/declFileTypeAnnotationArrayType.types new file mode 100644 index 00000000000..860d13af47c --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationArrayType.types @@ -0,0 +1,125 @@ +=== tests/cases/compiler/declFileTypeAnnotationArrayType.ts === + +class c { +>c : c +} +module m { +>m : typeof m + + export class c { +>c : c + } + export class g { +>g : g +>T : T + } +} +class g { +>g : g +>T : T +} + +// Just the name +function foo(): c[] { +>foo : () => c[] +>c : c + + return [new c()]; +>[new c()] : c[] +>new c() : c +>c : typeof c +} +function foo2() { +>foo2 : () => c[] + + return [new c()]; +>[new c()] : c[] +>new c() : c +>c : typeof c +} + +// Qualified name +function foo3(): m.c[] { +>foo3 : () => m.c[] +>m : unknown +>c : m.c + + return [new m.c()]; +>[new m.c()] : m.c[] +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} +function foo4() { +>foo4 : () => typeof m.c + + return m.c; +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c +} + +// Just the name with type arguments +function foo5(): g[] { +>foo5 : () => g[] +>g : g + + return [new g()]; +>[new g()] : g[] +>new g() : g +>g : typeof g +} +function foo6() { +>foo6 : () => g[] + + return [new g()]; +>[new g()] : g[] +>new g() : g +>g : typeof g +} + +// Qualified name with type arguments +function foo7(): m.g[] { +>foo7 : () => m.g[] +>m : unknown +>g : m.g + + return [new m.g()]; +>[new m.g()] : m.g[] +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} +function foo8() { +>foo8 : () => m.g[] + + return [new m.g()]; +>[new m.g()] : m.g[] +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +} + +// Array of function types +function foo9(): (()=>c)[] { +>foo9 : () => (() => c)[] +>c : c + + return [() => new c()]; +>[() => new c()] : (() => c)[] +>() => new c() : () => c +>new c() : c +>c : typeof c +} +function foo10() { +>foo10 : () => (() => c)[] + + return [() => new c()]; +>[() => new c()] : (() => c)[] +>() => new c() : () => c +>new c() : c +>c : typeof c +} diff --git a/tests/cases/compiler/declFileTypeAnnotationArrayType.ts b/tests/cases/compiler/declFileTypeAnnotationArrayType.ts new file mode 100644 index 00000000000..4bb99032a60 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationArrayType.ts @@ -0,0 +1,53 @@ +// @target: ES5 +// @declaration: true + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +function foo(): c[] { + return [new c()]; +} +function foo2() { + return [new c()]; +} + +// Qualified name +function foo3(): m.c[] { + return [new m.c()]; +} +function foo4() { + return m.c; +} + +// Just the name with type arguments +function foo5(): g[] { + return [new g()]; +} +function foo6() { + return [new g()]; +} + +// Qualified name with type arguments +function foo7(): m.g[] { + return [new m.g()]; +} +function foo8() { + return [new m.g()]; +} + +// Array of function types +function foo9(): (()=>c)[] { + return [() => new c()]; +} +function foo10() { + return [() => new c()]; +} \ No newline at end of file From 5207bd9625a3785e1fa092acb896b5be744223bc Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 16:45:42 -0800 Subject: [PATCH 024/178] Type annotation of tuple type emit in the declaration file --- .../declFileTypeAnnotationTupleType.js | 68 +++++++++++++++++++ .../declFileTypeAnnotationTupleType.types | 60 ++++++++++++++++ .../declFileTypeAnnotationTupleType.ts | 20 ++++++ 3 files changed, 148 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationTupleType.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationTupleType.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationTupleType.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationTupleType.js b/tests/baselines/reference/declFileTypeAnnotationTupleType.js new file mode 100644 index 00000000000..91d44c2b07f --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTupleType.js @@ -0,0 +1,68 @@ +//// [declFileTypeAnnotationTupleType.ts] + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +var k: [c, m.c] = [new c(), new m.c()]; +var l = k; + +var x: [g, m.g, () => c] = [new g(), new m.g(), () => new c()]; +var y = x; + +//// [declFileTypeAnnotationTupleType.js] +var c = (function () { + function c() { + } + return c; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + var g = (function () { + function g() { + } + return g; + })(); + m.g = g; +})(m || (m = {})); +var g = (function () { + function g() { + } + return g; +})(); +// Just the name +var k = [new c(), new m.c()]; +var l = k; +var x = [new g(), new m.g(), function () { return new c(); }]; +var y = x; + + +//// [declFileTypeAnnotationTupleType.d.ts] +declare class c { +} +declare module m { + class c { + } + class g { + } +} +declare class g { +} +declare var k: [c, m.c]; +declare var l: [c, m.c]; +declare var x: [g, m.g, () => c]; +declare var y: [g, m.g, () => c]; diff --git a/tests/baselines/reference/declFileTypeAnnotationTupleType.types b/tests/baselines/reference/declFileTypeAnnotationTupleType.types new file mode 100644 index 00000000000..88cf5a0c743 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTupleType.types @@ -0,0 +1,60 @@ +=== tests/cases/compiler/declFileTypeAnnotationTupleType.ts === + +class c { +>c : c +} +module m { +>m : typeof m + + export class c { +>c : c + } + export class g { +>g : g +>T : T + } +} +class g { +>g : g +>T : T +} + +// Just the name +var k: [c, m.c] = [new c(), new m.c()]; +>k : [c, m.c] +>c : c +>m : unknown +>c : m.c +>[new c(), new m.c()] : [c, m.c] +>new c() : c +>c : typeof c +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c + +var l = k; +>l : [c, m.c] +>k : [c, m.c] + +var x: [g, m.g, () => c] = [new g(), new m.g(), () => new c()]; +>x : [g, m.g, () => c] +>g : g +>m : unknown +>g : m.g +>c : c +>[new g(), new m.g(), () => new c()] : [g, m.g, () => c] +>new g() : g +>g : typeof g +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +>() => new c() : () => c +>new c() : c +>c : typeof c + +var y = x; +>y : [g, m.g, () => c] +>x : [g, m.g, () => c] + diff --git a/tests/cases/compiler/declFileTypeAnnotationTupleType.ts b/tests/cases/compiler/declFileTypeAnnotationTupleType.ts new file mode 100644 index 00000000000..aafbfd02eae --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationTupleType.ts @@ -0,0 +1,20 @@ +// @target: ES5 +// @declaration: true + +class c { +} +module m { + export class c { + } + export class g { + } +} +class g { +} + +// Just the name +var k: [c, m.c] = [new c(), new m.c()]; +var l = k; + +var x: [g, m.g, () => c] = [new g(), new m.g(), () => new c()]; +var y = x; \ No newline at end of file From 68a07ed0a942faf790d0d1d5590b778b88e80058 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 17:00:15 -0800 Subject: [PATCH 025/178] Test cases for union type annotation --- .../declFileTypeAnnotationUnionType.js | 76 ++++++++++++++++ .../declFileTypeAnnotationUnionType.types | 91 +++++++++++++++++++ .../declFileTypeAnnotationUnionType.ts | 24 +++++ 3 files changed, 191 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationUnionType.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationUnionType.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationUnionType.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationUnionType.js b/tests/baselines/reference/declFileTypeAnnotationUnionType.js new file mode 100644 index 00000000000..0a8e256ef28 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationUnionType.js @@ -0,0 +1,76 @@ +//// [declFileTypeAnnotationUnionType.ts] + +class c { + private p: string; +} +module m { + export class c { + private q: string; + } + export class g { + private r: string; + } +} +class g { + private s: string; +} + +// Just the name +var k: c | m.c = new c() || new m.c(); +var l = new c() || new m.c(); + +var x: g | m.g | (() => c) = new g() || new m.g() || (() => new c()); +var y = new g() || new m.g() || (() => new c()); + +//// [declFileTypeAnnotationUnionType.js] +var c = (function () { + function c() { + } + return c; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + var g = (function () { + function g() { + } + return g; + })(); + m.g = g; +})(m || (m = {})); +var g = (function () { + function g() { + } + return g; +})(); +// Just the name +var k = new c() || new m.c(); +var l = new c() || new m.c(); +var x = new g() || new m.g() || (function () { return new c(); }); +var y = new g() || new m.g() || (function () { return new c(); }); + + +//// [declFileTypeAnnotationUnionType.d.ts] +declare class c { + private p; +} +declare module m { + class c { + private q; + } + class g { + private r; + } +} +declare class g { + private s; +} +declare var k: c | m.c; +declare var l: c | m.c; +declare var x: g | m.g | (() => c); +declare var y: g | m.g | (() => c); diff --git a/tests/baselines/reference/declFileTypeAnnotationUnionType.types b/tests/baselines/reference/declFileTypeAnnotationUnionType.types new file mode 100644 index 00000000000..1dce3690bf8 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationUnionType.types @@ -0,0 +1,91 @@ +=== tests/cases/compiler/declFileTypeAnnotationUnionType.ts === + +class c { +>c : c + + private p: string; +>p : string +} +module m { +>m : typeof m + + export class c { +>c : c + + private q: string; +>q : string + } + export class g { +>g : g +>T : T + + private r: string; +>r : string + } +} +class g { +>g : g +>T : T + + private s: string; +>s : string +} + +// Just the name +var k: c | m.c = new c() || new m.c(); +>k : c | m.c +>c : c +>m : unknown +>c : m.c +>new c() || new m.c() : c | m.c +>new c() : c +>c : typeof c +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c + +var l = new c() || new m.c(); +>l : c | m.c +>new c() || new m.c() : c | m.c +>new c() : c +>c : typeof c +>new m.c() : m.c +>m.c : typeof m.c +>m : typeof m +>c : typeof m.c + +var x: g | m.g | (() => c) = new g() || new m.g() || (() => new c()); +>x : g | m.g | (() => c) +>g : g +>m : unknown +>g : m.g +>c : c +>new g() || new m.g() || (() => new c()) : g | m.g | (() => c) +>new g() || new m.g() : g | m.g +>new g() : g +>g : typeof g +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +>(() => new c()) : () => c +>() => new c() : () => c +>new c() : c +>c : typeof c + +var y = new g() || new m.g() || (() => new c()); +>y : g | m.g | (() => c) +>new g() || new m.g() || (() => new c()) : g | m.g | (() => c) +>new g() || new m.g() : g | m.g +>new g() : g +>g : typeof g +>new m.g() : m.g +>m.g : typeof m.g +>m : typeof m +>g : typeof m.g +>(() => new c()) : () => c +>() => new c() : () => c +>new c() : c +>c : typeof c + diff --git a/tests/cases/compiler/declFileTypeAnnotationUnionType.ts b/tests/cases/compiler/declFileTypeAnnotationUnionType.ts new file mode 100644 index 00000000000..4a973834915 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationUnionType.ts @@ -0,0 +1,24 @@ +// @target: ES5 +// @declaration: true + +class c { + private p: string; +} +module m { + export class c { + private q: string; + } + export class g { + private r: string; + } +} +class g { + private s: string; +} + +// Just the name +var k: c | m.c = new c() || new m.c(); +var l = new c() || new m.c(); + +var x: g | m.g | (() => c) = new g() || new m.g() || (() => new c()); +var y = new g() || new m.g() || (() => new c()); \ No newline at end of file From c2188a329dc28b84a55a828d9b269f267c5a0593 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 17:08:50 -0800 Subject: [PATCH 026/178] Test case for paren type annotation --- .../declFileTypeAnnotationParenType.js | 32 +++++++++++++++ .../declFileTypeAnnotationParenType.types | 41 +++++++++++++++++++ .../declFileTypeAnnotationParenType.ts | 12 ++++++ 3 files changed, 85 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationParenType.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationParenType.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationParenType.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationParenType.js b/tests/baselines/reference/declFileTypeAnnotationParenType.js new file mode 100644 index 00000000000..c61517c7339 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationParenType.js @@ -0,0 +1,32 @@ +//// [declFileTypeAnnotationParenType.ts] + +class c { + private p: string; +} + +var x: (() => c)[] = [() => new c()]; +var y = [() => new c()]; + +var k: (() => c) | string = (() => new c()) || ""; +var l = (() => new c()) || ""; + +//// [declFileTypeAnnotationParenType.js] +var c = (function () { + function c() { + } + return c; +})(); +var x = [function () { return new c(); }]; +var y = [function () { return new c(); }]; +var k = (function () { return new c(); }) || ""; +var l = (function () { return new c(); }) || ""; + + +//// [declFileTypeAnnotationParenType.d.ts] +declare class c { + private p; +} +declare var x: (() => c)[]; +declare var y: (() => c)[]; +declare var k: (() => c) | string; +declare var l: string | (() => c); diff --git a/tests/baselines/reference/declFileTypeAnnotationParenType.types b/tests/baselines/reference/declFileTypeAnnotationParenType.types new file mode 100644 index 00000000000..c904f1b3e5a --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationParenType.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/declFileTypeAnnotationParenType.ts === + +class c { +>c : c + + private p: string; +>p : string +} + +var x: (() => c)[] = [() => new c()]; +>x : (() => c)[] +>c : c +>[() => new c()] : (() => c)[] +>() => new c() : () => c +>new c() : c +>c : typeof c + +var y = [() => new c()]; +>y : (() => c)[] +>[() => new c()] : (() => c)[] +>() => new c() : () => c +>new c() : c +>c : typeof c + +var k: (() => c) | string = (() => new c()) || ""; +>k : string | (() => c) +>c : c +>(() => new c()) || "" : string | (() => c) +>(() => new c()) : () => c +>() => new c() : () => c +>new c() : c +>c : typeof c + +var l = (() => new c()) || ""; +>l : string | (() => c) +>(() => new c()) || "" : string | (() => c) +>(() => new c()) : () => c +>() => new c() : () => c +>new c() : c +>c : typeof c + diff --git a/tests/cases/compiler/declFileTypeAnnotationParenType.ts b/tests/cases/compiler/declFileTypeAnnotationParenType.ts new file mode 100644 index 00000000000..3ac20836c77 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationParenType.ts @@ -0,0 +1,12 @@ +// @target: ES5 +// @declaration: true + +class c { + private p: string; +} + +var x: (() => c)[] = [() => new c()]; +var y = [() => new c()]; + +var k: (() => c) | string = (() => new c()) || ""; +var l = (() => new c()) || ""; \ No newline at end of file From 9e41b0fed4096a673aa54c1b653bce18f8eb93d9 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 17:09:34 -0800 Subject: [PATCH 027/178] Test case for string literal overload type annotation --- .../declFileTypeAnnotationStringLiteral.js | 26 ++++++++++++++++ .../declFileTypeAnnotationStringLiteral.types | 31 +++++++++++++++++++ .../declFileTypeAnnotationStringLiteral.ts | 13 ++++++++ 3 files changed, 70 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationStringLiteral.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationStringLiteral.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationStringLiteral.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationStringLiteral.js b/tests/baselines/reference/declFileTypeAnnotationStringLiteral.js new file mode 100644 index 00000000000..faa76cc869c --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationStringLiteral.js @@ -0,0 +1,26 @@ +//// [declFileTypeAnnotationStringLiteral.ts] + +function foo(a: "hello"): number; +function foo(a: "name"): string; +function foo(a: string): string | number; +function foo(a: string): string | number { + if (a === "hello") { + return a.length; + } + + return a; +} + +//// [declFileTypeAnnotationStringLiteral.js] +function foo(a) { + if (a === "hello") { + return a.length; + } + return a; +} + + +//// [declFileTypeAnnotationStringLiteral.d.ts] +declare function foo(a: "hello"): number; +declare function foo(a: "name"): string; +declare function foo(a: string): string | number; diff --git a/tests/baselines/reference/declFileTypeAnnotationStringLiteral.types b/tests/baselines/reference/declFileTypeAnnotationStringLiteral.types new file mode 100644 index 00000000000..d50d95f988b --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationStringLiteral.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/declFileTypeAnnotationStringLiteral.ts === + +function foo(a: "hello"): number; +>foo : { (a: "hello"): number; (a: "name"): string; (a: string): string | number; } +>a : "hello" + +function foo(a: "name"): string; +>foo : { (a: "hello"): number; (a: "name"): string; (a: string): string | number; } +>a : "name" + +function foo(a: string): string | number; +>foo : { (a: "hello"): number; (a: "name"): string; (a: string): string | number; } +>a : string + +function foo(a: string): string | number { +>foo : { (a: "hello"): number; (a: "name"): string; (a: string): string | number; } +>a : string + + if (a === "hello") { +>a === "hello" : boolean +>a : string + + return a.length; +>a.length : number +>a : string +>length : number + } + + return a; +>a : string +} diff --git a/tests/cases/compiler/declFileTypeAnnotationStringLiteral.ts b/tests/cases/compiler/declFileTypeAnnotationStringLiteral.ts new file mode 100644 index 00000000000..0cdd27fd626 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationStringLiteral.ts @@ -0,0 +1,13 @@ +// @target: ES5 +// @declaration: true + +function foo(a: "hello"): number; +function foo(a: "name"): string; +function foo(a: string): string | number; +function foo(a: string): string | number { + if (a === "hello") { + return a.length; + } + + return a; +} \ No newline at end of file From c661ffa7ec78cba73d4cac56a3c386bc6f8b79f9 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 17:15:26 -0800 Subject: [PATCH 028/178] Test cases for type literal annotation --- .../declFileTypeAnnotationTypeLiteral.js | 92 +++++++++++++++++++ .../declFileTypeAnnotationTypeLiteral.types | 85 +++++++++++++++++ .../declFileTypeAnnotationTypeLiteral.ts | 41 +++++++++ 3 files changed, 218 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeLiteral.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types create mode 100644 tests/cases/compiler/declFileTypeAnnotationTypeLiteral.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.js b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.js new file mode 100644 index 00000000000..5e4a8ea714b --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.js @@ -0,0 +1,92 @@ +//// [declFileTypeAnnotationTypeLiteral.ts] + +class c { +} +class g { +} +module m { + export class c { + } +} + +// Object literal with everything +var x: { + // Call signatures + (a: number): c; + (a: string): g; + + // Construct signatures + new (a: number): c; + new (a: string): m.c; + + // Indexers + [n: number]: c; + [n: string]: c; + + // Properties + a: c; + b: g; + + // methods + m1(): g; + m2(a: string, b?: number, ...c: c[]): string; +}; + + +// Function type +var y: (a: string) => string; + +// constructor type +var z: new (a: string) => m.c; + +//// [declFileTypeAnnotationTypeLiteral.js] +var c = (function () { + function c() { + } + return c; +})(); +var g = (function () { + function g() { + } + return g; +})(); +var m; +(function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; +})(m || (m = {})); +// Object literal with everything +var x; +// Function type +var y; +// constructor type +var z; + + +//// [declFileTypeAnnotationTypeLiteral.d.ts] +declare class c { +} +declare class g { +} +declare module m { + class c { + } +} +declare var x: { + (a: number): c; + (a: string): g; + new (a: number): c; + new (a: string): m.c; + [n: number]: c; + [n: string]: c; + a: c; + b: g; + m1(): g; + m2(a: string, b?: number, ...c: c[]): string; +}; +declare var y: (a: string) => string; +declare var z: new (a: string) => m.c; diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types new file mode 100644 index 00000000000..432ee1506fa --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types @@ -0,0 +1,85 @@ +=== tests/cases/compiler/declFileTypeAnnotationTypeLiteral.ts === + +class c { +>c : c +} +class g { +>g : g +>T : T +} +module m { +>m : typeof m + + export class c { +>c : c + } +} + +// Object literal with everything +var x: { +>x : { (a: number): c; (a: string): g; new (a: number): c; new (a: string): m.c; [x: string]: c; [x: number]: c; a: c; b: g; m1(): g; m2(a: string, b?: number, ...c: c[]): string; } + + // Call signatures + (a: number): c; +>a : number +>c : c + + (a: string): g; +>a : string +>g : g + + // Construct signatures + new (a: number): c; +>a : number +>c : c + + new (a: string): m.c; +>a : string +>m : unknown +>c : m.c + + // Indexers + [n: number]: c; +>n : number +>c : c + + [n: string]: c; +>n : string +>c : c + + // Properties + a: c; +>a : c +>c : c + + b: g; +>b : g +>g : g + + // methods + m1(): g; +>m1 : () => g +>g : g + + m2(a: string, b?: number, ...c: c[]): string; +>m2 : (a: string, b?: number, ...c: c[]) => string +>a : string +>b : number +>c : c[] +>c : c + +}; + + +// Function type +var y: (a: string) => string; +>y : (a: string) => string +>a : string + +// constructor type +var z: new (a: string) => m.c; +>z : new (a: string) => m.c +>a : string +>m : unknown +>c : m.c + diff --git a/tests/cases/compiler/declFileTypeAnnotationTypeLiteral.ts b/tests/cases/compiler/declFileTypeAnnotationTypeLiteral.ts new file mode 100644 index 00000000000..e41495b68de --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationTypeLiteral.ts @@ -0,0 +1,41 @@ +// @target: ES5 +// @declaration: true + +class c { +} +class g { +} +module m { + export class c { + } +} + +// Object literal with everything +var x: { + // Call signatures + (a: number): c; + (a: string): g; + + // Construct signatures + new (a: number): c; + new (a: string): m.c; + + // Indexers + [n: number]: c; + [n: string]: c; + + // Properties + a: c; + b: g; + + // methods + m1(): g; + m2(a: string, b?: number, ...c: c[]): string; +}; + + +// Function type +var y: (a: string) => string; + +// constructor type +var z: new (a: string) => m.c; \ No newline at end of file From 5664b6fcf978e943dfd28a743aa2d1ace2584d88 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 18:10:00 -0800 Subject: [PATCH 029/178] Test cases for type annotation visibility errors --- ...otationVisibilityErrorAccessors.errors.txt | 133 +++++++++ ...eTypeAnnotationVisibilityErrorAccessors.js | 261 ++++++++++++++++++ ...ibilityErrorParameterOfFunction.errors.txt | 60 ++++ ...ationVisibilityErrorParameterOfFunction.js | 108 ++++++++ ...bilityErrorReturnTypeOfFunction.errors.txt | 72 +++++ ...tionVisibilityErrorReturnTypeOfFunction.js | 126 +++++++++ ...ibilityErrorVariableDeclaration.errors.txt | 48 ++++ ...ationVisibilityErrorVariableDeclaration.js | 72 +++++ ...eTypeAnnotationVisibilityErrorAccessors.ts | 102 +++++++ ...ationVisibilityErrorParameterOfFunction.ts | 47 ++++ ...tionVisibilityErrorReturnTypeOfFunction.ts | 59 ++++ ...ationVisibilityErrorVariableDeclaration.ts | 35 +++ 12 files changed, 1123 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.js create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt new file mode 100644 index 00000000000..4338d852a12 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt @@ -0,0 +1,133 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(16,21): error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(21,13): error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(26,25): error TS4037: Parameter 'foo3' of public property setter from exported class has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(33,25): error TS4037: Parameter 'foo4' of public property setter from exported class has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(37,21): error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(72,23): error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(77,13): error TS4042: Return type of public property getter from exported class has or is using name 'm2.public2' from private module 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(82,27): error TS4037: Parameter 'foo113' of public property setter from exported class has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(89,27): error TS4037: Parameter 'foo114' of public property setter from exported class has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(93,23): error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts (10 errors) ==== + + module m { + class private1 { + } + + export class public1 { + } + + module m2 { + export class public2 { + } + } + + export class c { + // getter with annotation + get foo1(): private1 { + ~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. + return; + } + + // getter without annotation + get foo2() { + ~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. + return new private1(); + } + + // setter with annotation + set foo3(param: private1) { + ~~~~~~~~ +!!! error TS4037: Parameter 'foo3' of public property setter from exported class has or is using private name 'private1'. + } + + // Both - getter without annotation, setter with annotation + get foo4() { + return new private1(); + } + set foo4(param: private1) { + ~~~~~~~~ +!!! error TS4037: Parameter 'foo4' of public property setter from exported class has or is using private name 'private1'. + } + + // Both - with annotation + get foo5(): private1 { + ~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'private1'. + return; + } + set foo5(param: private1) { + } + + // getter with annotation + get foo11(): public1 { + return; + } + + // getter without annotation + get foo12() { + return new public1(); + } + + // setter with annotation + set foo13(param: public1) { + } + + // Both - getter without annotation, setter with annotation + get foo14() { + return new public1(); + } + set foo14(param: public1) { + } + + // Both - with annotation + get foo15(): public1 { + return; + } + set foo15(param: public1) { + } + + // getter with annotation + get foo111(): m2.public2 { + ~~~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. + return; + } + + // getter without annotation + get foo112() { + ~~~~~~ +!!! error TS4042: Return type of public property getter from exported class has or is using name 'm2.public2' from private module 'm2'. + return new m2.public2(); + } + + // setter with annotation + set foo113(param: m2.public2) { + ~~~~~~~~~~ +!!! error TS4037: Parameter 'foo113' of public property setter from exported class has or is using private name 'm2'. + } + + // Both - getter without annotation, setter with annotation + get foo114() { + return new m2.public2(); + } + set foo114(param: m2.public2) { + ~~~~~~~~~~ +!!! error TS4037: Parameter 'foo114' of public property setter from exported class has or is using private name 'm2'. + } + + // Both - with annotation + get foo115(): m2.public2 { + ~~~~~~~~~~ +!!! error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. + return; + } + set foo115(param: m2.public2) { + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.js new file mode 100644 index 00000000000..f7dc7a18260 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.js @@ -0,0 +1,261 @@ +//// [declFileTypeAnnotationVisibilityErrorAccessors.ts] + +module m { + class private1 { + } + + export class public1 { + } + + module m2 { + export class public2 { + } + } + + export class c { + // getter with annotation + get foo1(): private1 { + return; + } + + // getter without annotation + get foo2() { + return new private1(); + } + + // setter with annotation + set foo3(param: private1) { + } + + // Both - getter without annotation, setter with annotation + get foo4() { + return new private1(); + } + set foo4(param: private1) { + } + + // Both - with annotation + get foo5(): private1 { + return; + } + set foo5(param: private1) { + } + + // getter with annotation + get foo11(): public1 { + return; + } + + // getter without annotation + get foo12() { + return new public1(); + } + + // setter with annotation + set foo13(param: public1) { + } + + // Both - getter without annotation, setter with annotation + get foo14() { + return new public1(); + } + set foo14(param: public1) { + } + + // Both - with annotation + get foo15(): public1 { + return; + } + set foo15(param: public1) { + } + + // getter with annotation + get foo111(): m2.public2 { + return; + } + + // getter without annotation + get foo112() { + return new m2.public2(); + } + + // setter with annotation + set foo113(param: m2.public2) { + } + + // Both - getter without annotation, setter with annotation + get foo114() { + return new m2.public2(); + } + set foo114(param: m2.public2) { + } + + // Both - with annotation + get foo115(): m2.public2 { + return; + } + set foo115(param: m2.public2) { + } + } +} + + +//// [declFileTypeAnnotationVisibilityErrorAccessors.js] +var m; +(function (m) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var public1 = (function () { + function public1() { + } + return public1; + })(); + m.public1 = public1; + var m2; + (function (m2) { + var public2 = (function () { + function public2() { + } + return public2; + })(); + m2.public2 = public2; + })(m2 || (m2 = {})); + var c = (function () { + function c() { + } + Object.defineProperty(c.prototype, "foo1", { + // getter with annotation + get: function () { + return; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo2", { + // getter without annotation + get: function () { + return new private1(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo3", { + // setter with annotation + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo4", { + // Both - getter without annotation, setter with annotation + get: function () { + return new private1(); + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo5", { + // Both - with annotation + get: function () { + return; + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo11", { + // getter with annotation + get: function () { + return; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo12", { + // getter without annotation + get: function () { + return new public1(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo13", { + // setter with annotation + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo14", { + // Both - getter without annotation, setter with annotation + get: function () { + return new public1(); + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo15", { + // Both - with annotation + get: function () { + return; + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo111", { + // getter with annotation + get: function () { + return; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo112", { + // getter without annotation + get: function () { + return new m2.public2(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo113", { + // setter with annotation + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo114", { + // Both - getter without annotation, setter with annotation + get: function () { + return new m2.public2(); + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(c.prototype, "foo115", { + // Both - with annotation + get: function () { + return; + }, + set: function (param) { + }, + enumerable: true, + configurable: true + }); + return c; + })(); + m.c = c; +})(m || (m = {})); diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt new file mode 100644 index 00000000000..7b2dc1ac911 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt @@ -0,0 +1,60 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts(15,34): error TS4078: Parameter 'param' of exported function has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts(17,26): error TS4078: Parameter 'param' of exported function has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts(40,35): error TS4078: Parameter 'param' of exported function has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts(42,28): error TS4077: Parameter 'param' of exported function has or is using name 'm2.public2' from private module 'm2'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts (4 errors) ==== + + module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(param: private1) { + } + function foo2(param = new private1()) { + } + + export function foo3(param : private1) { + ~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'private1'. + } + export function foo4(param = new private1()) { + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'private1'. + } + + function foo11(param: public1) { + } + function foo12(param = new public1()) { + } + + export function foo13(param: public1) { + } + export function foo14(param = new public1()) { + } + + module m2 { + export class public2 { + } + } + + function foo111(param: m2.public2) { + } + function foo112(param = new m2.public2()) { + } + + export function foo113(param: m2.public2) { + ~~~~~~~~~~ +!!! error TS4078: Parameter 'param' of exported function has or is using private name 'm2'. + } + export function foo114(param = new m2.public2()) { + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4077: Parameter 'param' of exported function has or is using name 'm2.public2' from private module 'm2'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.js new file mode 100644 index 00000000000..4f66f0c8c7f --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.js @@ -0,0 +1,108 @@ +//// [declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts] + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(param: private1) { + } + function foo2(param = new private1()) { + } + + export function foo3(param : private1) { + } + export function foo4(param = new private1()) { + } + + function foo11(param: public1) { + } + function foo12(param = new public1()) { + } + + export function foo13(param: public1) { + } + export function foo14(param = new public1()) { + } + + module m2 { + export class public2 { + } + } + + function foo111(param: m2.public2) { + } + function foo112(param = new m2.public2()) { + } + + export function foo113(param: m2.public2) { + } + export function foo114(param = new m2.public2()) { + } +} + + +//// [declFileTypeAnnotationVisibilityErrorParameterOfFunction.js] +var m; +(function (m) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var public1 = (function () { + function public1() { + } + return public1; + })(); + m.public1 = public1; + // Directly using names from this module + function foo1(param) { + } + function foo2(param) { + if (param === void 0) { param = new private1(); } + } + function foo3(param) { + } + m.foo3 = foo3; + function foo4(param) { + if (param === void 0) { param = new private1(); } + } + m.foo4 = foo4; + function foo11(param) { + } + function foo12(param) { + if (param === void 0) { param = new public1(); } + } + function foo13(param) { + } + m.foo13 = foo13; + function foo14(param) { + if (param === void 0) { param = new public1(); } + } + m.foo14 = foo14; + var m2; + (function (m2) { + var public2 = (function () { + function public2() { + } + return public2; + })(); + m2.public2 = public2; + })(m2 || (m2 = {})); + function foo111(param) { + } + function foo112(param) { + if (param === void 0) { param = new m2.public2(); } + } + function foo113(param) { + } + m.foo113 = foo113; + function foo114(param) { + if (param === void 0) { param = new m2.public2(); } + } + m.foo114 = foo114; +})(m || (m = {})); diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt new file mode 100644 index 00000000000..3aa451248fa --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt @@ -0,0 +1,72 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts(17,29): error TS4060: Return type of exported function has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts(20,21): error TS4060: Return type of exported function has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts(50,31): error TS4060: Return type of exported function has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts(53,21): error TS4059: Return type of exported function has or is using name 'm2.public2' from private module 'm2'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts (4 errors) ==== + + module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(): private1 { + return; + } + function foo2() { + return new private1(); + } + + export function foo3(): private1 { + ~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'private1'. + return; + } + export function foo4() { + ~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'private1'. + return new private1(); + } + + function foo11(): public1 { + return; + } + function foo12() { + return new public1(); + } + + export function foo13(): public1 { + return; + } + export function foo14() { + return new public1(); + } + + module m2 { + export class public2 { + } + } + + function foo111(): m2.public2 { + return; + } + function foo112() { + return new m2.public2(); + } + + export function foo113(): m2.public2 { + ~~~~~~~~~~ +!!! error TS4060: Return type of exported function has or is using private name 'm2'. + return; + } + export function foo114() { + ~~~~~~ +!!! error TS4059: Return type of exported function has or is using name 'm2.public2' from private module 'm2'. + return new m2.public2(); + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.js new file mode 100644 index 00000000000..e12d9ebca63 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.js @@ -0,0 +1,126 @@ +//// [declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts] + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(): private1 { + return; + } + function foo2() { + return new private1(); + } + + export function foo3(): private1 { + return; + } + export function foo4() { + return new private1(); + } + + function foo11(): public1 { + return; + } + function foo12() { + return new public1(); + } + + export function foo13(): public1 { + return; + } + export function foo14() { + return new public1(); + } + + module m2 { + export class public2 { + } + } + + function foo111(): m2.public2 { + return; + } + function foo112() { + return new m2.public2(); + } + + export function foo113(): m2.public2 { + return; + } + export function foo114() { + return new m2.public2(); + } +} + + +//// [declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.js] +var m; +(function (m) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var public1 = (function () { + function public1() { + } + return public1; + })(); + m.public1 = public1; + // Directly using names from this module + function foo1() { + return; + } + function foo2() { + return new private1(); + } + function foo3() { + return; + } + m.foo3 = foo3; + function foo4() { + return new private1(); + } + m.foo4 = foo4; + function foo11() { + return; + } + function foo12() { + return new public1(); + } + function foo13() { + return; + } + m.foo13 = foo13; + function foo14() { + return new public1(); + } + m.foo14 = foo14; + var m2; + (function (m2) { + var public2 = (function () { + function public2() { + } + return public2; + })(); + m2.public2 = public2; + })(m2 || (m2 = {})); + function foo111() { + return; + } + function foo112() { + return new m2.public2(); + } + function foo113() { + return; + } + m.foo113 = foo113; + function foo114() { + return new m2.public2(); + } + m.foo114 = foo114; +})(m || (m = {})); diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt new file mode 100644 index 00000000000..d920cca51b2 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt @@ -0,0 +1,48 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts(13,19): error TS4025: Exported variable 'k' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts(14,16): error TS4025: Exported variable 'l' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts(30,20): error TS4025: Exported variable 'k3' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts(31,16): error TS4024: Exported variable 'l3' has or is using name 'm2.public2' from private module 'm2'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts (4 errors) ==== + + module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + var x: private1; + var y = new private1(); + + export var k: private1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'k' has or is using private name 'private1'. + export var l = new private1(); + ~ +!!! error TS4025: Exported variable 'l' has or is using private name 'private1'. + + var x2: public1; + var y2 = new public1(); + + export var k2: public1; + export var l2 = new public1(); + + module m2 { + export class public2 { + } + } + + var x3: m2.public2; + var y3 = new m2.public2(); + + export var k3: m2.public2; + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'k3' has or is using private name 'm2'. + export var l3 = new m2.public2(); + ~~ +!!! error TS4024: Exported variable 'l3' has or is using name 'm2.public2' from private module 'm2'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.js new file mode 100644 index 00000000000..a097ac159db --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.js @@ -0,0 +1,72 @@ +//// [declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts] + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + var x: private1; + var y = new private1(); + + export var k: private1; + export var l = new private1(); + + var x2: public1; + var y2 = new public1(); + + export var k2: public1; + export var l2 = new public1(); + + module m2 { + export class public2 { + } + } + + var x3: m2.public2; + var y3 = new m2.public2(); + + export var k3: m2.public2; + export var l3 = new m2.public2(); +} + + +//// [declFileTypeAnnotationVisibilityErrorVariableDeclaration.js] +var m; +(function (m) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var public1 = (function () { + function public1() { + } + return public1; + })(); + m.public1 = public1; + // Directly using names from this module + var x; + var y = new private1(); + m.k; + m.l = new private1(); + var x2; + var y2 = new public1(); + m.k2; + m.l2 = new public1(); + var m2; + (function (m2) { + var public2 = (function () { + function public2() { + } + return public2; + })(); + m2.public2 = public2; + })(m2 || (m2 = {})); + var x3; + var y3 = new m2.public2(); + m.k3; + m.l3 = new m2.public2(); +})(m || (m = {})); diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts new file mode 100644 index 00000000000..8dced33083b --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts @@ -0,0 +1,102 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module m { + class private1 { + } + + export class public1 { + } + + module m2 { + export class public2 { + } + } + + export class c { + // getter with annotation + get foo1(): private1 { + return; + } + + // getter without annotation + get foo2() { + return new private1(); + } + + // setter with annotation + set foo3(param: private1) { + } + + // Both - getter without annotation, setter with annotation + get foo4() { + return new private1(); + } + set foo4(param: private1) { + } + + // Both - with annotation + get foo5(): private1 { + return; + } + set foo5(param: private1) { + } + + // getter with annotation + get foo11(): public1 { + return; + } + + // getter without annotation + get foo12() { + return new public1(); + } + + // setter with annotation + set foo13(param: public1) { + } + + // Both - getter without annotation, setter with annotation + get foo14() { + return new public1(); + } + set foo14(param: public1) { + } + + // Both - with annotation + get foo15(): public1 { + return; + } + set foo15(param: public1) { + } + + // getter with annotation + get foo111(): m2.public2 { + return; + } + + // getter without annotation + get foo112() { + return new m2.public2(); + } + + // setter with annotation + set foo113(param: m2.public2) { + } + + // Both - getter without annotation, setter with annotation + get foo114() { + return new m2.public2(); + } + set foo114(param: m2.public2) { + } + + // Both - with annotation + get foo115(): m2.public2 { + return; + } + set foo115(param: m2.public2) { + } + } +} diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts new file mode 100644 index 00000000000..8ae9d5bcf3f --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts @@ -0,0 +1,47 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(param: private1) { + } + function foo2(param = new private1()) { + } + + export function foo3(param : private1) { + } + export function foo4(param = new private1()) { + } + + function foo11(param: public1) { + } + function foo12(param = new public1()) { + } + + export function foo13(param: public1) { + } + export function foo14(param = new public1()) { + } + + module m2 { + export class public2 { + } + } + + function foo111(param: m2.public2) { + } + function foo112(param = new m2.public2()) { + } + + export function foo113(param: m2.public2) { + } + export function foo114(param = new m2.public2()) { + } +} diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts new file mode 100644 index 00000000000..880cba6d0cb --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.ts @@ -0,0 +1,59 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + function foo1(): private1 { + return; + } + function foo2() { + return new private1(); + } + + export function foo3(): private1 { + return; + } + export function foo4() { + return new private1(); + } + + function foo11(): public1 { + return; + } + function foo12() { + return new public1(); + } + + export function foo13(): public1 { + return; + } + export function foo14() { + return new public1(); + } + + module m2 { + export class public2 { + } + } + + function foo111(): m2.public2 { + return; + } + function foo112() { + return new m2.public2(); + } + + export function foo113(): m2.public2 { + return; + } + export function foo114() { + return new m2.public2(); + } +} diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts new file mode 100644 index 00000000000..fa2558f5a15 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts @@ -0,0 +1,35 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module m { + class private1 { + } + + export class public1 { + } + + // Directly using names from this module + var x: private1; + var y = new private1(); + + export var k: private1; + export var l = new private1(); + + var x2: public1; + var y2 = new public1(); + + export var k2: public1; + export var l2 = new public1(); + + module m2 { + export class public2 { + } + } + + var x3: m2.public2; + var y3 = new m2.public2(); + + export var k3: m2.public2; + export var l3 = new m2.public2(); +} From d6fb67822255a5fde4bed562b5bc8b90d1339a88 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 18:28:05 -0800 Subject: [PATCH 030/178] Test cases for type alias declaration emit and privacy check. Also removed the unnecessary error messages for type alias privacy check --- .../diagnosticInformationMap.generated.ts | 2 - src/compiler/diagnosticMessages.json | 8 -- src/compiler/emitter.ts | 13 +-- .../declFileTypeAnnotationTypeAlias.js | 93 +++++++++++++++++++ .../declFileTypeAnnotationTypeAlias.types | 63 +++++++++++++ ...otationVisibilityErrorTypeAlias.errors.txt | 56 +++++++++++ ...eTypeAnnotationVisibilityErrorTypeAlias.js | 92 ++++++++++++++++++ .../declFileTypeAnnotationTypeAlias.ts | 34 +++++++ ...eTypeAnnotationVisibilityErrorTypeAlias.ts | 43 +++++++++ 9 files changed, 385 insertions(+), 19 deletions(-) create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeAlias.js create mode 100644 tests/baselines/reference/declFileTypeAnnotationTypeAlias.types create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.js create mode 100644 tests/cases/compiler/declFileTypeAnnotationTypeAlias.ts create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 349601a6db8..b6cdd95606f 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -349,8 +349,6 @@ module ts { Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, - Exported_type_alias_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4079, category: DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, - Exported_type_alias_0_has_or_is_using_name_1_from_private_module_2: { code: 4080, category: DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using name '{1}' from private module '{2}'." }, Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: DiagnosticCategory.Error, key: "Exported type alias '{0}' has or is using private name '{1}'." }, Enum_declarations_must_all_be_const_or_non_const: { code: 4082, category: DiagnosticCategory.Error, key: "Enum declarations must all be const or non-const." }, In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: DiagnosticCategory.Error, key: "In 'const' enum declarations member initializer must be constant expression.", isEarly: true }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7359abefb60..0b14cbcfcfa 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1393,14 +1393,6 @@ "category": "Error", "code": 4078 }, - "Exported type alias '{0}' has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4079 - }, - "Exported type alias '{0}' has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4080 - }, "Exported type alias '{0}' has or is using private name '{1}'.": { "category": "Error", "code": 4081 diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 3faeea6cc44..882ac643d5e 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2840,7 +2840,7 @@ module ts { } writer.writeLine(); - function getImportEntityNameVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { + function getImportEntityNameVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { return { diagnosticMessage: Diagnostics.Import_declaration_0_is_using_private_name_1, errorNode: node, @@ -2884,15 +2884,10 @@ module ts { write(";"); writeLine(); } - function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { - var diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - symbolAccesibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? - Diagnostics.Exported_type_alias_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : - Diagnostics.Exported_type_alias_0_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1; + function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult): SymbolAccessibilityDiagnostic { return { - diagnosticMessage: diagnosticMessage, - errorNode: node, + diagnosticMessage: Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1, + errorNode: node.type, typeName: node.name }; } diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeAlias.js b/tests/baselines/reference/declFileTypeAnnotationTypeAlias.js new file mode 100644 index 00000000000..494603e286a --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeAlias.js @@ -0,0 +1,93 @@ +//// [declFileTypeAnnotationTypeAlias.ts] + +module M { + export type Value = string | number | boolean; + export var x: Value; + + export class c { + } + + export type C = c; + + export module m { + export class c { + } + } + + export type MC = m.c; + + export type fc = () => c; +} + +interface Window { + someMethod(); +} + +module M { + export type W = Window | string; + export module N { + export class Window { } + export var p: W; + } +} + +//// [declFileTypeAnnotationTypeAlias.js] +var M; +(function (M) { + M.x; + var c = (function () { + function c() { + } + return c; + })(); + M.c = c; + var m; + (function (m) { + var c = (function () { + function c() { + } + return c; + })(); + m.c = c; + })(m = M.m || (M.m = {})); +})(M || (M = {})); +var M; +(function (M) { + var N; + (function (N) { + var Window = (function () { + function Window() { + } + return Window; + })(); + N.Window = Window; + N.p; + })(N = M.N || (M.N = {})); +})(M || (M = {})); + + +//// [declFileTypeAnnotationTypeAlias.d.ts] +declare module M { + type Value = string | number | boolean; + var x: Value; + class c { + } + type C = c; + module m { + class c { + } + } + type MC = m.c; + type fc = () => c; +} +interface Window { + someMethod(): any; +} +declare module M { + type W = Window | string; + module N { + class Window { + } + var p: W; + } +} diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeAlias.types b/tests/baselines/reference/declFileTypeAnnotationTypeAlias.types new file mode 100644 index 00000000000..aa475068bf0 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationTypeAlias.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/declFileTypeAnnotationTypeAlias.ts === + +module M { +>M : typeof M + + export type Value = string | number | boolean; +>Value : string | number | boolean + + export var x: Value; +>x : string | number | boolean +>Value : string | number | boolean + + export class c { +>c : c + } + + export type C = c; +>C : c +>c : c + + export module m { +>m : typeof m + + export class c { +>c : c + } + } + + export type MC = m.c; +>MC : m.c +>m : unknown +>c : m.c + + export type fc = () => c; +>fc : () => c +>c : c +} + +interface Window { +>Window : Window + + someMethod(); +>someMethod : () => any +} + +module M { +>M : typeof M + + export type W = Window | string; +>W : string | Window +>Window : Window + + export module N { +>N : typeof N + + export class Window { } +>Window : Window + + export var p: W; +>p : string | Window +>W : string | Window + } +} diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt new file mode 100644 index 00000000000..644528b7288 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt @@ -0,0 +1,56 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts(10,23): error TS4025: Exported variable 'p' has or is using private name 'W'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts(33,22): error TS4081: Exported type alias 't2' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts(36,23): error TS4081: Exported type alias 't12' has or is using private name 'public1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts(39,24): error TS4081: Exported type alias 't112' has or is using private name 'm3'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts (4 errors) ==== + + interface Window { + someMethod(); + } + + module M { + type W = Window | string; + export module N { + export class Window { } + export var p: W; // Should report error that W is private + ~ +!!! error TS4025: Exported variable 'p' has or is using private name 'W'. + } + } + + module M1 { + export type W = Window | string; + export module N { + export class Window { } + export var p: W; // No error + } + } + + module M2 { + class private1 { + } + class public1 { + } + module m3 { + export class public1 { + } + } + + type t1 = private1; + export type t2 = private1; // error + ~~~~~~~~ +!!! error TS4081: Exported type alias 't2' has or is using private name 'private1'. + + type t11 = public1; + export type t12 = public1; + ~~~~~~~ +!!! error TS4081: Exported type alias 't12' has or is using private name 'public1'. + + type t111 = m3.public1; + export type t112 = m3.public1; // error + ~~~~~~~~~~ +!!! error TS4081: Exported type alias 't112' has or is using private name 'm3'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.js new file mode 100644 index 00000000000..ec653c84dc9 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.js @@ -0,0 +1,92 @@ +//// [declFileTypeAnnotationVisibilityErrorTypeAlias.ts] + +interface Window { + someMethod(); +} + +module M { + type W = Window | string; + export module N { + export class Window { } + export var p: W; // Should report error that W is private + } +} + +module M1 { + export type W = Window | string; + export module N { + export class Window { } + export var p: W; // No error + } +} + +module M2 { + class private1 { + } + class public1 { + } + module m3 { + export class public1 { + } + } + + type t1 = private1; + export type t2 = private1; // error + + type t11 = public1; + export type t12 = public1; + + type t111 = m3.public1; + export type t112 = m3.public1; // error +} + + +//// [declFileTypeAnnotationVisibilityErrorTypeAlias.js] +var M; +(function (M) { + var N; + (function (N) { + var Window = (function () { + function Window() { + } + return Window; + })(); + N.Window = Window; + N.p; // Should report error that W is private + })(N = M.N || (M.N = {})); +})(M || (M = {})); +var M1; +(function (M1) { + var N; + (function (N) { + var Window = (function () { + function Window() { + } + return Window; + })(); + N.Window = Window; + N.p; // No error + })(N = M1.N || (M1.N = {})); +})(M1 || (M1 = {})); +var M2; +(function (M2) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var public1 = (function () { + function public1() { + } + return public1; + })(); + var m3; + (function (m3) { + var public1 = (function () { + function public1() { + } + return public1; + })(); + m3.public1 = public1; + })(m3 || (m3 = {})); +})(M2 || (M2 = {})); diff --git a/tests/cases/compiler/declFileTypeAnnotationTypeAlias.ts b/tests/cases/compiler/declFileTypeAnnotationTypeAlias.ts new file mode 100644 index 00000000000..447921f3f4a --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationTypeAlias.ts @@ -0,0 +1,34 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module M { + export type Value = string | number | boolean; + export var x: Value; + + export class c { + } + + export type C = c; + + export module m { + export class c { + } + } + + export type MC = m.c; + + export type fc = () => c; +} + +interface Window { + someMethod(); +} + +module M { + export type W = Window | string; + export module N { + export class Window { } + export var p: W; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts new file mode 100644 index 00000000000..6431dffd20f --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts @@ -0,0 +1,43 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +interface Window { + someMethod(); +} + +module M { + type W = Window | string; + export module N { + export class Window { } + export var p: W; // Should report error that W is private + } +} + +module M1 { + export type W = Window | string; + export module N { + export class Window { } + export var p: W; // No error + } +} + +module M2 { + class private1 { + } + class public1 { + } + module m3 { + export class public1 { + } + } + + type t1 = private1; + export type t2 = private1; // error + + type t11 = public1; + export type t12 = public1; + + type t111 = m3.public1; + export type t112 = m3.public1; // error +} From c7bd7c955733f027b1b1450986a2e7825570b50d Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 18:34:59 -0800 Subject: [PATCH 031/178] Remove unnecessary privacy errors for heritage and constraint type annotation --- .../diagnosticInformationMap.generated.ts | 11 ---- src/compiler/diagnosticMessages.json | 44 -------------- src/compiler/emitter.ts | 59 +++++-------------- 3 files changed, 14 insertions(+), 100 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index b6cdd95606f..9cbdde1566c 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -271,27 +271,16 @@ module ts { Type_alias_0_circularly_references_itself: { code: 2456, category: DiagnosticCategory.Error, key: "Type alias '{0}' circularly references itself." }, Type_alias_name_cannot_be_0: { code: 2457, category: DiagnosticCategory.Error, key: "Type alias name cannot be '{0}'" }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, - Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, - Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, - Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, - Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." }, Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, - Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." }, Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: DiagnosticCategory.Error, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0b14cbcfcfa..aeaf290cd02 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1081,78 +1081,38 @@ "category": "Error", "code": 4000 }, - "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4001 - }, "Type parameter '{0}' of exported class has or is using private name '{1}'.": { "category": "Error", "code": 4002 }, - "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4003 - }, "Type parameter '{0}' of exported interface has or is using private name '{1}'.": { "category": "Error", "code": 4004 }, - "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4005 - }, "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { "category": "Error", "code": 4006 }, - "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4007 - }, "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { "category": "Error", "code": 4008 }, - "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4009 - }, "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { "category": "Error", "code": 4010 }, - "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4011 - }, "Type parameter '{0}' of public method from exported class has or is using private name '{1}'.": { "category": "Error", "code": 4012 }, - "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4013 - }, "Type parameter '{0}' of method from exported interface has or is using private name '{1}'.": { "category": "Error", "code": 4014 }, - "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4015 - }, "Type parameter '{0}' of exported function has or is using private name '{1}'.": { "category": "Error", "code": 4016 }, - "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4017 - }, - "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4018 - }, "Implements clause of exported class '{0}' has or is using private name '{1}'.": { "category": "Error", "code": 4019 @@ -1161,10 +1121,6 @@ "category": "Error", "code": 4020 }, - "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4021 - }, "Extends clause of exported interface '{0}' has or is using private name '{1}'.": { "category": "Error", "code": 4022 diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 882ac643d5e..8dbf05d2587 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2949,51 +2949,35 @@ module ts { var diagnosticMessage: DiagnosticMessage; switch (node.parent.kind) { case SyntaxKind.ClassDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; case SyntaxKind.InterfaceDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; case SyntaxKind.ConstructSignature: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; case SyntaxKind.CallSignature: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; case SyntaxKind.Method: if (node.parent.flags & NodeFlags.Static) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; } else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; } else { - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; } break; case SyntaxKind.FunctionDeclaration: - diagnosticMessage = symbolAccesibilityResult.errorModuleName ? - Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -3028,29 +3012,14 @@ module ts { var diagnosticMessage: DiagnosticMessage; // Heritage clause is written by user so it can always be named if (node.parent.kind === SyntaxKind.ClassDeclaration) { - // Class - if (symbolAccesibilityResult.errorModuleName) { - // Module is inaccessible - diagnosticMessage = isImplementsList ? - Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : - Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2; - } - else { - // Class or Interface implemented/extended is inaccessible - diagnosticMessage = isImplementsList ? - Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : - Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; - } + // Class or Interface implemented/extended is inaccessible + diagnosticMessage = isImplementsList ? + Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : + Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1; } else { - if (symbolAccesibilityResult.errorModuleName) { - // Module is inaccessible - diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2; - } - else { - // interface is inaccessible - diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; - } + // interface is inaccessible + diagnosticMessage = Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; } return { From acff59f0293bd7e11857ec4358fe68533d36944f Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 18:47:51 -0800 Subject: [PATCH 032/178] Test case for visibility error in the type literal --- ...ationVisibilityErrorTypeLiteral.errors.txt | 91 +++++++++++++++++++ ...ypeAnnotationVisibilityErrorTypeLiteral.js | 69 ++++++++++++++ ...ypeAnnotationVisibilityErrorTypeLiteral.ts | 37 ++++++++ 3 files changed, 197 insertions(+) create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt create mode 100644 tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.js create mode 100644 tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt new file mode 100644 index 00000000000..ef811a919cb --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt @@ -0,0 +1,91 @@ +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(11,12): error TS4025: Exported variable 'x' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(12,12): error TS4025: Exported variable 'x' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(13,13): error TS4025: Exported variable 'x' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(14,19): error TS4025: Exported variable 'x' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(15,22): error TS4025: Exported variable 'x' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(16,22): error TS4025: Exported variable 'x' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(18,16): error TS4024: Exported variable 'x2' has or is using name 'm2.public1' from private module 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(18,16): error TS4025: Exported variable 'x2' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(25,16): error TS4024: Exported variable 'x3' has or is using name 'm2.public1' from private module 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(25,16): error TS4025: Exported variable 'x3' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(28,23): error TS4025: Exported variable 'y' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(28,36): error TS4025: Exported variable 'y' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(29,16): error TS4024: Exported variable 'y2' has or is using name 'm2.public1' from private module 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(29,16): error TS4025: Exported variable 'y2' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(32,27): error TS4025: Exported variable 'z' has or is using private name 'private1'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(32,40): error TS4025: Exported variable 'z' has or is using private name 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): error TS4024: Exported variable 'z2' has or is using name 'm2.public1' from private module 'm2'. +tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): error TS4025: Exported variable 'z2' has or is using private name 'private1'. + + +==== tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts (18 errors) ==== + + module m { + class private1 { + } + module m2 { + export class public1 { + } + } + + export var x: { + x: private1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'private1'. + y: m2.public1; + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'm2'. + (): m2.public1[]; + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'm2'. + method(): private1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'private1'. + [n: number]: private1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'private1'. + [s: string]: m2.public1; + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'x' has or is using private name 'm2'. + }; + export var x2 = { + ~~ +!!! error TS4024: Exported variable 'x2' has or is using name 'm2.public1' from private module 'm2'. + ~~ +!!! error TS4025: Exported variable 'x2' has or is using private name 'private1'. + x: new private1(), + y: new m2.public1(), + method() { + return new private1(); + } + }; + export var x3 = x; + ~~ +!!! error TS4024: Exported variable 'x3' has or is using name 'm2.public1' from private module 'm2'. + ~~ +!!! error TS4025: Exported variable 'x3' has or is using private name 'private1'. + + // Function type + export var y: (a: private1) => m2.public1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'y' has or is using private name 'private1'. + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'y' has or is using private name 'm2'. + export var y2 = y; + ~~ +!!! error TS4024: Exported variable 'y2' has or is using name 'm2.public1' from private module 'm2'. + ~~ +!!! error TS4025: Exported variable 'y2' has or is using private name 'private1'. + + // constructor type + export var z: new (a: private1) => m2.public1; + ~~~~~~~~ +!!! error TS4025: Exported variable 'z' has or is using private name 'private1'. + ~~~~~~~~~~ +!!! error TS4025: Exported variable 'z' has or is using private name 'm2'. + export var z2 = z; + ~~ +!!! error TS4024: Exported variable 'z2' has or is using name 'm2.public1' from private module 'm2'. + ~~ +!!! error TS4025: Exported variable 'z2' has or is using private name 'private1'. + } \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.js b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.js new file mode 100644 index 00000000000..f6bd1689e60 --- /dev/null +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.js @@ -0,0 +1,69 @@ +//// [declFileTypeAnnotationVisibilityErrorTypeLiteral.ts] + +module m { + class private1 { + } + module m2 { + export class public1 { + } + } + + export var x: { + x: private1; + y: m2.public1; + (): m2.public1[]; + method(): private1; + [n: number]: private1; + [s: string]: m2.public1; + }; + export var x2 = { + x: new private1(), + y: new m2.public1(), + method() { + return new private1(); + } + }; + export var x3 = x; + + // Function type + export var y: (a: private1) => m2.public1; + export var y2 = y; + + // constructor type + export var z: new (a: private1) => m2.public1; + export var z2 = z; +} + +//// [declFileTypeAnnotationVisibilityErrorTypeLiteral.js] +var m; +(function (m) { + var private1 = (function () { + function private1() { + } + return private1; + })(); + var m2; + (function (m2) { + var public1 = (function () { + function public1() { + } + return public1; + })(); + m2.public1 = public1; + })(m2 || (m2 = {})); + m.x; + m.x2 = { + x: new private1(), + y: new m2.public1(), + method: function () { + return new private1(); + } + }; + m.x3 = m.x; + // Function type + m.y; + m.y2 = m.y; + // constructor type + m.z; + m.z2 = m.z; +})(m || (m = {})); diff --git a/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts new file mode 100644 index 00000000000..65af116c193 --- /dev/null +++ b/tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts @@ -0,0 +1,37 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +module m { + class private1 { + } + module m2 { + export class public1 { + } + } + + export var x: { + x: private1; + y: m2.public1; + (): m2.public1[]; + method(): private1; + [n: number]: private1; + [s: string]: m2.public1; + }; + export var x2 = { + x: new private1(), + y: new m2.public1(), + method() { + return new private1(); + } + }; + export var x3 = x; + + // Function type + export var y: (a: private1) => m2.public1; + export var y2 = y; + + // constructor type + export var z: new (a: private1) => m2.public1; + export var z2 = z; +} \ No newline at end of file From 60f79da623bfbce3f296c984ad9971e5aad9897d Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 10 Nov 2014 18:50:28 -0800 Subject: [PATCH 033/178] Show error for visibility only on the identifier resulting the error --- src/compiler/checker.ts | 3 +- src/compiler/emitter.ts | 8 +-- src/compiler/types.ts | 3 +- ...otationVisibilityErrorAccessors.errors.txt | 8 +-- ...ibilityErrorParameterOfFunction.errors.txt | 2 +- ...bilityErrorReturnTypeOfFunction.errors.txt | 2 +- ...otationVisibilityErrorTypeAlias.errors.txt | 2 +- ...ationVisibilityErrorTypeLiteral.errors.txt | 10 ++-- ...ibilityErrorVariableDeclaration.errors.txt | 2 +- .../privacyAccessorDeclFile.errors.txt | 24 ++++---- ...ivacyClassExtendsClauseDeclFile.errors.txt | 4 +- ...cyClassImplementsClauseDeclFile.errors.txt | 4 +- ...rivacyFunctionParameterDeclFile.errors.txt | 60 +++++++++---------- ...ivacyFunctionReturnTypeDeclFile.errors.txt | 48 +++++++-------- ...yInterfaceExtendsClauseDeclFile.errors.txt | 4 +- ...ternalReferenceImportWithExport.errors.txt | 14 ++--- ...nalReferenceImportWithoutExport.errors.txt | 10 ++-- ...ternalReferenceImportWithExport.errors.txt | 14 ++--- ...nalReferenceImportWithoutExport.errors.txt | 10 ++-- ...TypeParameterOfFunctionDeclFile.errors.txt | 36 +++++------ ...cyTypeParametersOfClassDeclFile.errors.txt | 4 +- ...peParametersOfInterfaceDeclFile.errors.txt | 4 +- .../reference/privacyVarDeclFile.errors.txt | 30 +++++----- 23 files changed, 154 insertions(+), 152 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5a044d7dadd..1c67c2a7001 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1001,9 +1001,10 @@ module ts { var symbol = resolveName(enclosingDeclaration, (firstIdentifier).text, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined); // Verify if the symbol is accessible - return hasVisibleDeclarations(symbol) || { + return hasVisibleDeclarations(symbol) || { accessibility: SymbolAccessibility.NotAccessible, errorSymbolName: getTextOfNode(firstIdentifier), + errorNode: firstIdentifier }; } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 8dbf05d2587..83c0645d4f9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2562,7 +2562,7 @@ module ts { setWriter(oldWriter); } - function handleSymbolAccessibilityError(symbolAccesibilityResult: SymbolAccessiblityResult, errorNode?: Node) { + function handleSymbolAccessibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) { if (symbolAccesibilityResult.accessibility === SymbolAccessibility.Accessible) { // write the aliases if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { @@ -2575,14 +2575,14 @@ module ts { var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult); if (errorInfo) { if (errorInfo.typeName) { - diagnostics.push(createDiagnosticForNode(errorNode || errorInfo.errorNode, + diagnostics.push(createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); } else { - diagnostics.push(createDiagnosticForNode(errorNode || errorInfo.errorNode, + diagnostics.push(createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName)); @@ -2690,7 +2690,7 @@ module ts { // Aliases can be written asynchronously so use correct enclosing declaration entityName.parent.kind === SyntaxKind.ImportDeclaration ? entityName.parent : enclosingDeclaration); - handleSymbolAccessibilityError(visibilityResult, entityName); + handleSymbolAccessibilityError(visibilityResult); writeEntityName(entityName); function writeEntityName(entityName: EntityName) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1ef50051ec3..13e575760d7 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -792,10 +792,11 @@ module ts { export interface SymbolVisibilityResult { accessibility: SymbolAccessibility; aliasesToMakeVisible?: ImportDeclaration[]; // aliases that need to have this symbol visible + errorSymbolName?: string; // Optional symbol name that results in error + errorNode?: Node; // optional node that results in error } export interface SymbolAccessiblityResult extends SymbolVisibilityResult { - errorSymbolName?: string // Optional symbol name that results in error errorModuleName?: string // If the symbol is not visible from module, module's name } diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt index 4338d852a12..b6130864d8b 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorAccessors.errors.txt @@ -93,7 +93,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(93,23): e // getter with annotation get foo111(): m2.public2 { - ~~~~~~~~~~ + ~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. return; } @@ -107,7 +107,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(93,23): e // setter with annotation set foo113(param: m2.public2) { - ~~~~~~~~~~ + ~~ !!! error TS4037: Parameter 'foo113' of public property setter from exported class has or is using private name 'm2'. } @@ -116,13 +116,13 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorAccessors.ts(93,23): e return new m2.public2(); } set foo114(param: m2.public2) { - ~~~~~~~~~~ + ~~ !!! error TS4037: Parameter 'foo114' of public property setter from exported class has or is using private name 'm2'. } // Both - with annotation get foo115(): m2.public2 { - ~~~~~~~~~~ + ~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'm2'. return; } diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt index 7b2dc1ac911..7dbe3617de9 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorParameterOfFunction.errors.txt @@ -49,7 +49,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorParameterOfFunction.ts } export function foo113(param: m2.public2) { - ~~~~~~~~~~ + ~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'm2'. } export function foo114(param = new m2.public2()) { diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt index 3aa451248fa..449af75bf61 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.errors.txt @@ -59,7 +59,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorReturnTypeOfFunction.t } export function foo113(): m2.public2 { - ~~~~~~~~~~ + ~~ !!! error TS4060: Return type of exported function has or is using private name 'm2'. return; } diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt index 644528b7288..a9fd72ae569 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeAlias.errors.txt @@ -50,7 +50,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeAlias.ts(39,24): e type t111 = m3.public1; export type t112 = m3.public1; // error - ~~~~~~~~~~ + ~~ !!! error TS4081: Exported type alias 't112' has or is using private name 'm3'. } \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt index ef811a919cb..8cba0d12464 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorTypeLiteral.errors.txt @@ -33,10 +33,10 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): ~~~~~~~~ !!! error TS4025: Exported variable 'x' has or is using private name 'private1'. y: m2.public1; - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'x' has or is using private name 'm2'. (): m2.public1[]; - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'x' has or is using private name 'm2'. method(): private1; ~~~~~~~~ @@ -45,7 +45,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): ~~~~~~~~ !!! error TS4025: Exported variable 'x' has or is using private name 'private1'. [s: string]: m2.public1; - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'x' has or is using private name 'm2'. }; export var x2 = { @@ -69,7 +69,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): export var y: (a: private1) => m2.public1; ~~~~~~~~ !!! error TS4025: Exported variable 'y' has or is using private name 'private1'. - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'y' has or is using private name 'm2'. export var y2 = y; ~~ @@ -81,7 +81,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorTypeLiteral.ts(33,16): export var z: new (a: private1) => m2.public1; ~~~~~~~~ !!! error TS4025: Exported variable 'z' has or is using private name 'private1'. - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'z' has or is using private name 'm2'. export var z2 = z; ~~ diff --git a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt index d920cca51b2..33771b85dd4 100644 --- a/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt +++ b/tests/baselines/reference/declFileTypeAnnotationVisibilityErrorVariableDeclaration.errors.txt @@ -39,7 +39,7 @@ tests/cases/compiler/declFileTypeAnnotationVisibilityErrorVariableDeclaration.ts var y3 = new m2.public2(); export var k3: m2.public2; - ~~~~~~~~~~ + ~~ !!! error TS4025: Exported variable 'k3' has or is using private name 'm2'. export var l3 = new m2.public2(); ~~ diff --git a/tests/baselines/reference/privacyAccessorDeclFile.errors.txt b/tests/baselines/reference/privacyAccessorDeclFile.errors.txt index 31147f04716..debb5808493 100644 --- a/tests/baselines/reference/privacyAccessorDeclFile.errors.txt +++ b/tests/baselines/reference/privacyAccessorDeclFile.errors.txt @@ -210,12 +210,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } @@ -233,11 +233,11 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } @@ -436,12 +436,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } @@ -459,11 +459,11 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } @@ -1112,12 +1112,12 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleGetAccessorTypes { static get myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4040: Return type of public static property getter from exported class has or is using private name 'privateModule'. return null; } get myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4043: Return type of public property getter from exported class has or is using private name 'privateModule'. return null; } @@ -1135,11 +1135,11 @@ tests/cases/compiler/privacyAccessorDeclFile_externalModule.ts(380,35): error TS export class publicClassWithPrivateModuleSetAccessorTypes { static set myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicStaticMethod' of public property setter from exported class has or is using private name 'privateModule'. } set myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4037: Parameter 'myPublicMethod' of public property setter from exported class has or is using private name 'privateModule'. } } diff --git a/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt index 9bd892d6b69..f3c21baed3c 100644 --- a/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyClassExtendsClauseDeclFile.errors.txt @@ -30,7 +30,7 @@ tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): class privateClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { } export class publicClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. } } @@ -81,7 +81,7 @@ tests/cases/compiler/privacyClassExtendsClauseDeclFile_externalModule.ts(69,65): class privateClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { } export class publicClassExtendingFromPrivateModuleClass extends privateModule.publicClassInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4020: Extends clause of exported class 'publicClassExtendingFromPrivateModuleClass' has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt index 6e74ad8b2ad..2681ee0e20e 100644 --- a/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyClassImplementsClauseDeclFile.errors.txt @@ -29,7 +29,7 @@ tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,7 class privateClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { } export class publicClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } @@ -83,7 +83,7 @@ tests/cases/compiler/privacyClassImplementsClauseDeclFile_externalModule.ts(68,7 class privateClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { } export class publicClassImplementingFromPrivateModuleInterface implements privateModule.publicInterfaceInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4019: Implements clause of exported class 'publicClassImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt b/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt index 851032858e7..0e88e08e645 100644 --- a/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt +++ b/tests/baselines/reference/privacyFunctionParameterDeclFile.errors.txt @@ -180,39 +180,39 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,89): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { @@ -352,39 +352,39 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,89): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { @@ -813,39 +813,39 @@ tests/cases/compiler/privacyFunctionParameterDeclFile_externalModule.ts(245,89): export interface publicInterfaceWithPrivateModuleParameterTypes { new (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4065: Parameter 'param' of constructor signature from exported interface has or is using private name 'privateModule'. (param: privateModule.publicClass): publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4067: Parameter 'param' of call signature from exported interface has or is using private name 'privateModule'. myMethod(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4075: Parameter 'param' of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4070: Parameter 'param' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4073: Parameter 'param' of public method from exported class has or is using private name 'privateModule'. } constructor(param: privateModule.publicClass, private param1: privateModule.publicClass, public param2: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param1' of constructor from exported class has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4063: Parameter 'param2' of constructor from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass) { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(param: privateModule.publicClass): void; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4078: Parameter 'param' of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { diff --git a/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt b/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt index b3aa71a3143..0156c7241f7 100644 --- a/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt +++ b/tests/baselines/reference/privacyFunctionReturnTypeDeclFile.errors.txt @@ -264,26 +264,26 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } @@ -299,7 +299,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } @@ -309,7 +309,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { @@ -537,26 +537,26 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } @@ -572,7 +572,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } @@ -582,7 +582,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { @@ -1314,26 +1314,26 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) export interface publicInterfaceWithPrivateModuleParameterTypes { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. [x: number]: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4049: Return type of index signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModuleParameterTypes { static myPublicStaticMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4052: Return type of public static method from exported class has or is using private name 'privateModule'. return null; } myPublicMethod(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4055: Return type of public method from exported class has or is using private name 'privateModule'. return null; } @@ -1349,7 +1349,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) } } export function publicFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. return null; } @@ -1359,7 +1359,7 @@ tests/cases/compiler/privacyFunctionReturnTypeDeclFile_externalModule.ts(429,85) return new privateModule.publicClass(); } export declare function publicAmbientFunctionWithPrivateModuleParameterTypes(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModuleParameterTypes { diff --git a/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt b/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt index dadbaa018ba..41c53ffd19b 100644 --- a/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt +++ b/tests/baselines/reference/privacyInterfaceExtendsClauseDeclFile.errors.txt @@ -29,7 +29,7 @@ tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68, interface privateInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { } export interface publicInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } @@ -83,7 +83,7 @@ tests/cases/compiler/privacyInterfaceExtendsClauseDeclFile_externalModule.ts(68, interface privateInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { } export interface publicInterfaceImplementingFromPrivateModuleInterface extends privateModule.publicInterfaceInPrivateModule { // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4022: Extends clause of exported interface 'publicInterfaceImplementingFromPrivateModuleInterface' has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt b/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt index 5b6d1af921d..45dbc77e7a0 100644 --- a/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt +++ b/tests/baselines/reference/privacyLocalInternalReferenceImportWithExport.errors.txt @@ -59,25 +59,25 @@ tests/cases/compiler/privacyLocalInternalReferenceImportWithExport.ts(57,42): er export module import_public { // Privacy errors - importing private elements export import im_public_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. export import im_public_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. export import im_public_f_private = m_private.f_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. export import im_public_v_private = m_private.v_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. export import im_public_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. export import im_public_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. export import im_public_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. // Usage of privacy error imports diff --git a/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt b/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt index 0060febb7ad..12fd1927660 100644 --- a/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt +++ b/tests/baselines/reference/privacyLocalInternalReferenceImportWithoutExport.errors.txt @@ -57,21 +57,21 @@ tests/cases/compiler/privacyLocalInternalReferenceImportWithoutExport.ts(57,36): export module import_public { // No Privacy errors - importing private elements import im_private_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. import im_private_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. import im_private_f_private = m_private.f_private; import im_private_v_private = m_private.v_private; import im_private_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. import im_private_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. import im_private_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. // Usage of above decls diff --git a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt index c3708c45311..d3715af1d54 100644 --- a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt +++ b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithExport.errors.txt @@ -58,25 +58,25 @@ tests/cases/compiler/privacyTopLevelInternalReferenceImportWithExport.ts(56,38): // Privacy errors - importing private elements export import im_public_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_c_private' is using private name 'm_private'. export import im_public_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_e_private' is using private name 'm_private'. export import im_public_f_private = m_private.f_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_f_private' is using private name 'm_private'. export import im_public_v_private = m_private.v_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_v_private' is using private name 'm_private'. export import im_public_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_i_private' is using private name 'm_private'. export import im_public_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mi_private' is using private name 'm_private'. export import im_public_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_public_mu_private' is using private name 'm_private'. // Usage of privacy error imports diff --git a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt index ac7c865c4f1..1fbf8f7bac9 100644 --- a/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt +++ b/tests/baselines/reference/privacyTopLevelInternalReferenceImportWithoutExport.errors.txt @@ -57,21 +57,21 @@ tests/cases/compiler/privacyTopLevelInternalReferenceImportWithoutExport.ts(57,3 // No Privacy errors - importing private elements import im_private_c_private = m_private.c_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_c_private' is using private name 'm_private'. import im_private_e_private = m_private.e_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_e_private' is using private name 'm_private'. import im_private_f_private = m_private.f_private; import im_private_v_private = m_private.v_private; import im_private_i_private = m_private.i_private; - ~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_i_private' is using private name 'm_private'. import im_private_mi_private = m_private.mi_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mi_private' is using private name 'm_private'. import im_private_mu_private = m_private.mu_private; - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS4000: Import declaration 'im_private_mu_private' is using private name 'm_private'. // Usage of above decls diff --git a/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt index 7d6bebdfd3f..663025ee722 100644 --- a/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParameterOfFunctionDeclFile.errors.txt @@ -182,33 +182,33 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,78): error TS export interface publicInterfaceWithPrivatModuleTypeParameters { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithWithPrivateModuleTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateMopduleTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. } @@ -374,33 +374,33 @@ tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,78): error TS export interface publicInterfaceWithPrivatModuleTypeParameters { new (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'. (): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'. myMethod(): privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'. } export class publicClassWithWithPrivateModuleTypeParameters { static myPublicStaticMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'. } myPublicMethod() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'. } } export function publicFunctionWithPrivateMopduleTypeParameters() { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt index bccd9c3b05d..a6ae0fdcc01 100644 --- a/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParametersOfClassDeclFile.errors.txt @@ -50,7 +50,7 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,75): error TS400 } export class publicClassWithTypeParametersFromPrivateModule { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. myMethod(val: T): T { return val; @@ -109,7 +109,7 @@ tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts(98,75): error TS400 } export class publicClassWithTypeParametersFromPrivateModule { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4002: Type parameter 'T' of exported class has or is using private name 'privateModule'. myMethod(val: T): T { return val; diff --git a/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt b/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt index b040fdf4fe3..eb6bb3ea734 100644 --- a/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt +++ b/tests/baselines/reference/privacyTypeParametersOfInterfaceDeclFile.errors.txt @@ -99,7 +99,7 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,89): error export interface publicInterfaceWithPrivateModuleTypeParameterConstraints { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. } @@ -184,7 +184,7 @@ tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts(125,89): error } export interface publicInterfaceWithPrivateModuleTypeParameterConstraints { // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4004: Type parameter 'T' of exported interface has or is using private name 'privateModule'. } diff --git a/tests/baselines/reference/privacyVarDeclFile.errors.txt b/tests/baselines/reference/privacyVarDeclFile.errors.txt index 528b5c3c66f..6ae5373e0c7 100644 --- a/tests/baselines/reference/privacyVarDeclFile.errors.txt +++ b/tests/baselines/reference/privacyVarDeclFile.errors.txt @@ -104,22 +104,22 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,72): error TS4025: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { @@ -205,22 +205,22 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,72): error TS4025: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { @@ -486,22 +486,22 @@ tests/cases/compiler/privacyVarDeclFile_externalModule.ts(151,72): error TS4025: export interface publicInterfaceWithPrivateModulePropertyTypes { myProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4033: Property 'myProperty' of exported interface has or is using private name 'privateModule'. } export class publicClassWithPrivateModulePropertyTypes { static myPublicStaticProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4028: Public static property 'myPublicStaticProperty' of exported class has or is using private name 'privateModule'. myPublicProperty: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4031: Public property 'myPublicProperty' of exported class has or is using private name 'privateModule'. } export var publicVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. export declare var publicAmbientVarWithPrivateModulePropertyTypes: privateModule.publicClass; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS4025: Exported variable 'publicAmbientVarWithPrivateModulePropertyTypes' has or is using private name 'privateModule'. interface privateInterfaceWithPrivateModulePropertyTypes { From 1532f721d0c217ae63d8a07ad1a2da8ce75f8216 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 11 Nov 2014 13:58:50 -0800 Subject: [PATCH 034/178] Initial signature help work for tagged templates. --- src/compiler/parser.ts | 9 ++ src/compiler/types.ts | 2 +- src/services/signatureHelp.ts | 198 +++++++++++++++++++++++----------- 3 files changed, 145 insertions(+), 64 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 132213f950a..b50eccee0c1 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -467,6 +467,15 @@ module ts { } } + export function getInvoker(node: CallLikeExpression): Expression { + if (node.kind === SyntaxKind.TaggedTemplateExpression) { + return (node).tag; + } + else { + return (node).func; + } + } + export function isExpression(node: Node): boolean { switch (node.kind) { case SyntaxKind.ThisKeyword: diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d7d4ba48b08..ffb451080f7 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -720,7 +720,7 @@ module ts { getAugmentedPropertiesOfType(type: Type): Symbol[]; getRootSymbols(symbol: Symbol): Symbol[]; getContextualType(node: Node): Type; - getResolvedSignature(node: CallExpression, candidatesOutArray?: Signature[]): Signature; + getResolvedSignature(node: CallLikeExpression, candidatesOutArray?: Signature[]): Signature; getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 41f64c1b8db..a8d2b40af5d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -164,6 +164,20 @@ module ts.SignatureHelp { //} var emptyArray: any[] = []; + export const enum ArgumentListKind { + TypeArguments, + CallArguments, + TaggedTemplateArguments + } + + export interface ArgumentListInfo { + kind: ArgumentListKind; + invocation: CallLikeExpression; + arguments: Node | NodeArray; + argumentIndex: number; + argumentCount: number; + } + export function getSignatureHelpItems(sourceFile: SourceFile, position: number, typeInfoResolver: TypeChecker, cancellationToken: CancellationTokenObject): SignatureHelpItems { // Decide whether to show signature help var startingToken = findTokenOnLeftOfPosition(sourceFile, position); @@ -180,7 +194,7 @@ module ts.SignatureHelp { return undefined; } - var call = argumentInfo.list.parent; + var call: CallLikeExpression = argumentInfo.invocation; var candidates = []; var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates); cancellationToken.throwIfCancellationRequested(); @@ -195,47 +209,109 @@ module ts.SignatureHelp { * If node is an argument, returns its index in the argument list. * If not, returns -1. */ - function getImmediatelyContainingArgumentInfo(node: Node): ListItemInfo { - if (node.parent.kind !== SyntaxKind.CallExpression && node.parent.kind !== SyntaxKind.NewExpression) { - return undefined; - } + function getImmediatelyContainingArgumentInfo(node: Node): ArgumentListInfo { + var callLikeExpr: CallLikeExpression; - // There are 3 cases to handle: - // 1. The token introduces a list, and should begin a sig help session - // 2. The token is either not associated with a list, or ends a list, so the session should end - // 3. The token is buried inside a list, and should give sig help - // - // The following are examples of each: - // - // Case 1: - // foo<$T, U>($a, b) -> The token introduces a list, and should begin a sig help session - // Case 2: - // fo$o$(a, b)$ -> The token is either not associated with a list, or ends a list, so the session should end - // Case 3: - // foo(a$, $b$) -> The token is buried inside a list, and should give sig help - 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. - // If the user has just opened a list, consider this item 0. - var list = getChildListThatStartsWithOpenerToken(parent, node, sourceFile); - Debug.assert(list !== undefined); - return { - list: list, - listItemIndex: 0 - }; - } + if (node.parent.kind === SyntaxKind.CallExpression || node.parent.kind === SyntaxKind.NewExpression) { + var callExpression = node.parent; + // There are 3 cases to handle: + // 1. The token introduces a list, and should begin a sig help session + // 2. The token is either not associated with a list, or ends a list, so the session should end + // 3. The token is buried inside a list, and should give sig help + // + // The following are examples of each: + // + // Case 1: + // foo<#T, U>(#a, b) -> The token introduces a list, and should begin a sig help session + // Case 2: + // fo#o#(a, b)# -> The token is either not associated with a list, or ends a list, so the session should end + // Case 3: + // foo(a#, #b#) -> The token is buried inside a list, and should give sig help + // 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. + // If the user has just opened a list, consider this item 0. + var list = getChildListThatStartsWithOpenerToken(callExpression, node, sourceFile); + var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; + Debug.assert(list !== undefined); + return { + kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, + invocation: callExpression, + arguments: list, + argumentIndex: 0, + argumentCount: getCommaBasedArgCount(list) + }; + } - // findListItemInfo can return undefined if we are not in parent's argument list - // or type argument list. This includes cases where the cursor is: - // - To the right of the closing paren - // - Between the type arguments and the arguments (greater than token) - // - On the target of the call (parent.func) - // - On the 'new' keyword in a 'new' expression - return findListItemInfo(node); + // findListItemInfo can return undefined if we are not in parent's argument list + // or type argument list. This includes cases where the cursor is: + // - To the right of the closing paren, non-substitution template, or template tail. + // - Between the type arguments and the arguments (greater than token) + // - On the target of the call (parent.func) + // - On the 'new' keyword in a 'new' expression + var listItemInfo = findListItemInfo(node); + if (listItemInfo) { + var list = listItemInfo.list; + var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; + return { + kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, + invocation: callExpression, + arguments: list, + argumentIndex: (listItemInfo.listItemIndex + 1) >> 1, + argumentCount: getCommaBasedArgCount(list) + }; + } + } + else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { + Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); + + var templateExpression = node.parent; + var tagExpression = templateExpression.parent; + + // argumentIndex is 1 to adjust for the TemplateStringsArray + return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, /*argumentIndex*/ 1); + } + else if (node.parent.kind === SyntaxKind.TemplateSpan && node.parent.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { + var templateSpan = node.parent; + var templateExpression = templateSpan.parent; + var tagExpression = templateExpression.parent; + Debug.assert(templateExpression.kind === SyntaxKind.TemplateExpression); + + // We need to account for the TemplateStringsArray, so we add at least 1. + // Then, if we're on the template literal, we want to jump to the next argument, + var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); + var adjustedIndex = isTemplateLiteralKind(node.kind) ? spanIndex + 2 : spanIndex + 1 + + return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, adjustedIndex); + } + + return undefined; } - function getContainingArgumentInfo(node: Node): ListItemInfo { + function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, spans: NodeArray, argumentIndex: number): ArgumentListInfo { + var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral + ? 1 + : (tagExpression.template).templateSpans.length + 1; + + return { + kind: ArgumentListKind.TaggedTemplateArguments, + invocation: tagExpression, + arguments: spans, + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + } + + // The number of arguments is the number of commas plus one, unless the list + // is completely empty, in which case there are 0 arguments. + function getCommaBasedArgCount(argumentsList: Node) { + return argumentsList.getChildCount() === 0 + ? 0 + : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); + } + + function getContainingArgumentInfo(node: Node): ArgumentListInfo { for (var n = node; n.kind !== SyntaxKind.SourceFile; n = n.parent) { if (n.kind === SyntaxKind.FunctionBlock) { return undefined; @@ -292,15 +368,14 @@ module ts.SignatureHelp { return maxParamsSignatureIndex; } - function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentInfoOrTypeArgumentInfo: ListItemInfo): SignatureHelpItems { - var argumentListOrTypeArgumentList = argumentInfoOrTypeArgumentInfo.list; - var parent = argumentListOrTypeArgumentList.parent; - var isTypeParameterHelp = parent.typeArguments && parent.typeArguments.pos === argumentListOrTypeArgumentList.pos; - Debug.assert(isTypeParameterHelp || parent.arguments.pos === argumentListOrTypeArgumentList.pos); + function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListInfo: ArgumentListInfo): SignatureHelpItems { + var argumentsList = argumentListInfo.arguments; + var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; - var callTargetNode = (argumentListOrTypeArgumentList.parent).func; - var callTargetSymbol = typeInfoResolver.getSymbolInfo(callTargetNode); - var callTargetDisplayParts = callTargetSymbol && symbolToDisplayParts(typeInfoResolver, callTargetSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); + var invocation = argumentListInfo.invocation; + var invokerNode = getInvoker(invocation) + var invokerSymbol = typeInfoResolver.getSymbolInfo(invokerNode); + var callTargetDisplayParts = invokerSymbol && symbolToDisplayParts(typeInfoResolver, invokerSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); var items: SignatureHelpItem[] = map(candidates, candidateSignature => { var signatureHelpParameters: SignatureHelpParameter[]; var prefixParts: SymbolDisplayPart[] = []; @@ -310,18 +385,18 @@ module ts.SignatureHelp { prefixParts.push.apply(prefixParts, callTargetDisplayParts); } - if (isTypeParameterHelp) { + if (isTypeParameterList) { prefixParts.push(punctuationPart(SyntaxKind.LessThanToken)); var typeParameters = candidateSignature.typeParameters; signatureHelpParameters = typeParameters && typeParameters.length > 0 ? map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; suffixParts.push(punctuationPart(SyntaxKind.GreaterThanToken)); var parameterParts = mapToDisplayParts(writer => - typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.parameters, writer, argumentListOrTypeArgumentList)); + typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.parameters, writer, invocation)); suffixParts.push.apply(suffixParts, parameterParts); } else { var typeParameterParts = mapToDisplayParts(writer => - typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, argumentListOrTypeArgumentList)); + typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation)); prefixParts.push.apply(prefixParts, typeParameterParts); prefixParts.push(punctuationPart(SyntaxKind.OpenParenToken)); var parameters = candidateSignature.parameters; @@ -330,7 +405,7 @@ module ts.SignatureHelp { } var returnTypeParts = mapToDisplayParts(writer => - typeInfoResolver.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, argumentListOrTypeArgumentList)); + typeInfoResolver.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, invocation)); suffixParts.push.apply(suffixParts, returnTypeParts); return { @@ -351,26 +426,23 @@ module ts.SignatureHelp { // // The applicable span is from the first bar to the second bar (inclusive, // but not including parentheses) - var applicableSpanStart = argumentListOrTypeArgumentList.getFullStart(); - var applicableSpanEnd = skipTrivia(sourceFile.text, argumentListOrTypeArgumentList.end, /*stopAfterLineBreak*/ false); + var applicableSpanStart = argumentsList.pos; + var applicableSpanEnd = skipTrivia(sourceFile.text, argumentsList.end, /*stopAfterLineBreak*/ false); var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - 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 + // 1. foo(a, b, c #) -> the listItemIndex is 4, we want to return 2 + // 2. foo(a, b, # c) -> listItemIndex is 3, we want to return 2 + // 3. foo(#a) -> listItemIndex is 0, we want to return 0 // // In general, we want to subtract the number of commas before the current index. // But if we are on a comma, we also want to pretend we are on the argument *following* // the comma. That amounts to taking the ceiling of half the index. - var argumentIndex = (argumentInfoOrTypeArgumentInfo.listItemIndex + 1) >> 1; + var argumentIndex = argumentListInfo.argumentIndex; - // 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); + // argumentCount is the *apparent* number of arguments. + var argumentCount = argumentListInfo.argumentCount; var selectedItemIndex = candidates.indexOf(bestSignature); if (selectedItemIndex < 0) { @@ -387,7 +459,7 @@ module ts.SignatureHelp { function createSignatureHelpParameterForParameter(parameter: Symbol): SignatureHelpParameter { var displayParts = mapToDisplayParts(writer => - typeInfoResolver.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, argumentListOrTypeArgumentList)); + typeInfoResolver.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, invocation)); var isOptional = !!(parameter.valueDeclaration.flags & NodeFlags.QuestionMark); @@ -401,7 +473,7 @@ module ts.SignatureHelp { function createSignatureHelpParameterForTypeParameter(typeParameter: TypeParameter): SignatureHelpParameter { var displayParts = mapToDisplayParts(writer => - typeInfoResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, argumentListOrTypeArgumentList)); + typeInfoResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, invocation)); return { name: typeParameter.symbol.name, From 8c2091bca52c8240fd277116620b7503f122abc3 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 11 Nov 2014 21:39:06 -0800 Subject: [PATCH 035/178] Add tests to cover scenarios for relative path reference resolution --- src/harness/projectsRunner.ts | 4 +++- .../amd/FieldManager.js | 6 +++++ .../amd/diskFile0.js | 7 ++++++ ...eferenceResolutionRelativePaths.errors.txt | 23 +++++++++++++++++++ .../amd/referenceResolutionRelativePaths.json | 20 ++++++++++++++++ .../node/FieldManager.js | 6 +++++ .../node/diskFile0.js | 7 ++++++ ...eferenceResolutionRelativePaths.errors.txt | 23 +++++++++++++++++++ .../referenceResolutionRelativePaths.json | 20 ++++++++++++++++ ...olutionRelativePathsFromRootDirectory.json | 20 ++++++++++++++++ .../amd/src/ts/Manager/FieldManager.d.ts | 3 +++ .../amd/src/ts/Manager/FieldManager.js | 6 +++++ .../amd/typings/tsd.d.ts | 3 +++ .../amd/typings/tsd.js | 7 ++++++ ...olutionRelativePathsFromRootDirectory.json | 20 ++++++++++++++++ .../node/src/ts/Manager/FieldManager.d.ts | 3 +++ .../node/src/ts/Manager/FieldManager.js | 6 +++++ .../node/typings/tsd.d.ts | 3 +++ .../node/typings/tsd.js | 7 ++++++ ...renceResolutionRelativePathsNoResolve.json | 17 ++++++++++++++ ...renceResolutionRelativePathsNoResolve.json | 17 ++++++++++++++ .../amd/FieldManager.d.ts | 3 +++ .../amd/FieldManager.js | 6 +++++ .../amd/diskFile0.js | 7 ++++++ .../amd/diskFile1.d.ts | 3 +++ ...nRelativePathsRelativeToRootDirectory.json | 20 ++++++++++++++++ .../node/FieldManager.d.ts | 3 +++ .../node/FieldManager.js | 6 +++++ .../node/diskFile0.js | 7 ++++++ .../node/diskFile1.d.ts | 3 +++ ...nRelativePathsRelativeToRootDirectory.json | 20 ++++++++++++++++ .../referenceResolutionRelativePaths.json | 9 ++++++++ ...olutionRelativePathsFromRootDirectory.json | 9 ++++++++ ...renceResolutionRelativePathsNoResolve.json | 9 ++++++++ ...nRelativePathsRelativeToRootDirectory.json | 9 ++++++++ .../src/ts/Manager/FieldManager.ts | 4 ++++ .../ReferenceResolution/typings/tsd.ts | 4 ++++ 37 files changed, 349 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json create mode 100644 tests/cases/project/referenceResolutionRelativePaths.json create mode 100644 tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json create mode 100644 tests/cases/project/referenceResolutionRelativePathsNoResolve.json create mode 100644 tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json create mode 100644 tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts create mode 100644 tests/cases/projects/ReferenceResolution/typings/tsd.ts diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 797bc12a42b..d0972ac59b1 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -17,6 +17,7 @@ interface ProjectRunnerTestCase { baselineCheck?: boolean; // Verify the baselines of output files, if this is false, we will write to output to the disk but there is no verification of baselines runTest?: boolean; // Run the resulting test bug?: string; // If there is any bug associated with this test case + noResolve?: boolean; } interface ProjectRunnerTestCaseResolutionInfo extends ProjectRunnerTestCase { @@ -162,7 +163,8 @@ class ProjectRunner extends RunnerBase { outDir: testCase.outDir, mapRoot: testCase.resolveMapRoot && testCase.mapRoot ? sys.resolvePath(testCase.mapRoot) : testCase.mapRoot, sourceRoot: testCase.resolveSourceRoot && testCase.sourceRoot ? sys.resolvePath(testCase.sourceRoot) : testCase.sourceRoot, - module: moduleKind + module: moduleKind, + noResolve: testCase.noResolve }; } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt new file mode 100644 index 00000000000..3cca49932b3 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt @@ -0,0 +1,23 @@ +../../../src/ts/Manager/FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. +FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. + + +==== ../../../src/ts/Manager/FieldManager.ts (1 errors) ==== + /// + + class FieldManager { + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'FieldManager'. + } +==== ../../../typings/tsd.ts (0 errors) ==== + /// + // This is tsd.ts + class tsd { + } +==== FieldManager.ts (1 errors) ==== + /// + + class FieldManager { + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'FieldManager'. + } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json new file mode 100644 index 00000000000..3d5aadcd5b5 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "../../../src/ts/Manager/FieldManager.ts", + "../../../typings/tsd.ts", + "FieldManager.ts" + ], + "emittedFiles": [ + "../../../src/ts/Manager/FieldManager.js", + "../../../typings/tsd.js", + "FieldManager.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt new file mode 100644 index 00000000000..3cca49932b3 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt @@ -0,0 +1,23 @@ +../../../src/ts/Manager/FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. +FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. + + +==== ../../../src/ts/Manager/FieldManager.ts (1 errors) ==== + /// + + class FieldManager { + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'FieldManager'. + } +==== ../../../typings/tsd.ts (0 errors) ==== + /// + // This is tsd.ts + class tsd { + } +==== FieldManager.ts (1 errors) ==== + /// + + class FieldManager { + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'FieldManager'. + } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json new file mode 100644 index 00000000000..3d5aadcd5b5 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "../../../src/ts/Manager/FieldManager.ts", + "../../../typings/tsd.ts", + "FieldManager.ts" + ], + "emittedFiles": [ + "../../../src/ts/Manager/FieldManager.js", + "../../../typings/tsd.js", + "FieldManager.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json new file mode 100644 index 00000000000..328d1ae7cc8 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "projectRoot": "tests/cases/projects/ReferenceResolution", + "inputFiles": [ + "src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "typings/tsd.ts", + "src/ts/Manager/FieldManager.ts" + ], + "emittedFiles": [ + "typings/tsd.js", + "typings/tsd.d.ts", + "src/ts/Manager/FieldManager.js", + "src/ts/Manager/FieldManager.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json new file mode 100644 index 00000000000..328d1ae7cc8 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "projectRoot": "tests/cases/projects/ReferenceResolution", + "inputFiles": [ + "src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "typings/tsd.ts", + "src/ts/Manager/FieldManager.ts" + ], + "emittedFiles": [ + "typings/tsd.js", + "typings/tsd.d.ts", + "src/ts/Manager/FieldManager.js", + "src/ts/Manager/FieldManager.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json new file mode 100644 index 00000000000..ff05ee05b57 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json @@ -0,0 +1,17 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts", + "../../../typings/tsd.ts" + ], + "resolvedInputFiles": [ + "lib.d.ts", + "FieldManager.ts", + "../../../typings/tsd.ts" + ], + "emittedFiles": [ + "FieldManager.js", + "../../../typings/tsd.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json new file mode 100644 index 00000000000..ff05ee05b57 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json @@ -0,0 +1,17 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts", + "../../../typings/tsd.ts" + ], + "resolvedInputFiles": [ + "lib.d.ts", + "FieldManager.ts", + "../../../typings/tsd.ts" + ], + "emittedFiles": [ + "FieldManager.js", + "../../../typings/tsd.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json new file mode 100644 index 00000000000..8e07c4a02e9 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "../../../src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "../../../typings/tsd.ts", + "../../../src/ts/Manager/FieldManager.ts" + ], + "emittedFiles": [ + "../../../typings/tsd.js", + "../../../typings/tsd.d.ts", + "../../../src/ts/Manager/FieldManager.js", + "../../../src/ts/Manager/FieldManager.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js new file mode 100644 index 00000000000..91cbe5f761b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js @@ -0,0 +1,6 @@ +/// +var FieldManager = (function () { + function FieldManager() { + } + return FieldManager; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js new file mode 100644 index 00000000000..3d740c6159a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is tsd.ts +var tsd = (function () { + function tsd() { + } + return tsd; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json new file mode 100644 index 00000000000..8e07c4a02e9 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -0,0 +1,20 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "../../../src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "../../../typings/tsd.ts", + "../../../src/ts/Manager/FieldManager.ts" + ], + "emittedFiles": [ + "../../../typings/tsd.js", + "../../../typings/tsd.d.ts", + "../../../src/ts/Manager/FieldManager.js", + "../../../src/ts/Manager/FieldManager.d.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePaths.json b/tests/cases/project/referenceResolutionRelativePaths.json new file mode 100644 index 00000000000..2b6539ce48f --- /dev/null +++ b/tests/cases/project/referenceResolutionRelativePaths.json @@ -0,0 +1,9 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json b/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json new file mode 100644 index 00000000000..faf4a23b917 --- /dev/null +++ b/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json @@ -0,0 +1,9 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "projectRoot": "tests/cases/projects/ReferenceResolution", + "inputFiles": [ + "src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePathsNoResolve.json b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json new file mode 100644 index 00000000000..f9ba5b047f9 --- /dev/null +++ b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json @@ -0,0 +1,9 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "FieldManager.ts", + "../../../typings/tsd.ts" + ], + "noResolve": true +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json new file mode 100644 index 00000000000..a522596e816 --- /dev/null +++ b/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -0,0 +1,9 @@ +{ + "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "inputFiles": [ + "../../../src/ts/Manager/FieldManager.ts" + ], + "declaration": true, + "baselineCheck": true +} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts b/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts new file mode 100644 index 00000000000..c45efd43c88 --- /dev/null +++ b/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts @@ -0,0 +1,4 @@ +/// + +class FieldManager { +} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/typings/tsd.ts b/tests/cases/projects/ReferenceResolution/typings/tsd.ts new file mode 100644 index 00000000000..2d9e3be13c7 --- /dev/null +++ b/tests/cases/projects/ReferenceResolution/typings/tsd.ts @@ -0,0 +1,4 @@ +/// +// This is tsd.ts +class tsd { +} \ No newline at end of file From 63a20863c1de137b9c97d86199de6a802ee184d9 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 11 Nov 2014 22:58:47 -0800 Subject: [PATCH 036/178] Fix the relative path reference resolution Fixes #1039 --- src/compiler/core.ts | 4 ++ src/compiler/emitter.ts | 11 ++--- src/compiler/parser.ts | 39 +++++++++++++--- src/harness/harness.ts | 2 +- src/harness/projectsRunner.ts | 44 ++++++++++++++++--- src/services/services.ts | 7 ++- .../amd/FieldManager.d.ts | 3 ++ .../amd/diskFile1.d.ts | 3 ++ ...eferenceResolutionRelativePaths.errors.txt | 23 ---------- .../amd/referenceResolutionRelativePaths.json | 6 +-- .../node/FieldManager.d.ts | 3 ++ .../node/diskFile1.d.ts | 3 ++ ...eferenceResolutionRelativePaths.errors.txt | 23 ---------- .../referenceResolutionRelativePaths.json | 6 +-- 14 files changed, 100 insertions(+), 77 deletions(-) create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt diff --git a/src/compiler/core.ts b/src/compiler/core.ts index e512688fee2..4b412d051dd 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -459,6 +459,10 @@ module ts { return normalizedPathComponents(path, rootLength); } + export function getNormalizedAbsolutePath(filename: string, currentDirectory: string) { + return getNormalizedPathFromPathComponents(getNormalizedPathComponents(filename, currentDirectory)); + } + export function getNormalizedPathFromPathComponents(pathComponents: string[]) { if (pathComponents && pathComponents.length) { return pathComponents[0] + pathComponents.slice(1).join(directorySeparator); diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f61d4403eec..eb423e214a9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -57,7 +57,7 @@ module ts { var newLine = program.getCompilerHost().getNewLine(); function getSourceFilePathInNewDir(newDirPath: string, sourceFile: SourceFile) { - var sourceFilePath = getNormalizedPathFromPathComponents(getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + var sourceFilePath = getNormalizedAbsolutePath(sourceFile.filename, compilerHost.getCurrentDirectory()); sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); return combinePaths(newDirPath, sourceFilePath); } @@ -3370,11 +3370,6 @@ module ts { } } - function tryResolveScriptReference(sourceFile: SourceFile, reference: FileReference) { - var referenceFileName = normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename)); - return program.getSourceFile(referenceFileName); - } - // Contains the reference paths that needs to go in the declaration file. // Collecting this separately because reference paths need to be first thing in the declaration file // and we could be collecting these paths from multiple files into single one with --out option @@ -3401,7 +3396,7 @@ module ts { if (!compilerOptions.noResolve) { var addedGlobalFileReference = false; forEach(root.referencedFiles, fileReference => { - var referencedFile = tryResolveScriptReference(root, fileReference); + var referencedFile = tryResolveScriptReference(program, root, fileReference); // All the references that are not going to be part of same file if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference @@ -3426,7 +3421,7 @@ module ts { // Check what references need to be added if (!compilerOptions.noResolve) { forEach(sourceFile.referencedFiles, fileReference => { - var referencedFile = tryResolveScriptReference(sourceFile, fileReference); + var referencedFile = tryResolveScriptReference(program, sourceFile, fileReference); // If the reference file is a declaration file or an external module, emit that reference if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4849cb8c89e..df557cef591 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -634,6 +634,15 @@ module ts { return false; } + export function tryResolveScriptReference(program: Program, sourceFile: SourceFile, reference: FileReference) { + var referenceFileName = isRootedDiskPath(reference.filename) ? reference.filename : combinePaths(getDirectoryPath(sourceFile.filename), reference.filename); + referenceFileName = normalizePath(referenceFileName); + if (!program.getCompilerOptions().noResolve) { + referenceFileName = getNormalizedAbsolutePath(referenceFileName, program.getCompilerHost().getCurrentDirectory()); + } + return program.getSourceFile(referenceFileName); + } + export function getAncestor(node: Node, kind: SyntaxKind): Node { switch (kind) { // special-cases that can be come first @@ -4373,13 +4382,18 @@ module ts { var canonicalName = host.getCanonicalFileName(filename); if (hasProperty(filesByName, canonicalName)) { // We've already looked for this file, use cached result - var file = filesByName[canonicalName]; - if (file && host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { - errors.push(createFileDiagnostic(refFile, refStart, refLength, - Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename)); - } + return getSourceFileFromCache(filename, canonicalName, /*useAbsolutePath*/ false); } else { + // if --noResolve is not specified check if we have file for absolute path + if (!options.noResolve) { + var normalizedAbsolutePath = getNormalizedAbsolutePath(filename, host.getCurrentDirectory()); + var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath); + if (hasProperty(filesByName, canonicalAbsolutePath)) { + return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, /*useAbsolutePath*/ true); + } + } + // We haven't looked for this file, do so now and cache result var file = filesByName[canonicalName] = host.getSourceFile(filename, options.target, hostErrorMessage => { errors.push(createFileDiagnostic(refFile, refStart, refLength, @@ -4388,6 +4402,9 @@ module ts { if (file) { seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; if (!options.noResolve) { + // Set the source file for normalized absolute path + filesByName[canonicalAbsolutePath] = file; + var basePath = getDirectoryPath(filename); processReferencedFiles(file, basePath); processImportedModules(file, basePath); @@ -4404,6 +4421,18 @@ module ts { } } return file; + + function getSourceFileFromCache(filename: string, canonicalName: string, useAbsolutePath: boolean): SourceFile { + var file = filesByName[canonicalName]; + if (file && host.useCaseSensitiveFileNames()) { + var sourceFileName = useAbsolutePath ? getNormalizedAbsolutePath(file.filename, host.getCurrentDirectory()) : file.filename; + if (canonicalName !== sourceFileName) { + errors.push(createFileDiagnostic(refFile, refStart, refLength, + Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, sourceFileName)); + } + } + return file; + } } function processReferencedFiles(file: SourceFile, basePath: string) { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index d385dd2afc7..bbfc2f5678f 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -863,7 +863,7 @@ module Harness { var sourceFileName: string; if (ts.isExternalModule(sourceFile) || !options.out) { if (options.outDir) { - var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, result.currentDirectoryForProgram)); + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.filename, result.currentDirectoryForProgram); sourceFilePath = sourceFilePath.replace(result.program.getCommonSourceDirectory(), ""); sourceFileName = ts.combinePaths(options.outDir, sourceFilePath); } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index d0972ac59b1..35f71ccd5a0 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -274,20 +274,50 @@ class ProjectRunner extends RunnerBase { } function compileCompileDTsFiles(compilerResult: BatchCompileProjectTestCaseResult) { - var inputDtsSourceFiles = ts.map(ts.filter(compilerResult.program.getSourceFiles(), - sourceFile => Harness.Compiler.isDTS(sourceFile.filename)), - sourceFile => { - return { emittedFileName: sourceFile.filename, code: sourceFile.text }; - }); + var allInputFiles: { emittedFileName: string; code: string; }[] = []; + var compilerOptions = compilerResult.program.getCompilerOptions(); + var compilerHost = compilerResult.program.getCompilerHost(); + ts.forEach(compilerResult.program.getSourceFiles(), sourceFile => { + if (Harness.Compiler.isDTS(sourceFile.filename)) { + allInputFiles.unshift({ emittedFileName: sourceFile.filename, code: sourceFile.text }); + } + else if (ts.shouldEmitToOwnFile(sourceFile, compilerResult.program.getCompilerOptions())) { + if (compilerOptions.outDir) { + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.filename, compilerHost.getCurrentDirectory()); + sourceFilePath = sourceFilePath.replace(compilerResult.program.getCommonSourceDirectory(), ""); + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(ts.combinePaths(compilerOptions.outDir, sourceFilePath)); + } + else { + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename); + } + + var outputDtsFileName = emitOutputFilePathWithoutExtension + ".d.ts"; + allInputFiles.unshift(findOutpuDtsFile(outputDtsFileName)); + } + else { + var outputDtsFileName = ts.removeFileExtension(compilerOptions.out) + ".d.ts"; + var outputDtsFile = findOutpuDtsFile(outputDtsFileName); + if (!ts.contains(allInputFiles, outputDtsFile)) { + allInputFiles.unshift(outputDtsFile); + } + } + }); + + console.log("inputFiles"); + ts.forEach(allInputFiles, inputFile => { + console.log(inputFile.emittedFileName); + }); - var ouputDtsFiles = ts.filter(compilerResult.outputFiles, ouputFile => Harness.Compiler.isDTS(ouputFile.emittedFileName)); - var allInputFiles = inputDtsSourceFiles.concat(ouputDtsFiles); return compileProjectFiles(compilerResult.moduleKind,getInputFiles, getSourceFileText, writeFile); + function findOutpuDtsFile(fileName: string) { + return ts.forEach(compilerResult.outputFiles, outputFile => outputFile.emittedFileName === fileName ? outputFile : undefined); + } function getInputFiles() { return ts.map(allInputFiles, outputFile => outputFile.emittedFileName); } function getSourceFileText(filename: string): string { + console.log("Reading: " + filename + ": " + (ts.forEach(allInputFiles, inputFile => inputFile.emittedFileName === filename ? inputFile.code : undefined) !== undefined)); return ts.forEach(allInputFiles, inputFile => inputFile.emittedFileName === filename ? inputFile.code : undefined); } diff --git a/src/services/services.ts b/src/services/services.ts index 800d63738f0..0c1ffff3e7a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3383,11 +3383,10 @@ module ts { /// Triple slash reference comments var comment = forEach(sourceFile.referencedFiles, r => (r.pos <= position && position < r.end) ? r : undefined); if (comment) { - var targetFilename = isRootedDiskPath(comment.filename) ? comment.filename : combinePaths(getDirectoryPath(filename), comment.filename); - targetFilename = normalizePath(targetFilename); - if (program.getSourceFile(targetFilename)) { + var referenceFile = tryResolveScriptReference(program, sourceFile, comment); + if (referenceFile) { return [{ - fileName: targetFilename, + fileName: referenceFile.filename, textSpan: TypeScript.TextSpan.fromBounds(0, 0), kind: ScriptElementKind.scriptElement, name: comment.filename, diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt deleted file mode 100644 index 3cca49932b3..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -../../../src/ts/Manager/FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. -FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. - - -==== ../../../src/ts/Manager/FieldManager.ts (1 errors) ==== - /// - - class FieldManager { - ~~~~~~~~~~~~ -!!! error TS2300: Duplicate identifier 'FieldManager'. - } -==== ../../../typings/tsd.ts (0 errors) ==== - /// - // This is tsd.ts - class tsd { - } -==== FieldManager.ts (1 errors) ==== - /// - - class FieldManager { - ~~~~~~~~~~~~ -!!! error TS2300: Duplicate identifier 'FieldManager'. - } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json index 3d5aadcd5b5..c757106757b 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json @@ -8,13 +8,13 @@ "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../src/ts/Manager/FieldManager.ts", "../../../typings/tsd.ts", "FieldManager.ts" ], "emittedFiles": [ - "../../../src/ts/Manager/FieldManager.js", "../../../typings/tsd.js", - "FieldManager.js" + "../../../typings/tsd.d.ts", + "FieldManager.js", + "FieldManager.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts new file mode 100644 index 00000000000..aee3544dd2b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts @@ -0,0 +1,3 @@ +/// +declare class FieldManager { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts new file mode 100644 index 00000000000..d2cfdf658ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts @@ -0,0 +1,3 @@ +/// +declare class tsd { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt deleted file mode 100644 index 3cca49932b3..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -../../../src/ts/Manager/FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. -FieldManager.ts(3,7): error TS2300: Duplicate identifier 'FieldManager'. - - -==== ../../../src/ts/Manager/FieldManager.ts (1 errors) ==== - /// - - class FieldManager { - ~~~~~~~~~~~~ -!!! error TS2300: Duplicate identifier 'FieldManager'. - } -==== ../../../typings/tsd.ts (0 errors) ==== - /// - // This is tsd.ts - class tsd { - } -==== FieldManager.ts (1 errors) ==== - /// - - class FieldManager { - ~~~~~~~~~~~~ -!!! error TS2300: Duplicate identifier 'FieldManager'. - } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json index 3d5aadcd5b5..c757106757b 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json @@ -8,13 +8,13 @@ "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../src/ts/Manager/FieldManager.ts", "../../../typings/tsd.ts", "FieldManager.ts" ], "emittedFiles": [ - "../../../src/ts/Manager/FieldManager.js", "../../../typings/tsd.js", - "FieldManager.js" + "../../../typings/tsd.d.ts", + "FieldManager.js", + "FieldManager.d.ts" ] } \ No newline at end of file From 49ae5c71173ff559f87beafa96b8d133ff1f3976 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 12 Nov 2014 14:23:59 -0800 Subject: [PATCH 037/178] Fixes the quickInfo and completion list details for let and adds test cases for let and const Handles #1083 --- src/services/navigationBar.ts | 3 ++ src/services/services.ts | 13 ++++++- .../constQuickInfoAndCompletionList.ts | 37 +++++++++++++++++++ .../letQuickInfoAndCompletionList.ts | 28 ++++++++++++++ tests/cases/fourslash/navbar_let.ts | 13 +++++++ tests/cases/fourslash/navigateItemsConst.ts | 16 ++++++++ tests/cases/fourslash/navigateItemsLet.ts | 16 ++++++++ 7 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/constQuickInfoAndCompletionList.ts create mode 100644 tests/cases/fourslash/letQuickInfoAndCompletionList.ts create mode 100644 tests/cases/fourslash/navbar_let.ts create mode 100644 tests/cases/fourslash/navigateItemsConst.ts create mode 100644 tests/cases/fourslash/navigateItemsLet.ts diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index ca06d40fa88..b8106fc18d4 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -238,6 +238,9 @@ module ts.NavigationBar { if (node.flags & NodeFlags.Const) { return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.constantElement); } + else if (node.flags & NodeFlags.Let) { + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.letElement); + } else { return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.variableElement); } diff --git a/src/services/services.ts b/src/services/services.ts index 800d63738f0..4cf65d820c7 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1225,6 +1225,8 @@ module ts { static alias = "alias"; static constantElement = "constant"; + + static letElement = "let"; } export class ScriptElementKindModifier { @@ -2857,9 +2859,12 @@ module ts { if (isFirstDeclarationOfSymbolParameter(symbol)) { return ScriptElementKind.parameterElement; } - else if(symbol.valueDeclaration && symbol.valueDeclaration.flags & NodeFlags.Const) { + else if (symbol.valueDeclaration && symbol.valueDeclaration.flags & NodeFlags.Const) { return ScriptElementKind.constantElement; } + else if (forEach(symbol.declarations, declaration => declaration.flags & NodeFlags.Let)) { + return ScriptElementKind.letElement; + } return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement; } if (flags & SymbolFlags.Function) return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement; @@ -2915,7 +2920,11 @@ module ts { case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement; case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement; case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement; - case SyntaxKind.VariableDeclaration: return node.flags & NodeFlags.Const ? ScriptElementKind.constantElement: ScriptElementKind.variableElement; + case SyntaxKind.VariableDeclaration: return node.flags & NodeFlags.Const ? + ScriptElementKind.constantElement : + node.flags & NodeFlags.Let ? + ScriptElementKind.letElement : + ScriptElementKind.variableElement; case SyntaxKind.FunctionDeclaration: return ScriptElementKind.functionElement; case SyntaxKind.GetAccessor: return ScriptElementKind.memberGetAccessorElement; case SyntaxKind.SetAccessor: return ScriptElementKind.memberSetAccessorElement; diff --git a/tests/cases/fourslash/constQuickInfoAndCompletionList.ts b/tests/cases/fourslash/constQuickInfoAndCompletionList.ts new file mode 100644 index 00000000000..421a9819d44 --- /dev/null +++ b/tests/cases/fourslash/constQuickInfoAndCompletionList.ts @@ -0,0 +1,37 @@ +/// + +////const /*1*/a = 10; +////var x = /*2*/a; +/////*3*/ +////function foo() { +//// const /*4*/b = 20; +//// var y = /*5*/b; +//// var z = /*6*/a; +//// /*7*/ +////} +goTo.marker('1'); +verify.quickInfoIs("(constant) a: number"); + +goTo.marker('2'); +verify.completionListContains("a", "(constant) a: number"); +verify.quickInfoIs("(constant) a: number"); + +goTo.marker('3'); +verify.completionListContains("a", "(constant) a: number"); + +goTo.marker('4'); +verify.quickInfoIs("(constant) b: number"); + +goTo.marker('5'); +verify.completionListContains("a", "(constant) a: number"); +verify.completionListContains("b", "(constant) b: number"); +verify.quickInfoIs("(constant) b: number"); + +goTo.marker('6'); +verify.completionListContains("a", "(constant) a: number"); +verify.completionListContains("b", "(constant) b: number"); +verify.quickInfoIs("(constant) a: number"); + +goTo.marker('7'); +verify.completionListContains("a", "(constant) a: number"); +verify.completionListContains("b", "(constant) b: number"); \ No newline at end of file diff --git a/tests/cases/fourslash/letQuickInfoAndCompletionList.ts b/tests/cases/fourslash/letQuickInfoAndCompletionList.ts new file mode 100644 index 00000000000..127b4d626fd --- /dev/null +++ b/tests/cases/fourslash/letQuickInfoAndCompletionList.ts @@ -0,0 +1,28 @@ +/// + +////let /*1*/a = 10; +/////*2*/a = 30; +////function foo() { +//// let /*3*/b = 20; +//// /*4*/b = /*5*/a; +////} + +goTo.marker('1'); +verify.quickInfoIs("(let) a: number"); + +goTo.marker('2'); +verify.completionListContains("a", "(let) a: number"); +verify.quickInfoIs("(let) a: number"); + +goTo.marker('3'); +verify.quickInfoIs("(let) b: number"); + +goTo.marker('4'); +verify.completionListContains("a", "(let) a: number"); +verify.completionListContains("b", "(let) b: number"); +verify.quickInfoIs("(let) b: number"); + +goTo.marker('5'); +verify.completionListContains("a", "(let) a: number"); +verify.completionListContains("b", "(let) b: number"); +verify.quickInfoIs("(let) a: number"); \ No newline at end of file diff --git a/tests/cases/fourslash/navbar_let.ts b/tests/cases/fourslash/navbar_let.ts new file mode 100644 index 00000000000..841382abc53 --- /dev/null +++ b/tests/cases/fourslash/navbar_let.ts @@ -0,0 +1,13 @@ +/// + +//// {| "itemName": "c", "kind": "let", "parentName": "" |}let c = 0; + +test.markers().forEach(marker => { + verify.getScriptLexicalStructureListContains( + marker.data.itemName, + marker.data.kind, + marker.fileName, + marker.data.parentName, + marker.data.isAdditionalRange, + marker.position); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/navigateItemsConst.ts b/tests/cases/fourslash/navigateItemsConst.ts new file mode 100644 index 00000000000..6f0fdf717ff --- /dev/null +++ b/tests/cases/fourslash/navigateItemsConst.ts @@ -0,0 +1,16 @@ +/// + +////{| "itemName": "c", "kind": "constant", "parentName": "" |}const c = 10; +////function foo() { +//// {| "itemName": "d", "kind": "constant", "parentName": "foo" |}const d = 10; +////} + +test.markers().forEach(marker => { + verify.navigationItemsListContains( + marker.data.itemName, + marker.data.kind, + marker.data.itemName, + "exact", + marker.fileName, + marker.data.parentName); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/navigateItemsLet.ts b/tests/cases/fourslash/navigateItemsLet.ts new file mode 100644 index 00000000000..dc399522703 --- /dev/null +++ b/tests/cases/fourslash/navigateItemsLet.ts @@ -0,0 +1,16 @@ +/// + +////{| "itemName": "c", "kind": "let", "parentName": "" |}let c = 10; +////function foo() { +//// {| "itemName": "d", "kind": "let", "parentName": "foo" |}let d = 10; +////} + +test.markers().forEach(marker => { + verify.navigationItemsListContains( + marker.data.itemName, + marker.data.kind, + marker.data.itemName, + "exact", + marker.fileName, + marker.data.parentName); +}); \ No newline at end of file From 0fdb0fa2d401400ce6718dc5395ad1effe45b03e Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 12 Nov 2014 14:24:51 -0800 Subject: [PATCH 038/178] Quickinfo and completion entry should display const enum enumName if enum is constant Handles #1084 --- src/services/services.ts | 5 +++++ .../constEnumQuickInfoAndCompletionList.ts | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 tests/cases/fourslash/constEnumQuickInfoAndCompletionList.ts diff --git a/src/services/services.ts b/src/services/services.ts index 4cf65d820c7..8d48f0bfe1d 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3099,6 +3099,11 @@ module ts { } if (symbolFlags & SymbolFlags.Enum) { addNewLineIfDisplayPartsExist(); + if (forEach(symbol.declarations, declaration => + declaration.kind === SyntaxKind.EnumDeclaration && isConstEnumDeclaration(declaration))) { + displayParts.push(keywordPart(SyntaxKind.ConstKeyword)); + displayParts.push(spacePart()); + } displayParts.push(keywordPart(SyntaxKind.EnumKeyword)); displayParts.push(spacePart()); addFullSymbolName(symbol); diff --git a/tests/cases/fourslash/constEnumQuickInfoAndCompletionList.ts b/tests/cases/fourslash/constEnumQuickInfoAndCompletionList.ts new file mode 100644 index 00000000000..aa90fd2e187 --- /dev/null +++ b/tests/cases/fourslash/constEnumQuickInfoAndCompletionList.ts @@ -0,0 +1,15 @@ +/// + +////const enum /*1*/e { +//// a, +//// b, +//// c +////} +/////*2*/e.a; + +goTo.marker('1'); +verify.quickInfoIs("const enum e"); + +goTo.marker('2'); +verify.completionListContains("e", "const enum e"); +verify.quickInfoIs("const enum e"); \ No newline at end of file From 5e94f4a5c2b71d0286a445935ecb1859afa94787 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 12 Nov 2014 15:40:45 -0800 Subject: [PATCH 039/178] Code review feedback --- src/compiler/binder.ts | 4 ++-- src/compiler/checker.ts | 6 +++--- src/compiler/emitter.ts | 18 +++++++++--------- src/compiler/parser.ts | 20 ++++++++++++++------ src/services/navigationBar.ts | 2 +- src/services/services.ts | 15 +++++++-------- 6 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index fe3009da3aa..cdc868f408c 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -18,7 +18,7 @@ module ts { return ModuleInstanceState.NonInstantiated; } // 2. const enum declarations don't make module instantiated - else if (node.kind === SyntaxKind.EnumDeclaration && isConstEnumDeclaration(node)) { + else if (isConstEnumDeclaration(node)) { return ModuleInstanceState.ConstEnumOnly; } // 3. non - exported import declarations @@ -402,7 +402,7 @@ module ts { bindDeclaration(node, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes, /*isBlockScopeContainer*/ false); break; case SyntaxKind.EnumDeclaration: - if (isConstEnumDeclaration(node)) { + if (isConst(node)) { bindDeclaration(node, SymbolFlags.ConstEnum, SymbolFlags.ConstEnumExcludes, /*isBlockScopeContainer*/ false); } else { diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5a990d4e9db..ec075dbce44 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7940,7 +7940,7 @@ module ts { var enumType = getDeclaredTypeOfSymbol(enumSymbol); var autoValue = 0; var ambient = isInAmbientContext(node); - var enumIsConst = isConstEnumDeclaration(node); + var enumIsConst = isConst(node); forEach(node.members, member => { // TODO(jfreeman): Check that it is not a computed name @@ -8111,10 +8111,10 @@ module ts { var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); if (node === firstDeclaration) { if (enumSymbol.declarations.length > 1) { - var enumIsConst = isConstEnumDeclaration(node); + var enumIsConst = isConst(node); // check that const is placed\omitted on all enum declarations forEach(enumSymbol.declarations, decl => { - if (isConstEnumDeclaration(decl) !== enumIsConst) { + if (isConstEnumDeclaration(decl) !== enumIsConst) { error(decl.name, Diagnostics.Enum_declarations_must_all_be_const_or_non_const); } }); diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f61d4403eec..937b64979ef 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1271,10 +1271,10 @@ module ts { write(" "); endPos = emitToken(SyntaxKind.OpenParenToken, endPos); if (node.declarations) { - if (node.declarations[0] && node.declarations[0].flags & NodeFlags.Let) { + if (node.declarations[0] && isLet(node.declarations[0])) { emitToken(SyntaxKind.LetKeyword, endPos); } - else if (node.declarations[0] && node.declarations[0].flags & NodeFlags.Const) { + else if (node.declarations[0] && isConst(node.declarations[0])) { emitToken(SyntaxKind.ConstKeyword, endPos); } else { @@ -1299,7 +1299,7 @@ module ts { write(" "); endPos = emitToken(SyntaxKind.OpenParenToken, endPos); if (node.declaration) { - if (node.declaration.flags & NodeFlags.Let) { + if (isLet(node.declaration)) { emitToken(SyntaxKind.LetKeyword, endPos); } else { @@ -1445,10 +1445,10 @@ module ts { function emitVariableStatement(node: VariableStatement) { emitLeadingComments(node); if (!(node.flags & NodeFlags.Export)) { - if (node.flags & NodeFlags.Let) { + if (isLet(node)) { write("let "); } - else if (node.flags & NodeFlags.Const) { + else if (isConst(node)) { write("const "); } else { @@ -1901,7 +1901,7 @@ module ts { function emitEnumDeclaration(node: EnumDeclaration) { // const enums are completely erased during compilation. - var isConstEnum = isConstEnumDeclaration(node); + var isConstEnum = isConst(node); if (isConstEnum && !compilerOptions.preserveConstEnums) { return; } @@ -2754,7 +2754,7 @@ module ts { if (resolver.isDeclarationVisible(node)) { emitJsDocComments(node); emitDeclarationFlags(node); - if (isConstEnumDeclaration(node)) { + if (isConst(node)) { write("const ") } write("enum "); @@ -3041,10 +3041,10 @@ module ts { if (hasDeclarationWithEmit) { emitJsDocComments(node); emitDeclarationFlags(node); - if (node.flags & NodeFlags.Let) { + if (isLet(node)) { write("let "); } - else if (node.flags & NodeFlags.Const) { + else if (isConst(node)) { write("const "); } else { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4849cb8c89e..01a5f05229b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -116,8 +116,16 @@ module ts { return (file.flags & NodeFlags.DeclarationFile) !== 0; } - export function isConstEnumDeclaration(node: EnumDeclaration): boolean { - return (node.flags & NodeFlags.Const) !== 0; + export function isConstEnumDeclaration(node: Declaration): boolean { + return node.kind === SyntaxKind.EnumDeclaration && !!(node.flags & NodeFlags.Const); + } + + export function isConst(node: Declaration): boolean { + return !!(node.flags & NodeFlags.Const); + } + + export function isLet(node: Declaration): boolean { + return !!(node.flags & NodeFlags.Let); } export function isPrologueDirective(node: Node): boolean { @@ -3480,18 +3488,18 @@ module ts { grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); } if (languageVersion < ScriptTarget.ES6) { - if (node.flags & NodeFlags.Let) { + if (isLet(node)) { grammarErrorOnNode(node, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); } - else if (node.flags & NodeFlags.Const) { + else if (isConst(node)) { grammarErrorOnNode(node, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); } } else if (!allowLetAndConstDeclarations) { - if (node.flags & NodeFlags.Let) { + if (isLet(node)) { grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block); } - else if (node.flags & NodeFlags.Const) { + else if (isConst(node)) { grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block); } } diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index b8106fc18d4..fd3ea13ce6b 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -235,7 +235,7 @@ module ts.NavigationBar { return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.functionElement); case SyntaxKind.VariableDeclaration: - if (node.flags & NodeFlags.Const) { + if (isConst(node)) { return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.constantElement); } else if (node.flags & NodeFlags.Let) { diff --git a/src/services/services.ts b/src/services/services.ts index 8d48f0bfe1d..bf9bdb0ee77 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2859,7 +2859,7 @@ module ts { if (isFirstDeclarationOfSymbolParameter(symbol)) { return ScriptElementKind.parameterElement; } - else if (symbol.valueDeclaration && symbol.valueDeclaration.flags & NodeFlags.Const) { + else if (symbol.valueDeclaration && isConst(symbol.valueDeclaration)) { return ScriptElementKind.constantElement; } else if (forEach(symbol.declarations, declaration => declaration.flags & NodeFlags.Let)) { @@ -2920,11 +2920,11 @@ module ts { case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement; case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement; case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement; - case SyntaxKind.VariableDeclaration: return node.flags & NodeFlags.Const ? - ScriptElementKind.constantElement : - node.flags & NodeFlags.Let ? - ScriptElementKind.letElement : - ScriptElementKind.variableElement; + case SyntaxKind.VariableDeclaration: return isConst(node) + ? ScriptElementKind.constantElement + : node.flags & NodeFlags.Let + ? ScriptElementKind.letElement + : ScriptElementKind.variableElement; case SyntaxKind.FunctionDeclaration: return ScriptElementKind.functionElement; case SyntaxKind.GetAccessor: return ScriptElementKind.memberGetAccessorElement; case SyntaxKind.SetAccessor: return ScriptElementKind.memberSetAccessorElement; @@ -3099,8 +3099,7 @@ module ts { } if (symbolFlags & SymbolFlags.Enum) { addNewLineIfDisplayPartsExist(); - if (forEach(symbol.declarations, declaration => - declaration.kind === SyntaxKind.EnumDeclaration && isConstEnumDeclaration(declaration))) { + if (forEach(symbol.declarations, declaration => isConstEnumDeclaration(declaration))) { displayParts.push(keywordPart(SyntaxKind.ConstKeyword)); displayParts.push(spacePart()); } From 15560a80eaa968124dcd8dd229c44d36b69f00e4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 12 Nov 2014 16:30:25 -0800 Subject: [PATCH 040/178] Stylistic changes/comment fixups. --- src/compiler/parser.ts | 2 +- src/services/signatureHelp.ts | 41 ++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 005a5218d56..05ee465e94d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -471,7 +471,7 @@ module ts { } } - export function getInvoker(node: CallLikeExpression): Expression { + export function getCallLikeInvoker(node: CallLikeExpression): Expression { if (node.kind === SyntaxKind.TaggedTemplateExpression) { return (node).tag; } diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index a8d2b40af5d..8a6e8475f5d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -174,7 +174,7 @@ module ts.SignatureHelp { kind: ArgumentListKind; invocation: CallLikeExpression; arguments: Node | NodeArray; - argumentIndex: number; + argumentIndex?: number; argumentCount: number; } @@ -194,7 +194,7 @@ module ts.SignatureHelp { return undefined; } - var call: CallLikeExpression = argumentInfo.invocation; + var call = argumentInfo.invocation; var candidates = []; var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates); cancellationToken.throwIfCancellationRequested(); @@ -254,16 +254,30 @@ module ts.SignatureHelp { if (listItemInfo) { var list = listItemInfo.list; var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; + + // 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 = (listItemInfo.listItemIndex + 1) >> 1; + return { kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, invocation: callExpression, arguments: list, - argumentIndex: (listItemInfo.listItemIndex + 1) >> 1, + argumentIndex: argumentIndex, argumentCount: getCommaBasedArgCount(list) }; } } else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { + // TODO (drosen): Can't get sig help to trigger within the template head itself; only when directly to the right. + // Also, need to ensure that this works on NoSubstitutionTemplateExpressions when unterminated. Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); var templateExpression = node.parent; @@ -303,9 +317,9 @@ module ts.SignatureHelp { }; } - // The number of arguments is the number of commas plus one, unless the list - // is completely empty, in which case there are 0 arguments. function getCommaBasedArgCount(argumentsList: Node) { + // The number of arguments is the number of commas plus one, unless the list + // is completely empty, in which case there are 0 arguments. return argumentsList.getChildCount() === 0 ? 0 : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); @@ -373,16 +387,16 @@ module ts.SignatureHelp { var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var invocation = argumentListInfo.invocation; - var invokerNode = getInvoker(invocation) + var invokerNode = getCallLikeInvoker(invocation) var invokerSymbol = typeInfoResolver.getSymbolInfo(invokerNode); - var callTargetDisplayParts = invokerSymbol && symbolToDisplayParts(typeInfoResolver, invokerSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); + var invokerDisplayParts = invokerSymbol && symbolToDisplayParts(typeInfoResolver, invokerSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); var items: SignatureHelpItem[] = map(candidates, candidateSignature => { var signatureHelpParameters: SignatureHelpParameter[]; var prefixParts: SymbolDisplayPart[] = []; var suffixParts: SymbolDisplayPart[] = []; - if (callTargetDisplayParts) { - prefixParts.push.apply(prefixParts, callTargetDisplayParts); + if (invokerDisplayParts) { + prefixParts.push.apply(prefixParts, invokerDisplayParts); } if (isTypeParameterList) { @@ -430,15 +444,6 @@ module ts.SignatureHelp { var applicableSpanEnd = skipTrivia(sourceFile.text, argumentsList.end, /*stopAfterLineBreak*/ false); var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - 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 = argumentListInfo.argumentIndex; // argumentCount is the *apparent* number of arguments. From 34721193876283572981e14327e1a5d305a04605 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 12 Nov 2014 17:43:02 -0800 Subject: [PATCH 041/178] Remove the Obsolete api getSignatureAtPosition --- src/services/services.ts | 101 --------------------------------------- src/services/shims.ts | 11 ----- 2 files changed, 112 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 800d63738f0..ea107ff24d0 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -833,9 +833,6 @@ module ts { getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems; - // Obsolete. Use getSignatureHelpItems instead. - getSignatureAtPosition(fileName: string, position: number): SignatureInfo; - getRenameInfo(fileName: string, position: number): RenameInfo; findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[]; @@ -863,41 +860,6 @@ module ts { dispose(): void; } - export interface SignatureInfo { - actual: ActualSignatureInfo; - formal: FormalSignatureItemInfo[]; // Formal signatures - activeFormal: number; // Index of the "best match" formal signature - } - - export interface FormalSignatureItemInfo { - signatureInfo: string; - typeParameters: FormalTypeParameterInfo[]; - parameters: FormalParameterInfo[]; // Array of parameters - docComment: string; // Help for the signature - } - - export interface FormalTypeParameterInfo { - name: string; // Type parameter name - docComment: string; // Comments that contain help for the parameter - minChar: number; // minChar for parameter info in the formal signature info string - limChar: number; // lim char for parameter info in the formal signature info string - } - - export interface FormalParameterInfo { - name: string; // Parameter name - isVariable: boolean; // true if parameter is var args - docComment: string; // Comments that contain help for the parameter - minChar: number; // minChar for parameter info in the formal signature info string - limChar: number; // lim char for parameter info in the formal signature info string - } - - export interface ActualSignatureInfo { - parameterMinChar: number; - parameterLimChar: number; - currentParameterIsTypeParameter: boolean; // current parameter is a type argument or a normal argument - currentParameter: number; // Index of active parameter in "parameters" or "typeParamters" array - } - export interface ClassifiedSpan { textSpan: TypeScript.TextSpan; classificationType: string; // ClassificationTypeNames @@ -4780,68 +4742,6 @@ module ts { return SignatureHelp.getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken); } - function getSignatureAtPosition(filename: string, position: number): SignatureInfo { - var signatureHelpItems = getSignatureHelpItems(filename, position); - - if (!signatureHelpItems) { - return undefined; - } - - var currentArgumentState = { argumentIndex: signatureHelpItems.argumentIndex, argumentCount: signatureHelpItems.argumentCount }; - - var formalSignatures: FormalSignatureItemInfo[] = []; - forEach(signatureHelpItems.items, signature => { - var signatureInfoString = displayPartsToString(signature.prefixDisplayParts); - - var parameters: FormalParameterInfo[] = []; - if (signature.parameters) { - for (var i = 0, n = signature.parameters.length; i < n; i++) { - var parameter = signature.parameters[i]; - - // add the parameter to the string - if (i) { - signatureInfoString += displayPartsToString(signature.separatorDisplayParts); - } - - var start = signatureInfoString.length; - signatureInfoString += displayPartsToString(parameter.displayParts); - var end = signatureInfoString.length; - - // add the parameter to the list - parameters.push({ - name: parameter.name, - isVariable: i === n - 1 && signature.isVariadic, - docComment: displayPartsToString(parameter.documentation), - minChar: start, - limChar: end - }); - } - } - - signatureInfoString += displayPartsToString(signature.suffixDisplayParts); - - formalSignatures.push({ - signatureInfo: signatureInfoString, - docComment: displayPartsToString(signature.documentation), - parameters: parameters, - typeParameters: [], - }); - }); - - var actualSignature: ActualSignatureInfo = { - parameterMinChar: signatureHelpItems.applicableSpan.start(), - parameterLimChar: signatureHelpItems.applicableSpan.end(), - currentParameterIsTypeParameter: false, - currentParameter: currentArgumentState.argumentIndex - }; - - return { - actual: actualSignature, - formal: formalSignatures, - activeFormal: 0 - }; - } - /// Syntactic features function getSyntaxTree(filename: string): TypeScript.SyntaxTree { filename = normalizeSlashes(filename); @@ -5497,7 +5397,6 @@ module ts { getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getEmitOutput: getEmitOutput, - getSignatureAtPosition: getSignatureAtPosition, }; } diff --git a/src/services/shims.ts b/src/services/shims.ts index 00acff3798a..67493be5bef 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -100,9 +100,6 @@ module ts { getSignatureHelpItems(fileName: string, position: number): string; - // Obsolete. Use getSignatureHelpItems instead. - getSignatureAtPosition(fileName: string, position: number): string; - /** * Returns a JSON-encoded value of the type: * { canRename: boolean, localizedErrorMessage: string, displayName: string, fullDisplayName: string, kind: string, kindModifiers: string, triggerSpan: { start; length } } @@ -617,14 +614,6 @@ module ts { }); } - public getSignatureAtPosition(fileName: string, position: number): string { - return this.forwardJSONCall( - "getSignatureAtPosition('" + fileName + "', " + position + ")", - () => { - return this.languageService.getSignatureAtPosition(fileName, position); - }); - } - /// GOTO DEFINITION /** From 0877a650c35a740cd17ba732d896037f3d551fa2 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 12 Nov 2014 18:42:31 -0800 Subject: [PATCH 042/178] Code review feedback --- src/services/navigationBar.ts | 4 +-- src/services/services.ts | 10 +++---- .../fourslash/completionEntryForConst.ts | 2 +- .../constQuickInfoAndCompletionList.ts | 26 +++++++++---------- tests/cases/fourslash/navbar_const.ts | 2 +- tests/cases/fourslash/navigateItemsConst.ts | 4 +-- .../fourslash/quickInfoForConstDeclaration.ts | 2 +- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index fd3ea13ce6b..be865a6d232 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -236,9 +236,9 @@ module ts.NavigationBar { case SyntaxKind.VariableDeclaration: if (isConst(node)) { - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.constantElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.constElement); } - else if (node.flags & NodeFlags.Let) { + else if (isLet(node)) { return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.letElement); } else { diff --git a/src/services/services.ts b/src/services/services.ts index bf9bdb0ee77..0a2eb21ced3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1224,7 +1224,7 @@ module ts { static alias = "alias"; - static constantElement = "constant"; + static constElement = "const"; static letElement = "let"; } @@ -2860,9 +2860,9 @@ module ts { return ScriptElementKind.parameterElement; } else if (symbol.valueDeclaration && isConst(symbol.valueDeclaration)) { - return ScriptElementKind.constantElement; + return ScriptElementKind.constElement; } - else if (forEach(symbol.declarations, declaration => declaration.flags & NodeFlags.Let)) { + else if (forEach(symbol.declarations, declaration => isLet(declaration))) { return ScriptElementKind.letElement; } return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement; @@ -2921,7 +2921,7 @@ module ts { case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement; case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement; case SyntaxKind.VariableDeclaration: return isConst(node) - ? ScriptElementKind.constantElement + ? ScriptElementKind.constElement : node.flags & NodeFlags.Let ? ScriptElementKind.letElement : ScriptElementKind.variableElement; @@ -3023,7 +3023,7 @@ module ts { switch (symbolKind) { case ScriptElementKind.memberVariableElement: case ScriptElementKind.variableElement: - case ScriptElementKind.constantElement: + case ScriptElementKind.constElement: case ScriptElementKind.parameterElement: case ScriptElementKind.localVariableElement: // If it is call or construct signature of lambda's write type name diff --git a/tests/cases/fourslash/completionEntryForConst.ts b/tests/cases/fourslash/completionEntryForConst.ts index f6b7cc42d63..dc2b2358b0a 100644 --- a/tests/cases/fourslash/completionEntryForConst.ts +++ b/tests/cases/fourslash/completionEntryForConst.ts @@ -4,4 +4,4 @@ /////**/ goTo.marker(); -verify.completionListContains("c", /*text*/ undefined, /*documentation*/ undefined, "constant"); \ No newline at end of file +verify.completionListContains("c", "(const) c: string", /*documentation*/ undefined, "const"); \ No newline at end of file diff --git a/tests/cases/fourslash/constQuickInfoAndCompletionList.ts b/tests/cases/fourslash/constQuickInfoAndCompletionList.ts index 421a9819d44..59a793df40b 100644 --- a/tests/cases/fourslash/constQuickInfoAndCompletionList.ts +++ b/tests/cases/fourslash/constQuickInfoAndCompletionList.ts @@ -10,28 +10,28 @@ //// /*7*/ ////} goTo.marker('1'); -verify.quickInfoIs("(constant) a: number"); +verify.quickInfoIs("(const) a: number"); goTo.marker('2'); -verify.completionListContains("a", "(constant) a: number"); -verify.quickInfoIs("(constant) a: number"); +verify.completionListContains("a", "(const) a: number"); +verify.quickInfoIs("(const) a: number"); goTo.marker('3'); -verify.completionListContains("a", "(constant) a: number"); +verify.completionListContains("a", "(const) a: number"); goTo.marker('4'); -verify.quickInfoIs("(constant) b: number"); +verify.quickInfoIs("(const) b: number"); goTo.marker('5'); -verify.completionListContains("a", "(constant) a: number"); -verify.completionListContains("b", "(constant) b: number"); -verify.quickInfoIs("(constant) b: number"); +verify.completionListContains("a", "(const) a: number"); +verify.completionListContains("b", "(const) b: number"); +verify.quickInfoIs("(const) b: number"); goTo.marker('6'); -verify.completionListContains("a", "(constant) a: number"); -verify.completionListContains("b", "(constant) b: number"); -verify.quickInfoIs("(constant) a: number"); +verify.completionListContains("a", "(const) a: number"); +verify.completionListContains("b", "(const) b: number"); +verify.quickInfoIs("(const) a: number"); goTo.marker('7'); -verify.completionListContains("a", "(constant) a: number"); -verify.completionListContains("b", "(constant) b: number"); \ No newline at end of file +verify.completionListContains("a", "(const) a: number"); +verify.completionListContains("b", "(const) b: number"); \ No newline at end of file diff --git a/tests/cases/fourslash/navbar_const.ts b/tests/cases/fourslash/navbar_const.ts index ede2a9cd1d8..6c0738747f3 100644 --- a/tests/cases/fourslash/navbar_const.ts +++ b/tests/cases/fourslash/navbar_const.ts @@ -1,6 +1,6 @@ /// -//// {| "itemName": "c", "kind": "constant", "parentName": "" |}const c = 0; +//// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0; test.markers().forEach(marker => { verify.getScriptLexicalStructureListContains( diff --git a/tests/cases/fourslash/navigateItemsConst.ts b/tests/cases/fourslash/navigateItemsConst.ts index 6f0fdf717ff..d5ccb31066d 100644 --- a/tests/cases/fourslash/navigateItemsConst.ts +++ b/tests/cases/fourslash/navigateItemsConst.ts @@ -1,8 +1,8 @@ /// -////{| "itemName": "c", "kind": "constant", "parentName": "" |}const c = 10; +////{| "itemName": "c", "kind": "const", "parentName": "" |}const c = 10; ////function foo() { -//// {| "itemName": "d", "kind": "constant", "parentName": "foo" |}const d = 10; +//// {| "itemName": "d", "kind": "const", "parentName": "foo" |}const d = 10; ////} test.markers().forEach(marker => { diff --git a/tests/cases/fourslash/quickInfoForConstDeclaration.ts b/tests/cases/fourslash/quickInfoForConstDeclaration.ts index dc234b04050..2b1f108c579 100644 --- a/tests/cases/fourslash/quickInfoForConstDeclaration.ts +++ b/tests/cases/fourslash/quickInfoForConstDeclaration.ts @@ -3,4 +3,4 @@ ////const /**/c = 0 ; goTo.marker(); -verify.quickInfoIs("(constant) c: number"); \ No newline at end of file +verify.quickInfoIs("(const) c: number"); \ No newline at end of file From 64960cf873353b94e51107a3457c3dd8279dee73 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 14 Nov 2014 17:13:00 -0800 Subject: [PATCH 043/178] Got sig help working in the template head. --- src/services/signatureHelp.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 8a6e8475f5d..a131bff919f 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -173,7 +173,7 @@ module ts.SignatureHelp { export interface ArgumentListInfo { kind: ArgumentListKind; invocation: CallLikeExpression; - arguments: Node | NodeArray; + argumentRange: TextRange; argumentIndex?: number; argumentCount: number; } @@ -238,7 +238,7 @@ module ts.SignatureHelp { return { kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, invocation: callExpression, - arguments: list, + argumentRange: list, argumentIndex: 0, argumentCount: getCommaBasedArgCount(list) }; @@ -269,22 +269,20 @@ module ts.SignatureHelp { return { kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, invocation: callExpression, - arguments: list, + argumentRange: list, argumentIndex: argumentIndex, argumentCount: getCommaBasedArgCount(list) }; } } else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { - // TODO (drosen): Can't get sig help to trigger within the template head itself; only when directly to the right. - // Also, need to ensure that this works on NoSubstitutionTemplateExpressions when unterminated. Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); var templateExpression = node.parent; var tagExpression = templateExpression.parent; // argumentIndex is 1 to adjust for the TemplateStringsArray - return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, /*argumentIndex*/ 1); + return getArgumentListInfoForTemplate(tagExpression, /*argumentIndex*/ 1); } else if (node.parent.kind === SyntaxKind.TemplateSpan && node.parent.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateSpan = node.parent; @@ -297,13 +295,13 @@ module ts.SignatureHelp { var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); var adjustedIndex = isTemplateLiteralKind(node.kind) ? spanIndex + 2 : spanIndex + 1 - return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, adjustedIndex); + return getArgumentListInfoForTemplate(tagExpression, adjustedIndex); } return undefined; } - function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, spans: NodeArray, argumentIndex: number): ArgumentListInfo { + function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, argumentIndex: number): ArgumentListInfo { var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral ? 1 : (tagExpression.template).templateSpans.length + 1; @@ -311,7 +309,7 @@ module ts.SignatureHelp { return { kind: ArgumentListKind.TaggedTemplateArguments, invocation: tagExpression, - arguments: spans, + argumentRange: tagExpression.template, argumentIndex: argumentIndex, argumentCount: argumentCount }; @@ -383,7 +381,7 @@ module ts.SignatureHelp { } function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListInfo: ArgumentListInfo): SignatureHelpItems { - var argumentsList = argumentListInfo.arguments; + var argumentsList = argumentListInfo.argumentRange; var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var invocation = argumentListInfo.invocation; From 6f8f79efe2aa706817c865ed838ecc7d0c7a6b2b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 14 Nov 2014 17:30:19 -0800 Subject: [PATCH 044/178] Got sig help working in tagged no-sub templates. --- src/services/signatureHelp.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index a131bff919f..fc62ff34d0a 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -275,6 +275,9 @@ module ts.SignatureHelp { }; } } + else if (node.kind === SyntaxKind.NoSubstitutionTemplateLiteral && node.parent.kind === SyntaxKind.TaggedTemplateExpression) { + return getArgumentListInfoForTemplate(node.parent, /*argumentIndex*/ 0); + } else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); From 34087bd9ec9a99a0cda613768356256f2a17ffa3 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 17 Nov 2014 15:13:58 -0800 Subject: [PATCH 045/178] Refactored code, adjusted for residing out of bounds of the template. --- src/compiler/parser.ts | 2 +- src/services/signatureHelp.ts | 142 +++++++++++++++++++++++----------- src/services/utilities.ts | 5 ++ 3 files changed, 103 insertions(+), 46 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a3626caa0a3..804f8c9780c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -811,7 +811,7 @@ module ts { } export function isUnterminatedTemplateEnd(node: LiteralExpression) { - Debug.assert(node.kind === SyntaxKind.NoSubstitutionTemplateLiteral || node.kind === SyntaxKind.TemplateTail); + Debug.assert(isTemplateLiteralKind(node.kind)); var sourceText = getSourceFileOfNode(node).text; // If we're not at the EOF, we know we must be terminated. diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index fc62ff34d0a..bba70da4627 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -173,7 +173,7 @@ module ts.SignatureHelp { export interface ArgumentListInfo { kind: ArgumentListKind; invocation: CallLikeExpression; - argumentRange: TextRange; + argumentsSpan: TypeScript.TextSpan; argumentIndex?: number; argumentCount: number; } @@ -186,7 +186,7 @@ module ts.SignatureHelp { return undefined; } - var argumentInfo = getContainingArgumentInfo(startingToken); + var argumentInfo = getContainingArgumentInfo(startingToken, position); cancellationToken.throwIfCancellationRequested(); // Semantic filtering of signature help @@ -209,7 +209,7 @@ module ts.SignatureHelp { * If node is an argument, returns its index in the argument list. * If not, returns -1. */ - function getImmediatelyContainingArgumentInfo(node: Node): ArgumentListInfo { + function getImmediatelyContainingArgumentInfo(node: Node, position: number): ArgumentListInfo { var callLikeExpr: CallLikeExpression; if (node.parent.kind === SyntaxKind.CallExpression || node.parent.kind === SyntaxKind.NewExpression) { @@ -238,7 +238,7 @@ module ts.SignatureHelp { return { kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, invocation: callExpression, - argumentRange: list, + argumentsSpan: getApplicableSpanForArguments(list), argumentIndex: 0, argumentCount: getCommaBasedArgCount(list) }; @@ -269,23 +269,25 @@ module ts.SignatureHelp { return { kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, invocation: callExpression, - argumentRange: list, + argumentsSpan: getApplicableSpanForArguments(list), argumentIndex: argumentIndex, argumentCount: getCommaBasedArgCount(list) }; } } else if (node.kind === SyntaxKind.NoSubstitutionTemplateLiteral && node.parent.kind === SyntaxKind.TaggedTemplateExpression) { - return getArgumentListInfoForTemplate(node.parent, /*argumentIndex*/ 0); + // Check if we're actually inside the template; + // otherwise we'll fall out and return undefined. + if (isInsideTemplateLiteral(node, position)) { + return getArgumentListInfoForTemplate(node.parent, /*argumentIndex*/ 0); + } } - else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { - Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); - + else if (node.kind === SyntaxKind.TemplateHead && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; + var argumentIndex = getArgumentIndexForTemplatePiece(/*spanIndex*/ 0, node, position); - // argumentIndex is 1 to adjust for the TemplateStringsArray - return getArgumentListInfoForTemplate(tagExpression, /*argumentIndex*/ 1); + return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } else if (node.parent.kind === SyntaxKind.TemplateSpan && node.parent.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateSpan = node.parent; @@ -293,31 +295,25 @@ module ts.SignatureHelp { var tagExpression = templateExpression.parent; Debug.assert(templateExpression.kind === SyntaxKind.TemplateExpression); - // We need to account for the TemplateStringsArray, so we add at least 1. - // Then, if we're on the template literal, we want to jump to the next argument, - var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); - var adjustedIndex = isTemplateLiteralKind(node.kind) ? spanIndex + 2 : spanIndex + 1 + // If we're just after a template tail, don't show signature help. + if (node.kind === SyntaxKind.TemplateTail && position >= node.getEnd() && !isUnterminatedTemplateEnd(node)) { + return undefined; + } - return getArgumentListInfoForTemplate(tagExpression, adjustedIndex); + // The cursor can either be in or after the template literal. + // If inside, we want to highlight the first argument. + // If after, we'll want to highlight the next parameter. + // We actually shouldn't be able to show up before because you should be at the left-most token. + + var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); + var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node, position); + + return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } return undefined; } - function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, argumentIndex: number): ArgumentListInfo { - var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral - ? 1 - : (tagExpression.template).templateSpans.length + 1; - - return { - kind: ArgumentListKind.TaggedTemplateArguments, - invocation: tagExpression, - argumentRange: tagExpression.template, - argumentIndex: argumentIndex, - argumentCount: argumentCount - }; - } - function getCommaBasedArgCount(argumentsList: Node) { // The number of arguments is the number of commas plus one, unless the list // is completely empty, in which case there are 0 arguments. @@ -326,7 +322,75 @@ module ts.SignatureHelp { : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); } - function getContainingArgumentInfo(node: Node): ArgumentListInfo { + // spanIndex is either the index for a given template span, or 0 for a template head. + // This does not give appropriate results for a NoSubstitutionTemplateLiteral + function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node, position: number): number { + // TemplateSpans are expression-template pairs, and ordered as such. + // Because of the TemplateStringsArray arg, we have to offset ourselves by 1 for substitution expressions. + // There are three cases we can encounter: + // 1. We are precisely in the template literal (argIndex = 0) + // 2. We are in or to the right of the substitution expression (argIndex = spanIndex + 1) + // 3. We are directly to the right of the template literal, but not + // enough to put us in the substitution expression; we should consider ourselves part of + // the *next* span's expression (argIndex = (spanIndex + 1) + 1). + // + // Example: f `# abcd $#{# 1 + 1# }# efghi ${ #"#hello"# } # ` + // ^ ^ ^ ^ ^ ^ ^ ^ ^ + // Cases: 1 1 3 2 1 3 2 2 1 + Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); + if (isTemplateLiteralKind(node.kind)) { + if (isInsideTemplateLiteral(node, position)) { + return 0; + } + return spanIndex + 2; + } + return spanIndex + 1; + } + + function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, argumentIndex: number): ArgumentListInfo { + var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral + ? 1 + : (tagExpression.template).templateSpans.length + 1; + + return { + kind: ArgumentListKind.TaggedTemplateArguments, + invocation: tagExpression, + argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression.template), + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + } + + function getApplicableSpanForArguments(argumentsList: Node): TypeScript.TextSpan { + // We use full start and skip trivia on the end because we want to include trivia on + // both sides. For example, + // + // foo( /*comment */ a, b, c /*comment*/ ) + // | | + // + // The applicable span is from the first bar to the second bar (inclusive, + // but not including parentheses) + var applicableSpanStart = argumentsList.pos; + var applicableSpanEnd = skipTrivia(sourceFile.text, argumentsList.end, /*stopAfterLineBreak*/ false); + return new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); + } + + function getApplicableSpanForTaggedTemplate(template: TemplateExpression | LiteralExpression): TypeScript.TextSpan { + var applicableSpanStart = template.getStart(); + var applicableSpanEnd = template.getEnd(); + + // Adjust the span end in case the template is unclosed - + if (template.kind === SyntaxKind.TemplateExpression) { + var lastSpan = lastOrUndefined((template).templateSpans); + if (lastSpan.literal.kind === SyntaxKind.Missing) { + applicableSpanEnd = skipTrivia(sourceFile.text, template.end, /*stopAfterLineBreak*/ false); + } + } + + return new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); + } + + function getContainingArgumentInfo(node: Node, position: number): ArgumentListInfo { for (var n = node; n.kind !== SyntaxKind.SourceFile; n = n.parent) { if (n.kind === SyntaxKind.FunctionBlock) { return undefined; @@ -338,7 +402,7 @@ module ts.SignatureHelp { Debug.fail("Node of kind " + n.kind + " is not a subspan of its parent of kind " + n.parent.kind); } - var argumentInfo = getImmediatelyContainingArgumentInfo(n); + var argumentInfo = getImmediatelyContainingArgumentInfo(n, position); if (argumentInfo) { return argumentInfo; } @@ -384,7 +448,7 @@ module ts.SignatureHelp { } function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListInfo: ArgumentListInfo): SignatureHelpItems { - var argumentsList = argumentListInfo.argumentRange; + var applicableSpan = argumentListInfo.argumentsSpan; var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var invocation = argumentListInfo.invocation; @@ -433,18 +497,6 @@ module ts.SignatureHelp { }; }); - // We use full start and skip trivia on the end because we want to include trivia on - // both sides. For example, - // - // foo( /*comment */ a, b, c /*comment*/ ) - // | | - // - // The applicable span is from the first bar to the second bar (inclusive, - // but not including parentheses) - var applicableSpanStart = argumentsList.pos; - var applicableSpanEnd = skipTrivia(sourceFile.text, argumentsList.end, /*stopAfterLineBreak*/ false); - var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); - var argumentIndex = argumentListInfo.argumentIndex; // argumentCount is the *apparent* number of arguments. diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 8620f8d1920..ab651491518 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -320,4 +320,9 @@ module ts { export function isPunctuation(kind: SyntaxKind): boolean { return SyntaxKind.FirstPunctuation <= kind && kind <= SyntaxKind.LastPunctuation; } + + export function isInsideTemplateLiteral(node: LiteralExpression, position: number) { + return (node.getStart() < position && position < node.getEnd()) + || (isUnterminatedTemplateEnd(node) && position >= node.getEnd()); + } } \ No newline at end of file From 0416c6fdb8923c5d4aef88bbee72bf523fd3f277 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 17 Nov 2014 15:31:58 -0800 Subject: [PATCH 046/178] Fixed isUnclosedTemplateLiteral to account for new possible inputs. --- src/compiler/parser.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 804f8c9780c..7db9b9101da 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -819,6 +819,11 @@ module ts { return false; } + // We can only be unclosed if we have a tail or a no-sub template. + if (node.kind !== SyntaxKind.TemplateTail && node.kind !== SyntaxKind.NoSubstitutionTemplateLiteral) { + return false; + } + // If we didn't end in a backtick, we must still be in the middle of a template. // If we did, make sure that it's not the *initial* backtick. return sourceText.charCodeAt(node.end - 1) !== CharacterCodes.backtick || node.text.length === 0; From 69f7d39d4373afdb17d7d7f637f069ab70433286 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 18 Nov 2014 13:40:42 -0800 Subject: [PATCH 047/178] Fixed template head offsetting. --- src/services/signatureHelp.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 223b523c42f..10c036dc38d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -164,13 +164,17 @@ module ts.SignatureHelp { //} var emptyArray: any[] = []; - export const enum ArgumentListKind { + const enum Constants { + HeadSpanIndex = -1 + } + + const enum ArgumentListKind { TypeArguments, CallArguments, TaggedTemplateArguments } - export interface ArgumentListInfo { + interface ArgumentListInfo { kind: ArgumentListKind; invocation: CallLikeExpression; argumentsSpan: TextSpan; @@ -285,7 +289,7 @@ module ts.SignatureHelp { else if (node.kind === SyntaxKind.TemplateHead && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - var argumentIndex = getArgumentIndexForTemplatePiece(/*spanIndex*/ 0, node, position); + var argumentIndex = getArgumentIndexForTemplatePiece(Constants.HeadSpanIndex, node, position); return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } @@ -322,7 +326,7 @@ module ts.SignatureHelp { : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); } - // spanIndex is either the index for a given template span, or 0 for a template head. + // spanIndex is either the index for a given template span, or Constants.HeadSpanIndex for a template head. // This does not give appropriate results for a NoSubstitutionTemplateLiteral function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node, position: number): number { // TemplateSpans are expression-template pairs, and ordered as such. @@ -336,7 +340,7 @@ module ts.SignatureHelp { // // Example: f `# abcd $#{# 1 + 1# }# efghi ${ #"#hello"# } # ` // ^ ^ ^ ^ ^ ^ ^ ^ ^ - // Cases: 1 1 3 2 1 3 2 2 1 + // Case: 1 1 3 2 1 3 2 2 1 Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); if (isTemplateLiteralKind(node.kind)) { if (isInsideTemplateLiteral(node, position)) { From 4e18efd25cb1460c667a1282c3f45964410d456a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 18 Nov 2014 13:48:24 -0800 Subject: [PATCH 048/178] Tests for signature help on tagged templates with no overloads. --- .../fourslash/signatureHelpTaggedTemplates1.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates2.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates3.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates4.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates5.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates6.ts | 15 +++++++++++++++ .../fourslash/signatureHelpTaggedTemplates7.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete1.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete2.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete3.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete4.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete5.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesIncomplete6.ts | 15 +++++++++++++++ .../signatureHelpTaggedTemplatesNegatives1.ts | 11 +++++++++++ .../signatureHelpTaggedTemplatesNested1.ts | 13 +++++++++++++ .../signatureHelpTaggedTemplatesNested2.ts | 14 ++++++++++++++ 16 files changed, 233 insertions(+) create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates1.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates2.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates3.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates4.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates5.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates6.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplates7.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts new file mode 100644 index 00000000000..457551f160a --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `/*1*/ qwe/*2*/rty /*3*/$/*4*/{ 123 }/*5*/ as/*6*/df /*7*/$/*8*/{ 41234 }/*9*/ zxc/*10*/vb /*11*/$/*12*/{ g ` ` }/*13*/ /*14*/ /*15*/` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts new file mode 100644 index 00000000000..fa29c21ff21 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `/*1*/ qwe/*2*/rty /*3*/$/*4*/{ 123 }/*5*/ as/*6*/df /*7*/$/*8*/{ 41234 }/*9*/ zxc/*10*/vb /*11*/$/*12*/{ g ` ` }/*13*/ /*14*/ /*15*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts new file mode 100644 index 00000000000..5670cadfd4e --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` qwerty ${/*1*/ /*2*/123/*3*/ /*4*/} asdf ${ 41234 } zxcvb ${ g ` ` } ` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("x"); + verify.currentParameterSpanIs("x: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts new file mode 100644 index 00000000000..bbbd869de09 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` qwerty ${ 123 } asdf ${/*1*/ /*2*/ /*3*/41/*4*/234/*5*/ /*6*/} zxcvb ${ g ` ` } ` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("y"); + verify.currentParameterSpanIs("y: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts new file mode 100644 index 00000000000..68a95121240 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${/*1*/ /*2*/g/*3*/ /*4*/` `/*5*/ /*6*/} ` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("z"); + verify.currentParameterSpanIs("z: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts new file mode 100644 index 00000000000..c1080b3f7e5 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${ g `/*1*/ /*2*/ /*3*/` } ` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts new file mode 100644 index 00000000000..eb25ac6f647 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `/*1*/ /*2*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts new file mode 100644 index 00000000000..65a250fce31 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `/*1*/ /*2*/${ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts new file mode 100644 index 00000000000..c2baa7b187d --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` ${/*1*/ /*2*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("x"); + verify.currentParameterSpanIs("x: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts new file mode 100644 index 00000000000..ccaebc1f1b6 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` ${ }/*1*/ /*2*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts new file mode 100644 index 00000000000..e220ec60679 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` ${ } ${/*1*/ /*2*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("y"); + verify.currentParameterSpanIs("y: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts new file mode 100644 index 00000000000..1655841575d --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` ${ } ${ }/*1*/ /*2*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts new file mode 100644 index 00000000000..67d81d6558e --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts @@ -0,0 +1,15 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f ` ${ 123 } ${/*1*/ } ` + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); + verify.currentParameterHelpArgumentNameIs("y"); + verify.currentParameterSpanIs("y: any"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts new file mode 100644 index 00000000000..c61f1a871e4 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts @@ -0,0 +1,11 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// /*1*/f/*2*/ /*3*/` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${ g ` ` } `/*4*/ + +test.markers().forEach(m => { + goTo.position(m.position); + verify.not.signatureHelpPresent(); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts new file mode 100644 index 00000000000..934bea21ed5 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts @@ -0,0 +1,13 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `a ${ g `/*1*/alpha/*2*/ ${/*3*/ 12/*4*/3 /*5*/} beta /*6*/${ /*7*/456 /*8*/} gamma/*9*/` } b ${ g `/*10*/txt/*11*/` } c ${ g `/*12*/aleph /*13*/$/*14*/{ 12/*15*/3 } beit/*16*/` } d`; + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts new file mode 100644 index 00000000000..9ff5103f30a --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts @@ -0,0 +1,14 @@ +/// + +//// function f(templateStrings, x, y, z) { return 10; } +//// function g(templateStrings, x, y, z) { return ""; } +//// +//// f `/*1*/a $/*2*/{ /*3*/g /*4*/`alpha ${ 123 } beta ${ 456 } gamma`/*5*/ }/*6*/ b $/*7*/{ /*8*/g /*9*/`txt`/*10*/ } /*11*/c ${ /*12*/g /*13*/`aleph ${ 123 } beit`/*14*/ } d/*15*/`; +debugger; + +test.markers().forEach(m => { + goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); +}); \ No newline at end of file From 00a49536fe62fe4eba60a7ac03e0048f7579023a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 15:51:55 -0800 Subject: [PATCH 049/178] Initial refactoring to support doing grammar checks as a separate pass of the tree. Right now, this means hiding 'syntacticDiagnostics' behind a getter function that only computes all the syntactic diagnostics (parser+grammar checks) lazily. This will help incremental parsing out as we can reuse nodes that have grammar errors in them, and we dont' have to even do grammar checks if this is not the full-type-check type-checker. --- src/compiler/binder.ts | 6 +- src/compiler/checker.ts | 2 +- src/compiler/parser.ts | 129 +++++++++++++++++++++++-------------- src/compiler/types.ts | 6 +- src/services/formatting.ts | 2 +- src/services/services.ts | 8 ++- 6 files changed, 96 insertions(+), 57 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 3622f4cda2f..1a0b8c21835 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -125,9 +125,9 @@ module ts { : Diagnostics.Duplicate_identifier_0; forEach(symbol.declarations, declaration => { - file.semanticErrors.push(createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.semanticDiagnostics.push(createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticErrors.push(createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.semanticDiagnostics.push(createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } @@ -148,7 +148,7 @@ module ts { if (node.name) { node.name.parent = node; } - file.semanticErrors.push(createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], + file.semanticDiagnostics.push(createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); } symbol.exports[prototypeSymbol.name] = prototypeSymbol; diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e642fcce944..a3b4bbf3f73 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9143,7 +9143,7 @@ module ts { // Bind all source files and propagate errors forEach(program.getSourceFiles(), file => { bindSourceFile(file); - forEach(file.semanticErrors, addDiagnostic); + forEach(file.semanticDiagnostics, addDiagnostic); }); // Initialize global symbol table forEach(program.getSourceFiles(), file => { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f4fedfd949a..2f51cd294e7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -831,8 +831,18 @@ module ts { return false; } + interface SourceFileInternal extends SourceFile { + // Diagnostics produced only by the parser. Does not include any diagnostics produced by + // doing grammar checks. + _parserDiagnostics: Diagnostic[]; + + // All diagnostics for the source file. Should not be accessed directly. Lazily created + // when getSyntacticDiagnostics is called. + _syntacticDiagnostics: Diagnostic[]; + } + export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile { - var file: SourceFile; + var file: SourceFileInternal; var scanner: Scanner; var token: SyntaxKind; var parsingContext: ParsingContext; @@ -986,7 +996,7 @@ module ts { var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; var length = span.end - start; - file.syntacticErrors.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } function reportInvalidUseInStrictMode(node: Identifier): void { @@ -997,17 +1007,17 @@ module ts { function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - file.syntacticErrors.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } function errorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - var lastErrorPos = file.syntacticErrors.length - ? file.syntacticErrors[file.syntacticErrors.length - 1].start + var lastErrorPos = file._parserDiagnostics.length + ? file._parserDiagnostics[file._parserDiagnostics.length - 1].start : -1; if (start !== lastErrorPos) { var diagnostic = createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); diagnostic.isParseError = true; - file.syntacticErrors.push(diagnostic); + file._parserDiagnostics.push(diagnostic); } if (lookAheadMode === LookAheadMode.NoErrorYet) { @@ -1056,7 +1066,7 @@ module ts { // Keep track of the state we'll need to rollback to if lookahead fails (or if the // caller asked us to always reset our state). var saveToken = token; - var saveSyntacticErrorsLength = file.syntacticErrors.length; + var saveSyntacticErrorsLength = file._parserDiagnostics.length; // Keep track of the current look ahead mode (this matters if we have nested // speculative parsing). @@ -1078,7 +1088,7 @@ module ts { lookAheadMode = saveLookAheadMode; if (!result || alwaysResetState) { token = saveToken; - file.syntacticErrors.length = saveSyntacticErrorsLength; + file._parserDiagnostics.length = saveSyntacticErrorsLength; } return result; @@ -1384,7 +1394,7 @@ module ts { result.pos = getNodePos(); // Keep track of how many errors we had before the list started. If we don't see any new // errors resulting from the list being malformed, we are free to complain about a trailing comma. - var errorCountBeforeParsingList = file.syntacticErrors.length; + var errorCountBeforeParsingList = file._parserDiagnostics.length; var commaStart = -1; // Meaning the previous token was not a comma while (true) { if (isListElement(kind, /* inErrorRecovery */ false)) { @@ -1418,7 +1428,7 @@ module ts { // Check if the last token was a comma. if (commaStart >= 0) { if (!allowTrailingComma) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { + if (file._parserDiagnostics.length === errorCountBeforeParsingList) { // Report a grammar error so we don't affect lookahead grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, Diagnostics.Trailing_comma_not_allowed); } @@ -1747,13 +1757,13 @@ module ts { function parseIndexSignatureMember(): SignatureDeclaration { var node = createNode(SyntaxKind.IndexSignature); - var errorCountBeforeIndexSignature = file.syntacticErrors.length; + var errorCountBeforeIndexSignature = file._parserDiagnostics.length; var indexerStart = scanner.getTokenPos(); node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); var indexerLength = scanner.getStartPos() - indexerStart; node.type = parseTypeAnnotation(); parseSemicolon(); - if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { + if (file._parserDiagnostics.length === errorCountBeforeIndexSignature) { checkIndexSignature(node, indexerStart, indexerLength); } return finishNode(node); @@ -1871,9 +1881,9 @@ module ts { function parseTupleType(): TupleTypeNode { var node = createNode(SyntaxKind.TupleType); var startTokenPos = scanner.getTokenPos(); - var startErrorCount = file.syntacticErrors.length; + var startErrorCount = file._parserDiagnostics.length; node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); - if (!node.elementTypes.length && file.syntacticErrors.length === startErrorCount) { + if (!node.elementTypes.length && file._parserDiagnostics.length === startErrorCount) { grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, Diagnostics.A_tuple_type_element_list_cannot_be_empty); } return finishNode(node); @@ -2629,14 +2639,14 @@ module ts { function parseTypeArguments(): NodeArray { var typeArgumentListStart = scanner.getTokenPos(); - var errorCountBeforeTypeParameterList = file.syntacticErrors.length; + var errorCountBeforeTypeParameterList = file._parserDiagnostics.length; // We pass parseSingleTypeArgument instead of parseType as the element parser // because parseSingleTypeArgument knows how to parse a missing type argument. // This is useful for signature help. parseType has the disadvantage that when // it sees a missing type, it changes the LookAheadMode to Error, and the result // is a broken binary expression, which breaks signature help. var result = parseBracketedList(ParsingContext.TypeArguments, parseSingleTypeArgument, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); - if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { + if (!result.length && file._parserDiagnostics.length === errorCountBeforeTypeParameterList) { grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, Diagnostics.Type_argument_list_cannot_be_empty); } return result; @@ -3062,14 +3072,14 @@ module ts { function parseBreakOrContinueStatement(kind: SyntaxKind): BreakOrContinueStatement { var node = createNode(kind); - var errorCountBeforeStatement = file.syntacticErrors.length; + var errorCountBeforeStatement = file._parserDiagnostics.length; parseExpected(kind === SyntaxKind.BreakStatement ? SyntaxKind.BreakKeyword : SyntaxKind.ContinueKeyword); if (!canParseSemicolon()) node.label = parseIdentifier(); parseSemicolon(); finishNode(node); // In an ambient context, we will already give an error for having a statement. - if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { + if (!inAmbientContext && errorCountBeforeStatement === file._parserDiagnostics.length) { if (node.label) { checkBreakOrContinueStatementWithLabel(node); } @@ -3142,7 +3152,7 @@ module ts { function parseReturnStatement(): ReturnStatement { var node = createNode(SyntaxKind.ReturnStatement); - var errorCountBeforeReturnStatement = file.syntacticErrors.length; + var errorCountBeforeReturnStatement = file._parserDiagnostics.length; var returnTokenStart = scanner.getTokenPos(); var returnTokenLength = scanner.getTextPos() - returnTokenStart; @@ -3151,7 +3161,7 @@ module ts { parseSemicolon(); // In an ambient context, we will already give an error for having a statement. - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { + if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file._parserDiagnostics.length) { grammarErrorAtPos(returnTokenStart, returnTokenLength, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); } return finishNode(node); @@ -3441,10 +3451,10 @@ module ts { function parseAndCheckFunctionBody(isConstructor: boolean): Block { var initialPosition = scanner.getTokenPos(); - var errorCountBeforeBody = file.syntacticErrors.length; + var errorCountBeforeBody = file._parserDiagnostics.length; if (token === SyntaxKind.OpenBraceToken) { var body = parseBody(/* ignoreMissingOpenBrace */ false); - if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { + if (body && inAmbientContext && file._parserDiagnostics.length === errorCountBeforeBody) { var diagnostic = isConstructor ? Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; grammarErrorAtPos(initialPosition, 1, diagnostic); } @@ -3462,7 +3472,7 @@ module ts { function parseVariableDeclaration(flags: NodeFlags, noIn?: boolean): VariableDeclaration { var node = createNode(SyntaxKind.VariableDeclaration); node.flags = flags; - var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; + var errorCountBeforeVariableDeclaration = file._parserDiagnostics.length; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); @@ -3471,7 +3481,7 @@ module ts { var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; node.initializer = parseInitializer(/*inParameter*/ false, noIn); - if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { + if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file._parserDiagnostics.length) { grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } if (!inAmbientContext && !node.initializer && flags & NodeFlags.Const) { @@ -3493,7 +3503,7 @@ module ts { function parseVariableStatement(allowLetAndConstDeclarations: boolean, pos?: number, flags?: NodeFlags): VariableStatement { var node = createNode(SyntaxKind.VariableStatement, pos); if (flags) node.flags = flags; - var errorCountBeforeVarStatement = file.syntacticErrors.length; + var errorCountBeforeVarStatement = file._parserDiagnostics.length; if (token === SyntaxKind.LetKeyword) { node.flags |= NodeFlags.Let; } @@ -3507,7 +3517,7 @@ module ts { node.declarations = parseVariableDeclarationList(node.flags, /*noIn*/false); parseSemicolon(); finishNode(node); - if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { + if (!node.declarations.length && file._parserDiagnostics.length === errorCountBeforeVarStatement) { grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); } if (languageVersion < ScriptTarget.ES6) { @@ -3566,7 +3576,7 @@ module ts { } function parsePropertyMemberDeclaration(pos: number, flags: NodeFlags): Declaration { - var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; + var errorCountBeforePropertyDeclaration = file._parserDiagnostics.length; var name = parsePropertyName(); var questionStart = scanner.getTokenPos(); @@ -3596,7 +3606,7 @@ module ts { property.initializer = parseInitializer(/*inParameter*/ false); parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { + if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file._parserDiagnostics.length) { grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } return finishNode(property); @@ -3604,10 +3614,10 @@ module ts { } function parseAndCheckMemberAccessorDeclaration(kind: SyntaxKind, pos: number, flags: NodeFlags): MethodDeclaration { - var errorCountBeforeAccessor = file.syntacticErrors.length; + var errorCountBeforeAccessor = file._parserDiagnostics.length; var accessor = parseMemberAccessorDeclaration(kind, pos, flags); - if (errorCountBeforeAccessor === file.syntacticErrors.length) { + if (errorCountBeforeAccessor === file._parserDiagnostics.length) { if (languageVersion < ScriptTarget.ES5) { grammarErrorOnNode(accessor.name, Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } @@ -3901,7 +3911,7 @@ module ts { function parseClassDeclaration(pos: number, flags: NodeFlags): ClassDeclaration { var node = createNode(SyntaxKind.ClassDeclaration, pos); node.flags = flags; - var errorCountBeforeClassDeclaration = file.syntacticErrors.length; + var errorCountBeforeClassDeclaration = file._parserDiagnostics.length; parseExpected(SyntaxKind.ClassKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); @@ -3914,7 +3924,7 @@ module ts { node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference, /*allowTrailingComma*/ false); } - var errorCountBeforeClassBody = file.syntacticErrors.length; + var errorCountBeforeClassBody = file._parserDiagnostics.length; if (parseExpected(SyntaxKind.OpenBraceToken)) { node.members = parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration); parseExpected(SyntaxKind.CloseBraceToken); @@ -3931,7 +3941,7 @@ module ts { function parseInterfaceDeclaration(pos: number, flags: NodeFlags): InterfaceDeclaration { var node = createNode(SyntaxKind.InterfaceDeclaration, pos); node.flags = flags; - var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; + var errorCountBeforeInterfaceDeclaration = file._parserDiagnostics.length; parseExpected(SyntaxKind.InterfaceKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); @@ -3943,7 +3953,7 @@ module ts { node.baseTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference, /*allowTrailingComma*/ false); } - var errorCountBeforeInterfaceBody = file.syntacticErrors.length; + var errorCountBeforeInterfaceBody = file._parserDiagnostics.length; node.members = parseTypeLiteral().members; if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, Diagnostics._0_list_cannot_be_empty, "extends"); @@ -3994,7 +4004,7 @@ module ts { // or any time an integer literal initializer is encountered. function parseAndCheckEnumMember(): EnumMember { var node = createNode(SyntaxKind.EnumMember); - var errorCountBeforeEnumMember = file.syntacticErrors.length; + var errorCountBeforeEnumMember = file._parserDiagnostics.length; node.name = parsePropertyName(); node.initializer = parseInitializer(/*inParameter*/ false); @@ -4002,14 +4012,14 @@ module ts { // since all values are known in compile time - it is not necessary to check that constant enum section precedes computed enum members. if (!enumIsConst) { if (inAmbientContext) { - if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { + if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file._parserDiagnostics.length) { grammarErrorOnNode(node.name, Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); } } else if (node.initializer) { inConstantEnumMemberSection = isIntegerLiteral(node.initializer); } - else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { + else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file._parserDiagnostics.length) { grammarErrorOnNode(node.name, Diagnostics.Enum_member_must_have_initializer); } } @@ -4073,10 +4083,10 @@ module ts { node.flags = flags; node.name = parseStringLiteral(); if (!inAmbientContext) { - var errorCount = file.syntacticErrors.length; + var errorCount = file._parserDiagnostics.length; // Only report this error if we have not already errored about a missing declare modifier, // which would have been at or after pos - if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { + if (!errorCount || file._parserDiagnostics[errorCount - 1].start < getTokenPos(pos)) { grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); } } @@ -4152,7 +4162,7 @@ module ts { function parseDeclaration(modifierContext: ModifierContext): Statement { var pos = getNodePos(); - var errorCountBeforeModifiers = file.syntacticErrors.length; + var errorCountBeforeModifiers = file._parserDiagnostics.length; var flags = parseAndCheckModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { @@ -4160,7 +4170,7 @@ module ts { nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { + if (flags !== 0 && errorCountBeforeModifiers === file._parserDiagnostics.length) { var modifiersStart = skipTrivia(sourceText, pos); grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, Diagnostics.An_export_assignment_cannot_have_modifiers); } @@ -4236,10 +4246,10 @@ module ts { var statementStart = scanner.getTokenPos(); var statementFirstTokenLength = scanner.getTextPos() - statementStart; - var errorCountBeforeStatement = file.syntacticErrors.length; + var errorCountBeforeStatement = file._parserDiagnostics.length; var statement = parseStatement(/*allowLetAndConstDeclarations*/ true); - if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { + if (inAmbientContext && file._parserDiagnostics.length === errorCountBeforeStatement) { grammarErrorAtPos(statementStart, statementFirstTokenLength, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); } @@ -4302,26 +4312,48 @@ module ts { : undefined); } + function getSyntacticDiagnostics() { + if (file._syntacticDiagnostics === undefined) { + if (file._parserDiagnostics.length > 0) { + // Don't bother doing any grammar checks if there are already parser errors. + // Otherwise we may end up with too many cascading errors. + file._syntacticDiagnostics = file._parserDiagnostics; + } + else { + // No parser errors were reported. Perform our stricted grammar checks. + file._syntacticDiagnostics = []; + performGrammarChecks(file); + } + + file._parserDiagnostics = undefined; + } + + return file._syntacticDiagnostics + } + scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText, scanError, onComment); var rootNodeFlags: NodeFlags = 0; if (fileExtensionIs(filename, ".d.ts")) { rootNodeFlags = NodeFlags.DeclarationFile; inAmbientContext = true; } - file = createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags); + file = createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags); file.filename = normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.getLineStarts = getLineStarts; - file.syntacticErrors = []; - file.semanticErrors = []; + file.getSyntacticDiagnostics = getSyntacticDiagnostics; + file._parserDiagnostics = []; + file.semanticDiagnostics = []; var referenceComments = processReferenceComments(); file.referencedFiles = referenceComments.referencedFiles; file.amdDependencies = referenceComments.amdDependencies; file.amdModuleName = referenceComments.amdModuleName; + file.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseSourceElement); file.externalModuleIndicator = getExternalModuleIndicator(); + file.nodeCount = nodeCount; file.identifierCount = identifierCount; file.version = version; @@ -4331,6 +4363,9 @@ module ts { return file; } + function performGrammarChecks(child: Node) { + } + export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { var program: Program; var files: SourceFile[] = []; @@ -4442,7 +4477,7 @@ module ts { else { files.push(file); } - forEach(file.syntacticErrors, e => { + forEach(file.getSyntacticDiagnostics(), e => { errors.push(e); }); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 58b705e3371..1ffbf12284c 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -644,8 +644,8 @@ module ts { amdDependencies: string[]; amdModuleName: string; referencedFiles: FileReference[]; - syntacticErrors: Diagnostic[]; - semanticErrors: Diagnostic[]; + semanticDiagnostics: Diagnostic[]; + getSyntacticDiagnostics(): Diagnostic[]; hasNoDefaultLib: boolean; externalModuleIndicator: Node; // The first node that causes this file to be an external module nodeCount: number; @@ -738,7 +738,7 @@ module ts { getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; - isArgumentsSymbol(symbol: Symbol): boolean; + isArgumentsSymbol(symbol: Symbol): boolean; isEmitBlocked(sourceFile?: SourceFile): boolean; // Returns the constant value of this enum member, or 'undefined' if the enum member has a computed value. getEnumMemberValue(node: EnumMember): number; diff --git a/src/services/formatting.ts b/src/services/formatting.ts index 91a3a362fda..337468803c6 100644 --- a/src/services/formatting.ts +++ b/src/services/formatting.ts @@ -252,7 +252,7 @@ module ts.formatting { rulesProvider: RulesProvider, requestKind: FormattingRequestKind): TextChange[] { - var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.syntacticErrors, originalRange); + var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.getSyntacticDiagnostics(), originalRange); // formatting context is used by rules provider var formattingContext = new FormattingContext(sourceFile, requestKind); diff --git a/src/services/services.ts b/src/services/services.ts index ca80e5a25a4..287ad437362 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -714,14 +714,18 @@ module ts { class SourceFileObject extends NodeObject implements SourceFile { public filename: string; public text: string; + + // These methods will have their implementation overridden with the implementation the + // compiler actually exports off of SourceFile. public getLineAndCharacterFromPosition(position: number): { line: number; character: number } { return null; } public getPositionFromLineAndCharacter(line: number, character: number): number { return -1; } public getLineStarts(): number[] { return undefined; } + public getSyntacticDiagnostics(): Diagnostic[] { return undefined; } + public amdDependencies: string[]; public amdModuleName: string; public referencedFiles: FileReference[]; - public syntacticErrors: Diagnostic[]; - public semanticErrors: Diagnostic[]; + public semanticDiagnostics: Diagnostic[]; public hasNoDefaultLib: boolean; public externalModuleIndicator: Node; // The first node that causes this file to be an external module public nodeCount: number; From 6fdc5dc14840e885a659239c92bcf2c9cbd7a899 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 17:01:39 -0800 Subject: [PATCH 050/178] Move parameter name 'strict' checking to the grammar walker. --- src/compiler/parser.ts | 65 +++++++++++++++---- src/compiler/types.ts | 30 +++++---- .../StrictMode/parserStrictMode12.ts | 1 + 3 files changed, 71 insertions(+), 25 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 2f51cd294e7..c28cc3818de 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1169,6 +1169,11 @@ module ts { function finishNode(node: T): T { node.end = scanner.getStartPos(); + + if (isInStrictMode) { + node.flags |= NodeFlags.ParsedInStrictMode; + } + return node; } @@ -1703,16 +1708,7 @@ module ts { for (var i = 0; i < parameterCount; i++) { var parameter = parameters[i]; - // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the - // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code - // or if its FunctionBody is strict code(11.1.5). - // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a - // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { - reportInvalidUseInStrictMode(parameter.name); - return; - } - else if (parameter.flags & NodeFlags.Rest) { + if (parameter.flags & NodeFlags.Rest) { if (i !== (parameterCount - 1)) { grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); return; @@ -4322,7 +4318,7 @@ module ts { else { // No parser errors were reported. Perform our stricted grammar checks. file._syntacticDiagnostics = []; - performGrammarChecks(file); + performGrammarChecks(sourceText, file); } file._parserDiagnostics = undefined; @@ -4363,9 +4359,54 @@ module ts { return file; } - function performGrammarChecks(child: Node) { + function performGrammarChecks(sourceText: string, file: SourceFileInternal) { + performNodeChecks(file); + + function performNodeChecks(node: Node) { + // First recurse and perform all grammar checks on the children of this node. If any + // children had an grammar error, then skip reporting errors for this node or anything + // higher. + if (forEachChild(node, performNodeChecks)) { + return true; + } + + // No grammar errors on any of our children. Check this node for grammar errors. + switch (node.kind) { + case SyntaxKind.Parameter: + return performParameterChecks(node); + } + } + + function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { + var span = getErrorSpanForNode(node); + var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; + var length = span.end - start; + + file._syntacticDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + + function reportInvalidUseInStrictMode(node: Identifier): void { + // declarationNameToString cannot be used here since it uses a backreference to 'parent' that is not yet set + var name = sourceText.substring(skipTrivia(sourceText, node.pos), node.end); + grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); + } + + function performParameterChecks(node: ParameterDeclaration): boolean { + // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the + // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code + // or if its FunctionBody is strict code(11.1.5). + // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a + // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) + if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + reportInvalidUseInStrictMode(node.name); + return true; + } + + return false; + } } + export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { var program: Program; var files: SourceFile[] = []; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1ffbf12284c..227034993ca 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -256,19 +256,23 @@ module ts { } export const enum NodeFlags { - Export = 0x00000001, // Declarations - Ambient = 0x00000002, // Declarations - QuestionMark = 0x00000004, // Parameter/Property/Method - Rest = 0x00000008, // Parameter - Public = 0x00000010, // Property/Method - Private = 0x00000020, // Property/Method - Protected = 0x00000040, // Property/Method - Static = 0x00000080, // Property/Method - MultiLine = 0x00000100, // Multi-line array or object literal - Synthetic = 0x00000200, // Synthetic node (for full fidelity) - DeclarationFile = 0x00000400, // Node is a .d.ts file - Let = 0x00000800, // Variable declaration - Const = 0x00001000, // Variable declaration + Export = 0x00000001, // Declarations + Ambient = 0x00000002, // Declarations + QuestionMark = 0x00000004, // Parameter/Property/Method + Rest = 0x00000008, // Parameter + Public = 0x00000010, // Property/Method + Private = 0x00000020, // Property/Method + Protected = 0x00000040, // Property/Method + Static = 0x00000080, // Property/Method + MultiLine = 0x00000100, // Multi-line array or object literal + Synthetic = 0x00000200, // Synthetic node (for full fidelity) + DeclarationFile = 0x00000400, // Node is a .d.ts file + Let = 0x00000800, // Variable declaration + Const = 0x00001000, // Variable declaration + + // Set if this node was parsed in strict mode. Used for grammar error checks, as well as + // checking if the node can be reused in incremental settings. + ParsedInStrictMode = 0x00002000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, diff --git a/tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode12.ts b/tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode12.ts index 5d89dfc3b71..e8374347196 100644 --- a/tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode12.ts +++ b/tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode12.ts @@ -1,2 +1,3 @@ +// @target: ES5 "use strict"; var v = { set foo(eval) { } } \ No newline at end of file From dfe79621fe508a42ebc5a10cc87057ff95147aed Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 18 Nov 2014 17:41:58 -0800 Subject: [PATCH 051/178] Added tests for overloads. --- .../signatureHelpTaggedTemplates1.ts | 3 +++ .../signatureHelpTaggedTemplates2.ts | 3 +++ .../signatureHelpTaggedTemplates3.ts | 3 +++ .../signatureHelpTaggedTemplates4.ts | 3 +++ .../signatureHelpTaggedTemplates5.ts | 3 +++ .../signatureHelpTaggedTemplates6.ts | 5 ++++- .../signatureHelpTaggedTemplates7.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete1.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete2.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete3.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete4.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete5.ts | 3 +++ ...signatureHelpTaggedTemplatesIncomplete6.ts | 3 +++ .../signatureHelpTaggedTemplatesNested1.ts | 2 ++ .../signatureHelpTaggedTemplatesNested2.ts | 2 ++ ...eHelpTaggedTemplatesWithOverloadedTags1.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags2.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags3.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags4.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags5.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags6.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags7.ts | 20 +++++++++++++++++++ ...eHelpTaggedTemplatesWithOverloadedTags8.ts | 20 +++++++++++++++++++ 23 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts index 457551f160a..78b4b586a0c 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts index fa29c21ff21..c4b75657be5 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts index 5670cadfd4e..2616a0797be 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("x"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts index bbbd869de09..995eddf3f65 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts index 68a95121240..01bd606cbf5 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("z"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts index c1080b3f7e5..96909c8aeac 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts @@ -7,8 +7,11 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); - verify.currentSignatureParamterCountIs(4); + verify.signatureHelpArgumentCountIs(4); + + //verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts index eb25ac6f647..ddb120b4089 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(1); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts index 65a250fce31..edc6b932e5f 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(2); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts index c2baa7b187d..51ca619c4be 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(2); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("x"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts index ccaebc1f1b6..05aaef5bc50 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(2); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts index e220ec60679..e615f0156c0 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(3); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts index 1655841575d..531ce46b3c8 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(3); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts index 67d81d6558e..fcfd569daff 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts @@ -7,7 +7,10 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.signatureHelpArgumentCountIs(3); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts index 934bea21ed5..a20e43b20bc 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts @@ -7,7 +7,9 @@ test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); }); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts index 9ff5103f30a..488209dfac7 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts @@ -8,7 +8,9 @@ debugger; test.markers().forEach(m => { goTo.position(m.position); + verify.signatureHelpCountIs(1); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); }); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts new file mode 100644 index 00000000000..608af7dbb96 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `/*1*/ /*2*/$/*3*/{ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(2); + + verify.currentSignatureParamterCountIs(2); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); + verify.currentParameterHelpArgumentNameIs("templateStrings"); + verify.currentParameterSpanIs("templateStrings: string[]"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts new file mode 100644 index 00000000000..c7908bdb52a --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${/*1*/ /*2*/ /*3*/ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(2); + + verify.currentSignatureParamterCountIs(2); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); + verify.currentParameterHelpArgumentNameIs("p1_o1"); + verify.currentParameterSpanIs("p1_o1: string"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts new file mode 100644 index 00000000000..22256db1f0e --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${/*1*/ "s/*2*/tring" /*3*/ } ${ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); + verify.currentParameterHelpArgumentNameIs("p1_o3"); + verify.currentParameterSpanIs("p1_o3: string"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts new file mode 100644 index 00000000000..700cc2194bf --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${/*1*/ 123.456/*2*/ /*3*/ } ${ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); + verify.currentParameterHelpArgumentNameIs("p1_o2"); + verify.currentParameterSpanIs("p1_o2: number"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts new file mode 100644 index 00000000000..20701c0e98d --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${ } ${/*1*/ /*2*/ /*3*/ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); + verify.currentParameterHelpArgumentNameIs("p2_o2"); + verify.currentParameterSpanIs("p2_o2: number"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts new file mode 100644 index 00000000000..7bfd17c254a --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${ } ${/*1*/ /*2*/ /*3*/} + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); + verify.currentParameterHelpArgumentNameIs("p2_o2"); + verify.currentParameterSpanIs("p2_o2: number"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts new file mode 100644 index 00000000000..4f747d3d8eb --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${ } ${/*1*/ fa/*2*/lse /*3*/} + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); + verify.currentParameterHelpArgumentNameIs("p2_o3"); + verify.currentParameterSpanIs("p2_o3: boolean"); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts new file mode 100644 index 00000000000..f97c2569730 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${ undefined } ${ undefined } ${/*1*/ 10/*2*/./*3*/01 /*4*/} ` + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(4); + + verify.currentSignatureParamterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); + verify.currentParameterHelpArgumentNameIs("p3_o2"); + verify.currentParameterSpanIs("p3_o2: number"); +}); \ No newline at end of file From 08f0672b03ac99c37976dd391ecd98f2a095779c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 17:42:32 -0800 Subject: [PATCH 052/178] Move parameter grammar checks to the grammar pass. --- src/compiler/parser.ts | 183 ++++++++++++++---- .../reference/amdModuleName2.errors.txt | 30 +-- .../fatarrowfunctionsOptionalArgs.errors.txt | 23 +-- ...rowfunctionsOptionalArgsErrors1.errors.txt | 8 +- .../reference/parserRealSource11.errors.txt | 5 +- .../reference/parserharness.errors.txt | 5 +- .../fatarrowfunctionsOptionalArgsErrors1.ts | 1 - 7 files changed, 161 insertions(+), 94 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index c28cc3818de..1c598e5baa6 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1676,7 +1676,6 @@ module ts { } var typeParameters = parseTypeParameters(); var parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); - checkParameterList(parameters); var type: TypeNode; @@ -1702,45 +1701,6 @@ module ts { return parseBracketedList(ParsingContext.Parameters, parseParameter, startDelimiter, endDelimiter); } - function checkParameterList(parameters: NodeArray): void { - var seenOptionalParameter = false; - var parameterCount = parameters.length; - - for (var i = 0; i < parameterCount; i++) { - var parameter = parameters[i]; - if (parameter.flags & NodeFlags.Rest) { - if (i !== (parameterCount - 1)) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return; - } - - if (parameter.flags & NodeFlags.QuestionMark) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_be_optional); - return; - } - - if (parameter.initializer) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return; - } - } - else if (parameter.flags & NodeFlags.QuestionMark || parameter.initializer) { - seenOptionalParameter = true; - - if (parameter.flags & NodeFlags.QuestionMark && parameter.initializer) { - grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return; - } - } - else { - if (seenOptionalParameter) { - grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return; - } - } - } - } - function parseSignatureMember(kind: SyntaxKind, returnToken: SyntaxKind): SignatureDeclaration { var node = createNode(kind); var sig = parseSignature(kind, returnToken, /* returnTokenRequired */ false); @@ -4372,9 +4332,21 @@ module ts { // No grammar errors on any of our children. Check this node for grammar errors. switch (node.kind) { - case SyntaxKind.Parameter: - return performParameterChecks(node); + case SyntaxKind.ArrowFunction: return performArrowFunctionChecks(node); + case SyntaxKind.CallSignature: return performCallSignatureChecks(node); + case SyntaxKind.Constructor: return performConstructorChecks(node); + case SyntaxKind.ConstructorType: return performConstructorTypeChecks(node); + case SyntaxKind.ConstructSignature: return performConstructSignatureChecks(node); + case SyntaxKind.FunctionDeclaration: return performFunctionDeclarationChecks(node); + case SyntaxKind.FunctionExpression: return performFunctionExpressionChecks(node); + case SyntaxKind.FunctionType: return performFunctionTypeChecks(node); + case SyntaxKind.GetAccessor: return performGetAccessorChecks(node); + case SyntaxKind.Method: return performMethodChecks(node); + case SyntaxKind.Parameter: return performParameterChecks(node); + case SyntaxKind.SetAccessor: return performSetAccessorChecks(node); } + + return false; } function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { @@ -4391,6 +4363,86 @@ module ts { grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } + function performArrowFunctionChecks(node: FunctionExpression) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performCallSignatureChecks(node: ConstructorDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performConstructorChecks(node: ConstructorDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performConstructorTypeChecks(node: SignatureDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performConstructSignatureChecks(node: FunctionLikeDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performFunctionDeclarationChecks(node: FunctionLikeDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performFunctionExpressionChecks(node: FunctionExpression) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performFunctionTypeChecks(node: SignatureDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performGetAccessorChecks(node: MethodDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + + function performMethodChecks(node: MethodDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } + function performParameterChecks(node: ParameterDeclaration): boolean { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code @@ -4404,6 +4456,53 @@ module ts { return false; } + + function performParameterListChecks(parameters: NodeArray): void { + var seenOptionalParameter = false; + var parameterCount = parameters.length; + + for (var i = 0; i < parameterCount; i++) { + var parameter = parameters[i]; + if (parameter.flags & NodeFlags.Rest) { + if (i !== (parameterCount - 1)) { + grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + return; + } + + if (parameter.flags & NodeFlags.QuestionMark) { + grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_be_optional); + return; + } + + if (parameter.initializer) { + grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); + return; + } + } + else if (parameter.flags & NodeFlags.QuestionMark || parameter.initializer) { + seenOptionalParameter = true; + + if (parameter.flags & NodeFlags.QuestionMark && parameter.initializer) { + grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + return; + } + } + else { + if (seenOptionalParameter) { + grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + return; + } + } + } + } + + function performSetAccessorChecks(node: MethodDeclaration) { + if (performParameterListChecks(node.parameters)) { + return true; + } + + return false; + } } diff --git a/tests/baselines/reference/amdModuleName2.errors.txt b/tests/baselines/reference/amdModuleName2.errors.txt index 911f31a1f4b..cf7fb82ae10 100644 --- a/tests/baselines/reference/amdModuleName2.errors.txt +++ b/tests/baselines/reference/amdModuleName2.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments. - - -==== tests/cases/compiler/amdModuleName2.ts (1 errors) ==== - /// - /// - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2458: An AMD module cannot have multiple name assignments. - class Foo { - x: number; - constructor() { - this.x = 5; - } - } - export = Foo; +tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments. + + +==== tests/cases/compiler/amdModuleName2.ts (1 errors) ==== + /// + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2458: An AMD module cannot have multiple name assignments. + class Foo { + x: number; + constructor() { + this.x = 5; + } + } + export = Foo; \ No newline at end of file diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgs.errors.txt b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.errors.txt index e445a1460f5..db0721c62af 100644 --- a/tests/baselines/reference/fatarrowfunctionsOptionalArgs.errors.txt +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgs.errors.txt @@ -1,15 +1,8 @@ -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(60,10): error TS1015: Parameter cannot have question mark and initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(70,11): error TS1015: Parameter cannot have question mark and initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(80,17): error TS1015: Parameter cannot have question mark and initializer. tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(88,23): error TS1005: ';' expected. tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(88,38): error TS1005: ';' expected. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(106,3): error TS1015: Parameter cannot have question mark and initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(106,35): error TS1015: Parameter cannot have question mark and initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(126,6): error TS1015: Parameter cannot have question mark and initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Parameter cannot have question mark and initializer. -==== tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts (9 errors) ==== +==== tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts (2 errors) ==== // valid // no params @@ -70,8 +63,6 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Para false ? (arg: number) => 45 : null; false ? (arg?: number) => 46 : null; false ? (arg?: number = 0) => 47 : null; - ~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. false ? (...arg: number[]) => 48 : null; // in ternary exression within paren @@ -82,8 +73,6 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Para false ? ((arg: number) => 55) : null; false ? ((arg?: number) => 56) : null; false ? ((arg?: number = 0) => 57) : null; - ~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. false ? ((...arg: number[]) => 58) : null; // ternary exression's else clause @@ -94,8 +83,6 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Para false ? null : (arg: number) => 65; false ? null : (arg?: number) => 66; false ? null : (arg?: number = 0) => 67; - ~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. false ? null : (...arg: number[]) => 68; @@ -126,10 +113,6 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Para ((arg:number) => 0) + '' + ((arg:number) => 104); ((arg:number = 1) => 0) + '' + ((arg:number = 2) => 105); ((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106); - ~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. - ~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. ((...arg:number[]) => 0) + '' + ((...arg:number[]) => 107); ((arg1, arg2?) => 0) + '' + ((arg1,arg2?) => 108); ((arg1, ...arg2:number[]) => 0) + '' + ((arg1, ...arg2:number[]) => 108); @@ -150,12 +133,8 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgs.ts(128,9): error TS1015: Para (a: number = 0) => 116, (a = 0) => 117, (a?: number = 0) => 118, - ~ -!!! error TS1015: Parameter cannot have question mark and initializer. (...a: number[]) => 119, (a, b? = 0, ...c: number[]) => 120, - ~ -!!! error TS1015: Parameter cannot have question mark and initializer. (a) => (b) => (c) => 121, false? (a) => 0 : (b) => 122 ); \ No newline at end of file diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.errors.txt b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.errors.txt index ce937dd55dc..309e731e54f 100644 --- a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.errors.txt +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors1.errors.txt @@ -1,11 +1,10 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(1,9): error TS1016: A required parameter cannot follow an optional parameter. tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(2,5): error TS1047: A rest parameter cannot be optional. tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(4,5): error TS1048: A rest parameter cannot have an initializer. -tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(5,5): error TS1003: Identifier expected. -tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(8,12): error TS1016: A required parameter cannot follow an optional parameter. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(7,12): error TS1016: A required parameter cannot follow an optional parameter. -==== tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts (5 errors) ==== +==== tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts (4 errors) ==== (arg1?, arg2) => 101; ~~~~ !!! error TS1016: A required parameter cannot follow an optional parameter. @@ -16,9 +15,6 @@ tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts(8,12): error TS1016 (...arg:number [] = []) => 104; ~~~ !!! error TS1048: A rest parameter cannot have an initializer. - (...) => 105; - ~ -!!! error TS1003: Identifier expected. // Non optional parameter following an optional one (arg1 = 1, arg2) => 1; diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index 966da980097..68fe64a63f5 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -1,6 +1,5 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(193,40): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(867,29): error TS1015: Parameter cannot have question mark and initializer. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1009,45): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1024,47): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(13,22): error TS2304: Cannot find name 'Type'. @@ -515,7 +514,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,30): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error TS2304: Cannot find name 'TokenID'. -==== tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts (515 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts (514 errors) ==== // Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. // See LICENSE.txt in the project root for complete license information. @@ -1815,8 +1814,6 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } public getAliasName(aliasAST?: AST = this.alias) : string { - ~~~~~~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. if (aliasAST.nodeType == NodeType.Name) { ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt index 01104e61ea2..4de6566054c 100644 --- a/tests/baselines/reference/parserharness.errors.txt +++ b/tests/baselines/reference/parserharness.errors.txt @@ -3,7 +3,6 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(17,1): err tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(18,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/services/typescriptServices.ts' not found. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(19,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/RealWorld/diff.ts' not found. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1430,9): error TS1128: Declaration or statement expected. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2047,13): error TS1015: Parameter cannot have question mark and initializer. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(21,21): error TS2305: Module 'Harness' has no exported member 'Assert'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(25,17): error TS2304: Cannot find name 'IIO'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(41,12): error TS2304: Cannot find name 'ActiveXObject'. @@ -111,7 +110,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1787,68): tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): error TS2304: Cannot find name 'Diff'. -==== tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts (111 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts (110 errors) ==== // // Copyright (c) Microsoft Corporation. All rights reserved. // @@ -2379,8 +2378,6 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): relativeFilename: string, generateContent: () => string, runImmediately? = false, - ~~~~~~~~~~~~~~ -!!! error TS1015: Parameter cannot have question mark and initializer. opts?: BaselineOptions) { var actual = undefined; diff --git a/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts index c684aeca5b3..d8ddcf4bb8f 100644 --- a/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts +++ b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors1.ts @@ -2,7 +2,6 @@ (...arg?) => 102; (...arg) => 103; (...arg:number [] = []) => 104; -(...) => 105; // Non optional parameter following an optional one (arg1 = 1, arg2) => 1; \ No newline at end of file From 513a8c3e9767db5eb955a1e53da5b22318a3180b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 18 Nov 2014 17:48:58 -0800 Subject: [PATCH 053/178] Fixed broken test. --- tests/cases/fourslash/signatureHelpTaggedTemplates6.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts index 96909c8aeac..71b85b1821b 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts @@ -9,9 +9,9 @@ test.markers().forEach(m => { goTo.position(m.position); verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); + verify.signatureHelpArgumentCountIs(1); - //verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParamterCountIs(4); verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); From 34bb53f54c942b59c19d39922f0bf799a160a1bf Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 18:20:41 -0800 Subject: [PATCH 054/178] Use the entire indexer node for grammar error reporting. --- src/compiler/parser.ts | 24 ++++----- ...rowfunctionsOptionalArgsErrors3.errors.txt | 8 +++ ...rowfunctionsOptionalArgsErrors4.errors.txt | 49 +++++++++++++++++++ tests/baselines/reference/giant.errors.txt | 16 +++--- ...SignatureMustHaveTypeAnnotation.errors.txt | 2 +- .../reference/indexTypeCheck.errors.txt | 4 +- .../indexWithoutParamType.errors.txt | 2 +- .../reference/intTypeCheck.errors.txt | 4 +- .../parserIndexSignature11.errors.txt | 2 +- .../parserIndexSignature9.errors.txt | 2 +- .../reference/parserObjectType6.errors.txt | 2 +- .../fatarrowfunctionsOptionalArgsErrors3.ts | 1 + .../fatarrowfunctionsOptionalArgsErrors4.ts | 22 +++++++++ 13 files changed, 106 insertions(+), 32 deletions(-) create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.errors.txt create mode 100644 tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.errors.txt create mode 100644 tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts create mode 100644 tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 1c598e5baa6..7b59aeb724b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1719,52 +1719,46 @@ module ts { var indexerLength = scanner.getStartPos() - indexerStart; node.type = parseTypeAnnotation(); parseSemicolon(); + finishNode(node) + if (file._parserDiagnostics.length === errorCountBeforeIndexSignature) { - checkIndexSignature(node, indexerStart, indexerLength); + checkIndexSignature(node); } - return finishNode(node); + + return node; } - function checkIndexSignature(node: SignatureDeclaration, indexerStart: number, indexerLength: number): void { + function checkIndexSignature(node: SignatureDeclaration): void { var parameter = node.parameters[0]; if (node.parameters.length !== 1) { - var arityDiagnostic = Diagnostics.An_index_signature_must_have_exactly_one_parameter; if (parameter) { - grammarErrorOnNode(parameter.name, arityDiagnostic); + grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_must_have_exactly_one_parameter); } else { - grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); + grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_exactly_one_parameter); } - return; } else if (parameter.flags & NodeFlags.Rest) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_cannot_have_a_rest_parameter); - return; } else if (parameter.flags & NodeFlags.Modifier) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); - return; } else if (parameter.flags & NodeFlags.QuestionMark) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); - return; } else if (parameter.initializer) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); - return; } else if (!parameter.type) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); - return; } else if (parameter.type.kind !== SyntaxKind.StringKeyword && parameter.type.kind !== SyntaxKind.NumberKeyword) { grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); - return; } else if (!node.type) { - grammarErrorAtPos(indexerStart, indexerLength, Diagnostics.An_index_signature_must_have_a_type_annotation); - return; + grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_a_type_annotation); } } diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.errors.txt b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.errors.txt new file mode 100644 index 00000000000..631ccc2e221 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors3.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts(1,5): error TS1003: Identifier expected. + + +==== tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts (1 errors) ==== + (...) => 105; + ~ +!!! error TS1003: Identifier expected. + \ No newline at end of file diff --git a/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.errors.txt b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.errors.txt new file mode 100644 index 00000000000..8de0eb92a02 --- /dev/null +++ b/tests/baselines/reference/fatarrowfunctionsOptionalArgsErrors4.errors.txt @@ -0,0 +1,49 @@ +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(1,14): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(2,15): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(3,21): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(4,7): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(4,39): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(17,10): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(19,13): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts(6,5): error TS2304: Cannot find name 'foo'. + + +==== tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts (8 errors) ==== + false ? (arg?: number = 0) => 47 : null; + ~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. + false ? ((arg?: number = 0) => 57) : null; + ~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. + false ? null : (arg?: number = 0) => 67; + ~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. + ((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106); + ~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. + ~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. + + foo( + ~~~ +!!! error TS2304: Cannot find name 'foo'. + (a) => 110, + ((a) => 111), + (a) => { + return 112; + }, + (a? ) => 113, + (a, b? ) => 114, + (a: number) => 115, + (a: number = 0) => 116, + (a = 0) => 117, + (a?: number = 0) => 118, + ~ +!!! error TS1015: Parameter cannot have question mark and initializer. + (...a: number[]) => 119, + (a, b? = 0, ...c: number[]) => 120, + ~ +!!! error TS1015: Parameter cannot have question mark and initializer. + (a) => (b) => (c) => 121, + false? (a) => 0 : (b) => 122 + ); \ No newline at end of file diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 5ef1393915d..830fa091ccb 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -388,7 +388,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -502,7 +502,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -633,7 +633,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -866,7 +866,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -980,7 +980,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -1111,7 +1111,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -1380,7 +1380,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -1484,7 +1484,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ diff --git a/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt index 52934b7ae9e..e7437fcb056 100644 --- a/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt +++ b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt @@ -10,7 +10,7 @@ tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(12,5): error TS1021 ~ !!! error TS1022: An index signature parameter must have a type annotation. [x: string]; - ~~~~~~~~~~~ + ~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. } diff --git a/tests/baselines/reference/indexTypeCheck.errors.txt b/tests/baselines/reference/indexTypeCheck.errors.txt index 71bc03eca96..efa02c3ff1f 100644 --- a/tests/baselines/reference/indexTypeCheck.errors.txt +++ b/tests/baselines/reference/indexTypeCheck.errors.txt @@ -11,10 +11,10 @@ tests/cases/compiler/indexTypeCheck.ts(51,1): error TS2342: An index expression ==== tests/cases/compiler/indexTypeCheck.ts (8 errors) ==== interface Red { [n:number]; // ok - ~~~~~~~~~~ + ~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [s:string]; // ok - ~~~~~~~~~~ + ~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. } diff --git a/tests/baselines/reference/indexWithoutParamType.errors.txt b/tests/baselines/reference/indexWithoutParamType.errors.txt index 292583302a0..01a5b44a2e0 100644 --- a/tests/baselines/reference/indexWithoutParamType.errors.txt +++ b/tests/baselines/reference/indexWithoutParamType.errors.txt @@ -3,5 +3,5 @@ tests/cases/compiler/indexWithoutParamType.ts(1,10): error TS1096: An index sign ==== tests/cases/compiler/indexWithoutParamType.ts (1 errors) ==== var y: { []; } // Error - ~~ + ~~~ !!! error TS1096: An index signature must have exactly one parameter. \ No newline at end of file diff --git a/tests/baselines/reference/intTypeCheck.errors.txt b/tests/baselines/reference/intTypeCheck.errors.txt index e6cfc73230a..d58df0c2ad2 100644 --- a/tests/baselines/reference/intTypeCheck.errors.txt +++ b/tests/baselines/reference/intTypeCheck.errors.txt @@ -130,7 +130,7 @@ tests/cases/compiler/intTypeCheck.ts(203,17): error TS2351: Cannot use 'new' wit ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ @@ -171,7 +171,7 @@ tests/cases/compiler/intTypeCheck.ts(203,17): error TS2351: Cannot use 'new' wit ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ diff --git a/tests/baselines/reference/parserIndexSignature11.errors.txt b/tests/baselines/reference/parserIndexSignature11.errors.txt index 1aa23b64514..585e72a3516 100644 --- a/tests/baselines/reference/parserIndexSignature11.errors.txt +++ b/tests/baselines/reference/parserIndexSignature11.errors.txt @@ -9,7 +9,7 @@ tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature1 ~ !!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~ + ~~~~~~~~~~~~~ !!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; ~~ diff --git a/tests/baselines/reference/parserIndexSignature9.errors.txt b/tests/baselines/reference/parserIndexSignature9.errors.txt index e7686c22474..1a7034c4f14 100644 --- a/tests/baselines/reference/parserIndexSignature9.errors.txt +++ b/tests/baselines/reference/parserIndexSignature9.errors.txt @@ -4,6 +4,6 @@ tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature9 ==== tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature9.ts (1 errors) ==== interface I { []: number - ~~ + ~~~~~~~~~~ !!! error TS1096: An index signature must have exactly one parameter. } \ No newline at end of file diff --git a/tests/baselines/reference/parserObjectType6.errors.txt b/tests/baselines/reference/parserObjectType6.errors.txt index 5ad8f5e0053..afdc6b8f4d8 100644 --- a/tests/baselines/reference/parserObjectType6.errors.txt +++ b/tests/baselines/reference/parserObjectType6.errors.txt @@ -8,6 +8,6 @@ tests/cases/conformance/parser/ecmascript5/ObjectTypes/parserObjectType6.ts(2,7) ~ !!! error TS2304: Cannot find name 'B'. []; - ~~ + ~~~ !!! error TS1096: An index signature must have exactly one parameter. }; \ No newline at end of file diff --git a/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts new file mode 100644 index 00000000000..77949419711 --- /dev/null +++ b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors3.ts @@ -0,0 +1 @@ +(...) => 105; diff --git a/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts new file mode 100644 index 00000000000..b4daf2cc3ab --- /dev/null +++ b/tests/cases/compiler/fatarrowfunctionsOptionalArgsErrors4.ts @@ -0,0 +1,22 @@ + false ? (arg?: number = 0) => 47 : null; + false ? ((arg?: number = 0) => 57) : null; + false ? null : (arg?: number = 0) => 67; + ((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106); + + foo( + (a) => 110, + ((a) => 111), + (a) => { + return 112; + }, + (a? ) => 113, + (a, b? ) => 114, + (a: number) => 115, + (a: number = 0) => 116, + (a = 0) => 117, + (a?: number = 0) => 118, + (...a: number[]) => 119, + (a, b? = 0, ...c: number[]) => 120, + (a) => (b) => (c) => 121, + false? (a) => 0 : (b) => 122 + ); \ No newline at end of file From 2961d230784f221172f9298f51486a89f75349ca Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 18:44:53 -0800 Subject: [PATCH 055/178] Skip error checks on node if any children produced errors. --- src/compiler/parser.ts | 176 ++++++++---------- .../reference/complicatedPrivacy.errors.txt | 5 +- tests/baselines/reference/giant.errors.txt | 74 +------- .../reference/intTypeCheck.errors.txt | 20 +- .../optionalPropertiesSyntax.errors.txt | 5 +- 5 files changed, 77 insertions(+), 203 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7b59aeb724b..f8c7b2b8d5a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1713,53 +1713,10 @@ module ts { function parseIndexSignatureMember(): SignatureDeclaration { var node = createNode(SyntaxKind.IndexSignature); - var errorCountBeforeIndexSignature = file._parserDiagnostics.length; - var indexerStart = scanner.getTokenPos(); node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); - var indexerLength = scanner.getStartPos() - indexerStart; node.type = parseTypeAnnotation(); parseSemicolon(); - finishNode(node) - - if (file._parserDiagnostics.length === errorCountBeforeIndexSignature) { - checkIndexSignature(node); - } - - return node; - } - - function checkIndexSignature(node: SignatureDeclaration): void { - var parameter = node.parameters[0]; - if (node.parameters.length !== 1) { - if (parameter) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_must_have_exactly_one_parameter); - } - else { - grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_exactly_one_parameter); - } - } - else if (parameter.flags & NodeFlags.Rest) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_cannot_have_a_rest_parameter); - } - else if (parameter.flags & NodeFlags.Modifier) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); - } - else if (parameter.flags & NodeFlags.QuestionMark) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); - } - else if (parameter.initializer) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); - } - else if (!parameter.type) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); - } - else if (parameter.type.kind !== SyntaxKind.StringKeyword && - parameter.type.kind !== SyntaxKind.NumberKeyword) { - grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); - } - else if (!node.type) { - grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_a_type_annotation); - } + return finishNode(node) } function parsePropertyOrMethod(): Declaration { @@ -4314,14 +4271,19 @@ module ts { } function performGrammarChecks(sourceText: string, file: SourceFileInternal) { + var syntacticDiagnostics = file._syntacticDiagnostics; + performNodeChecks(file); - function performNodeChecks(node: Node) { + function performNodeChecks(node: Node): void { // First recurse and perform all grammar checks on the children of this node. If any // children had an grammar error, then skip reporting errors for this node or anything // higher. - if (forEachChild(node, performNodeChecks)) { - return true; + var diagnosticCount = syntacticDiagnostics.length; + forEachChild(node, performNodeChecks); + + if (diagnosticCount !== syntacticDiagnostics.length) { + return; } // No grammar errors on any of our children. Check this node for grammar errors. @@ -4335,12 +4297,11 @@ module ts { case SyntaxKind.FunctionExpression: return performFunctionExpressionChecks(node); case SyntaxKind.FunctionType: return performFunctionTypeChecks(node); case SyntaxKind.GetAccessor: return performGetAccessorChecks(node); + case SyntaxKind.IndexSignature: return performIndexSignatureChecks(node); case SyntaxKind.Method: return performMethodChecks(node); case SyntaxKind.Parameter: return performParameterChecks(node); case SyntaxKind.SetAccessor: return performSetAccessorChecks(node); } - - return false; } function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { @@ -4358,100 +4319,111 @@ module ts { } function performArrowFunctionChecks(node: FunctionExpression) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performCallSignatureChecks(node: ConstructorDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performConstructorChecks(node: ConstructorDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performConstructorTypeChecks(node: SignatureDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performConstructSignatureChecks(node: FunctionLikeDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performFunctionDeclarationChecks(node: FunctionLikeDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performFunctionExpressionChecks(node: FunctionExpression) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performFunctionTypeChecks(node: SignatureDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } function performGetAccessorChecks(node: MethodDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } + } - return false; + function performIndexSignatureChecks(node: SignatureDeclaration): void { + var parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + if (parameter) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + else { + return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + } + else if (parameter.flags & NodeFlags.Rest) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_cannot_have_a_rest_parameter); + } + else if (parameter.flags & NodeFlags.Modifier) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + } + else if (parameter.flags & NodeFlags.QuestionMark) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + } + else if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + } + else if (!parameter.type) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + } + else if (parameter.type.kind !== SyntaxKind.StringKeyword && + parameter.type.kind !== SyntaxKind.NumberKeyword) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); + } + else if (!node.type) { + return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_a_type_annotation); + } } function performMethodChecks(node: MethodDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } - function performParameterChecks(node: ParameterDeclaration): boolean { + function performParameterChecks(node: ParameterDeclaration): void { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - return true; + return reportInvalidUseInStrictMode(node.name); } - - return false; } - function performParameterListChecks(parameters: NodeArray): void { + function checkParameterList(parameters: NodeArray): boolean { var seenOptionalParameter = false; var parameterCount = parameters.length; @@ -4460,17 +4432,17 @@ module ts { if (parameter.flags & NodeFlags.Rest) { if (i !== (parameterCount - 1)) { grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return; + return true; } if (parameter.flags & NodeFlags.QuestionMark) { grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_be_optional); - return; + return true; } if (parameter.initializer) { grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return; + return true; } } else if (parameter.flags & NodeFlags.QuestionMark || parameter.initializer) { @@ -4478,24 +4450,22 @@ module ts { if (parameter.flags & NodeFlags.QuestionMark && parameter.initializer) { grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return; + return true; } } else { if (seenOptionalParameter) { grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return; + return true; } } } } function performSetAccessorChecks(node: MethodDeclaration) { - if (performParameterListChecks(node.parameters)) { - return true; + if (checkParameterList(node.parameters)) { + return; } - - return false; } } diff --git a/tests/baselines/reference/complicatedPrivacy.errors.txt b/tests/baselines/reference/complicatedPrivacy.errors.txt index e4867f0d2f5..404ee545716 100644 --- a/tests/baselines/reference/complicatedPrivacy.errors.txt +++ b/tests/baselines/reference/complicatedPrivacy.errors.txt @@ -1,10 +1,9 @@ tests/cases/compiler/complicatedPrivacy.ts(11,24): error TS1054: A 'get' accessor cannot have parameters. tests/cases/compiler/complicatedPrivacy.ts(24,38): error TS1005: ';' expected. -tests/cases/compiler/complicatedPrivacy.ts(35,6): error TS1022: An index signature parameter must have a type annotation. tests/cases/compiler/complicatedPrivacy.ts(73,49): error TS2305: Module 'mglo5' has no exported member 'i6'. -==== tests/cases/compiler/complicatedPrivacy.ts (4 errors) ==== +==== tests/cases/compiler/complicatedPrivacy.ts (3 errors) ==== module m1 { export module m2 { @@ -44,8 +43,6 @@ tests/cases/compiler/complicatedPrivacy.ts(73,49): error TS2305: Module 'mglo5' export function f4(arg1: { [number]: C1; - ~~~~~~ -!!! error TS1022: An index signature parameter must have a type annotation. }) { } diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 830fa091ccb..a57c0a42c15 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -4,18 +4,12 @@ tests/cases/compiler/giant.ts(29,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(31,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(35,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(37,1): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(61,6): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(62,5): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(63,6): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(89,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(91,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(93,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(95,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(99,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(101,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(125,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(126,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(127,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(154,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(168,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(170,9): error TS1005: '{' expected. @@ -23,9 +17,6 @@ tests/cases/compiler/giant.ts(172,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(174,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(178,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(180,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(204,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(205,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(206,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(233,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(238,35): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(240,24): error TS1111: A constructor implementation cannot be declared in an ambient context. @@ -54,18 +45,12 @@ tests/cases/compiler/giant.ts(287,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(289,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(293,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(295,1): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(319,6): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(320,5): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(321,6): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(347,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(349,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(351,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(353,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(357,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(359,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(383,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(384,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(385,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(412,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(426,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(428,9): error TS1005: '{' expected. @@ -73,9 +58,6 @@ tests/cases/compiler/giant.ts(430,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(432,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(436,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(438,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(462,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(463,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(464,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(491,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(496,35): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(498,24): error TS1111: A constructor implementation cannot be declared in an ambient context. @@ -120,9 +102,6 @@ tests/cases/compiler/giant.ts(556,21): error TS1036: Statements are not allowed tests/cases/compiler/giant.ts(558,24): error TS1111: A constructor implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(561,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(563,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(587,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(588,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(589,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(606,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(606,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(611,30): error TS1037: A function implementation cannot be declared in an ambient context. @@ -138,9 +117,6 @@ tests/cases/compiler/giant.ts(621,29): error TS1036: Statements are not allowed tests/cases/compiler/giant.ts(623,24): error TS1111: A constructor implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(626,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(628,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(653,10): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/giant.ts(654,9): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/giant.ts(655,10): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/giant.ts(672,22): error TS1037: A function implementation cannot be declared in an ambient context. 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. @@ -281,7 +257,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (281 errors) ==== +==== tests/cases/compiler/giant.ts (257 errors) ==== /* Prefixes @@ -385,14 +361,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -499,14 +469,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -630,14 +594,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -863,14 +821,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -977,14 +929,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -1108,14 +1054,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -1377,14 +1317,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -1481,14 +1415,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; diff --git a/tests/baselines/reference/intTypeCheck.errors.txt b/tests/baselines/reference/intTypeCheck.errors.txt index d58df0c2ad2..64655f1bd35 100644 --- a/tests/baselines/reference/intTypeCheck.errors.txt +++ b/tests/baselines/reference/intTypeCheck.errors.txt @@ -1,9 +1,3 @@ -tests/cases/compiler/intTypeCheck.ts(35,6): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/intTypeCheck.ts(36,5): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/intTypeCheck.ts(37,6): error TS1096: An index signature must have exactly one parameter. -tests/cases/compiler/intTypeCheck.ts(70,6): error TS1022: An index signature parameter must have a type annotation. -tests/cases/compiler/intTypeCheck.ts(71,5): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/intTypeCheck.ts(72,6): error TS1096: An index signature must have exactly one parameter. tests/cases/compiler/intTypeCheck.ts(104,20): error TS1109: Expression expected. tests/cases/compiler/intTypeCheck.ts(118,21): error TS1109: Expression expected. tests/cases/compiler/intTypeCheck.ts(132,21): error TS1109: Expression expected. @@ -91,7 +85,7 @@ tests/cases/compiler/intTypeCheck.ts(202,22): error TS2304: Cannot find name 'i8 tests/cases/compiler/intTypeCheck.ts(203,17): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -==== tests/cases/compiler/intTypeCheck.ts (73 errors) ==== +==== tests/cases/compiler/intTypeCheck.ts (67 errors) ==== interface i1 { //Property Signatures p; @@ -127,14 +121,8 @@ tests/cases/compiler/intTypeCheck.ts(203,17): error TS2351: Cannot use 'new' wit interface i4 { //Index Signatures [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. } interface i5 extends i1 { } interface i6 extends i2 { } @@ -168,14 +156,8 @@ tests/cases/compiler/intTypeCheck.ts(203,17): error TS2351: Cannot use 'new' wit //Index Signatures [p]; - ~ -!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; - ~~~~~~~~~~~~~ -!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; - ~~ -!!! error TS1096: An index signature must have exactly one parameter. //Property Signatures p; diff --git a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt index 66c1cae2a7e..daeb7c7a268 100644 --- a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt +++ b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt @@ -6,7 +6,6 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(18,12): error TS1131: Property tests/cases/compiler/optionalPropertiesSyntax.ts(32,18): error TS1005: ';' expected. tests/cases/compiler/optionalPropertiesSyntax.ts(32,19): error TS1131: Property or signature expected. 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'. @@ -15,7 +14,7 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(33,7): error TS2375: Duplicate tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate number index signature. -==== tests/cases/compiler/optionalPropertiesSyntax.ts (15 errors) ==== +==== tests/cases/compiler/optionalPropertiesSyntax.ts (14 errors) ==== interface fnSigs { //functions signatures can be optional fn(): void; @@ -76,8 +75,6 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate ~~~~~~~~~~~~~~~~~~~ !!! error TS2375: Duplicate number index signature. [idx?: number]: any; //err - ~~~ -!!! error TS1019: An index signature parameter cannot have a question mark. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2375: Duplicate number index signature. } \ No newline at end of file From c42b277ed7de584b470573a82ae19afc5e9a1e1a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 20:59:58 -0800 Subject: [PATCH 056/178] Rename and simplify code. --- src/compiler/parser.ts | 81 +++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f8c7b2b8d5a..bdf598f9b0a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4229,7 +4229,7 @@ module ts { else { // No parser errors were reported. Perform our stricted grammar checks. file._syntacticDiagnostics = []; - performGrammarChecks(sourceText, file); + checkGrammar(sourceText, file); } file._parserDiagnostics = undefined; @@ -4270,17 +4270,17 @@ module ts { return file; } - function performGrammarChecks(sourceText: string, file: SourceFileInternal) { + function checkGrammar(sourceText: string, file: SourceFileInternal) { var syntacticDiagnostics = file._syntacticDiagnostics; - performNodeChecks(file); + visitNode(file); - function performNodeChecks(node: Node): void { + function visitNode(node: Node): void { // First recurse and perform all grammar checks on the children of this node. If any // children had an grammar error, then skip reporting errors for this node or anything // higher. var diagnosticCount = syntacticDiagnostics.length; - forEachChild(node, performNodeChecks); + forEachChild(node, visitNode); if (diagnosticCount !== syntacticDiagnostics.length) { return; @@ -4288,91 +4288,98 @@ module ts { // No grammar errors on any of our children. Check this node for grammar errors. switch (node.kind) { - case SyntaxKind.ArrowFunction: return performArrowFunctionChecks(node); - case SyntaxKind.CallSignature: return performCallSignatureChecks(node); - case SyntaxKind.Constructor: return performConstructorChecks(node); - case SyntaxKind.ConstructorType: return performConstructorTypeChecks(node); - case SyntaxKind.ConstructSignature: return performConstructSignatureChecks(node); - case SyntaxKind.FunctionDeclaration: return performFunctionDeclarationChecks(node); - case SyntaxKind.FunctionExpression: return performFunctionExpressionChecks(node); - case SyntaxKind.FunctionType: return performFunctionTypeChecks(node); - case SyntaxKind.GetAccessor: return performGetAccessorChecks(node); - case SyntaxKind.IndexSignature: return performIndexSignatureChecks(node); - case SyntaxKind.Method: return performMethodChecks(node); - case SyntaxKind.Parameter: return performParameterChecks(node); - case SyntaxKind.SetAccessor: return performSetAccessorChecks(node); + case SyntaxKind.ArrowFunction: return visitArrowFunction(node); + case SyntaxKind.CallSignature: return visitCallSignature(node); + case SyntaxKind.Constructor: return visitConstructor(node); + case SyntaxKind.ConstructorType: return visitConstructorType(node); + case SyntaxKind.ConstructSignature: return visitConstructSignature(node); + case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); + case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); + case SyntaxKind.FunctionType: return visitFunctionType(node); + case SyntaxKind.GetAccessor: return visitGetAccessor(node); + case SyntaxKind.IndexSignature: return visitIndexSignature(node); + case SyntaxKind.Method: return visitMethod(node); + case SyntaxKind.Parameter: return visitParameter(node); + case SyntaxKind.SetAccessor: return visitSetAccessor(node); } } - function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { + function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { var span = getErrorSpanForNode(node); var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; var length = span.end - start; file._syntacticDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; } - function reportInvalidUseInStrictMode(node: Identifier): void { + function reportInvalidUseInStrictMode(node: Identifier): boolean { // declarationNameToString cannot be used here since it uses a backreference to 'parent' that is not yet set var name = sourceText.substring(skipTrivia(sourceText, node.pos), node.end); - grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); + return grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } - function performArrowFunctionChecks(node: FunctionExpression) { + function visitArrowFunction(node: FunctionExpression) { if (checkParameterList(node.parameters)) { return; } } - function performCallSignatureChecks(node: ConstructorDeclaration) { + function visitCallSignature(node: ConstructorDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performConstructorChecks(node: ConstructorDeclaration) { + function visitConstructor(node: ConstructorDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performConstructorTypeChecks(node: SignatureDeclaration) { + function visitConstructorType(node: SignatureDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performConstructSignatureChecks(node: FunctionLikeDeclaration) { + function visitConstructSignature(node: FunctionLikeDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performFunctionDeclarationChecks(node: FunctionLikeDeclaration) { + function visitFunctionDeclaration(node: FunctionLikeDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performFunctionExpressionChecks(node: FunctionExpression) { + function visitFunctionExpression(node: FunctionExpression) { if (checkParameterList(node.parameters)) { return; } } - function performFunctionTypeChecks(node: SignatureDeclaration) { + function visitFunctionType(node: SignatureDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performGetAccessorChecks(node: MethodDeclaration) { + function visitGetAccessor(node: MethodDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performIndexSignatureChecks(node: SignatureDeclaration): void { + function visitIndexSignature(node: SignatureDeclaration): void { + if (checkIndexSignatureParameters(node)) { + return; + } + } + + function checkIndexSignatureParameters(node: SignatureDeclaration): boolean { var parameter = node.parameters[0]; if (node.parameters.length !== 1) { if (parameter) { @@ -4397,8 +4404,7 @@ module ts { else if (!parameter.type) { return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - else if (parameter.type.kind !== SyntaxKind.StringKeyword && - parameter.type.kind !== SyntaxKind.NumberKeyword) { + else if (parameter.type.kind !== SyntaxKind.StringKeyword && parameter.type.kind !== SyntaxKind.NumberKeyword) { return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } else if (!node.type) { @@ -4406,20 +4412,21 @@ module ts { } } - function performMethodChecks(node: MethodDeclaration) { + function visitMethod(node: MethodDeclaration) { if (checkParameterList(node.parameters)) { return; } } - function performParameterChecks(node: ParameterDeclaration): void { + function visitParameter(node: ParameterDeclaration): void { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - return reportInvalidUseInStrictMode(node.name); + reportInvalidUseInStrictMode(node.name); + return; } } @@ -4462,7 +4469,7 @@ module ts { } } - function performSetAccessorChecks(node: MethodDeclaration) { + function visitSetAccessor(node: MethodDeclaration) { if (checkParameterList(node.parameters)) { return; } From 30ba527177aeec6f62ea1e2787b1c51b6b08548f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 21:29:07 -0800 Subject: [PATCH 057/178] Move accessor grammar errors to the grammar checker. --- src/compiler/parser.ts | 185 ++++++++---------- .../reference/complicatedPrivacy.errors.txt | 5 +- ...torWithIncompleteTypeAnnotation.errors.txt | 5 +- ...perCallsInNonConstructorMembers.errors.txt | 14 +- .../duplicateObjectLiteralProperty.errors.txt | 11 +- .../reference/errorSuperCalls.errors.txt | 20 +- tests/baselines/reference/giant.errors.txt | 56 +----- .../interfaceExtendingClass2.errors.txt | 5 +- .../parserErrantSemicolonInClass1.errors.txt | 14 +- .../twoAccessorsWithSameName.errors.txt | 32 +-- 10 files changed, 93 insertions(+), 254 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index bdf598f9b0a..7c3cfb2fa98 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2693,7 +2693,7 @@ module ts { var initialToken = token; if (parseContextualModifier(SyntaxKind.GetKeyword) || parseContextualModifier(SyntaxKind.SetKeyword)) { var kind = initialToken === SyntaxKind.GetKeyword ? SyntaxKind.GetAccessor : SyntaxKind.SetAccessor; - return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); + return parseMemberAccessorDeclaration(kind, initialPos, 0); } return parsePropertyAssignment(); } @@ -3520,50 +3520,6 @@ module ts { } } - function parseAndCheckMemberAccessorDeclaration(kind: SyntaxKind, pos: number, flags: NodeFlags): MethodDeclaration { - var errorCountBeforeAccessor = file._parserDiagnostics.length; - var accessor = parseMemberAccessorDeclaration(kind, pos, flags); - - if (errorCountBeforeAccessor === file._parserDiagnostics.length) { - if (languageVersion < ScriptTarget.ES5) { - grammarErrorOnNode(accessor.name, Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); - } - else if (inAmbientContext) { - grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); - } - else if (accessor.typeParameters) { - grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_have_type_parameters); - } - else if (kind === SyntaxKind.GetAccessor && accessor.parameters.length) { - grammarErrorOnNode(accessor.name, Diagnostics.A_get_accessor_cannot_have_parameters); - } - else if (kind === SyntaxKind.SetAccessor) { - if (accessor.type) { - grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); - } - else if (accessor.parameters.length !== 1) { - grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } - else { - var parameter = accessor.parameters[0]; - if (parameter.flags & NodeFlags.Rest) { - grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_rest_parameter); - } - else if (parameter.flags & NodeFlags.Modifier) { - grammarErrorOnNode(accessor.name, Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - else if (parameter.flags & NodeFlags.QuestionMark) { - grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); - } - else if (parameter.initializer) { - grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); - } - } - } - } - return accessor; - } - function parseMemberAccessorDeclaration(kind: SyntaxKind, pos: number, flags: NodeFlags): MethodDeclaration { var node = createNode(kind, pos); node.flags = flags; @@ -3791,10 +3747,10 @@ module ts { var pos = getNodePos(); var flags = parseAndCheckModifiers(ModifierContext.ClassMembers); if (parseContextualModifier(SyntaxKind.GetKeyword)) { - return parseAndCheckMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, flags); + return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, flags); } if (parseContextualModifier(SyntaxKind.SetKeyword)) { - return parseAndCheckMemberAccessorDeclaration(SyntaxKind.SetAccessor, pos, flags); + return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, pos, flags); } if (token === SyntaxKind.ConstructorKeyword) { return parseConstructorDeclaration(pos, flags); @@ -4229,7 +4185,7 @@ module ts { else { // No parser errors were reported. Perform our stricted grammar checks. file._syntacticDiagnostics = []; - checkGrammar(sourceText, file); + checkGrammar(sourceText, languageVersion, file); } file._parserDiagnostics = undefined; @@ -4270,22 +4226,34 @@ module ts { return file; } - function checkGrammar(sourceText: string, file: SourceFileInternal) { + function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { var syntacticDiagnostics = file._syntacticDiagnostics; + // We're automatically in an ambient context if this is a .d.ts file. + var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); + visitNode(file); function visitNode(node: Node): void { - // First recurse and perform all grammar checks on the children of this node. If any - // children had an grammar error, then skip reporting errors for this node or anything - // higher. + // First recurse and perform all grammar checks on the children of this node. + var savedInAmbientContext = inAmbientContext + if (node.flags & NodeFlags.Ambient) { + inAmbientContext = true; + } + var diagnosticCount = syntacticDiagnostics.length; forEachChild(node, visitNode); - if (diagnosticCount !== syntacticDiagnostics.length) { - return; + // If any children had an grammar error, then skip reporting errors for this node or + // anything higher. + if (diagnosticCount === syntacticDiagnostics.length) { + checkNode(node); } + inAmbientContext = savedInAmbientContext; + } + + function checkNode(node: Node) { // No grammar errors on any of our children. Check this node for grammar errors. switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); @@ -4320,63 +4288,44 @@ module ts { } function visitArrowFunction(node: FunctionExpression) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitCallSignature(node: ConstructorDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitConstructor(node: ConstructorDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitConstructorType(node: SignatureDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitConstructSignature(node: FunctionLikeDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitFunctionDeclaration(node: FunctionLikeDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitFunctionExpression(node: FunctionExpression) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitFunctionType(node: SignatureDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitGetAccessor(node: MethodDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters) || + checkAccessor(node); } function visitIndexSignature(node: SignatureDeclaration): void { - if (checkIndexSignatureParameters(node)) { - return; - } + checkIndexSignatureParameters(node); } function checkIndexSignatureParameters(node: SignatureDeclaration): boolean { @@ -4413,12 +4362,14 @@ module ts { } function visitMethod(node: MethodDeclaration) { - if (checkParameterList(node.parameters)) { - return; - } + checkParameterList(node.parameters); } function visitParameter(node: ParameterDeclaration): void { + checkParameterName(node); + } + + function checkParameterName(node: ParameterDeclaration): boolean { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code // or if its FunctionBody is strict code(11.1.5). @@ -4426,7 +4377,7 @@ module ts { // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { reportInvalidUseInStrictMode(node.name); - return; + return true; } } @@ -4438,45 +4389,77 @@ module ts { var parameter = parameters[i]; if (parameter.flags & NodeFlags.Rest) { if (i !== (parameterCount - 1)) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return true; + return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); } if (parameter.flags & NodeFlags.QuestionMark) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_be_optional); - return true; + return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_be_optional); } if (parameter.initializer) { - grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return true; + return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); } } else if (parameter.flags & NodeFlags.QuestionMark || parameter.initializer) { seenOptionalParameter = true; if (parameter.flags & NodeFlags.QuestionMark && parameter.initializer) { - grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return true; + return grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); } } else { if (seenOptionalParameter) { - grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return true; + return grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); } } } } function visitSetAccessor(node: MethodDeclaration) { - if (checkParameterList(node.parameters)) { - return; + checkParameterList(node.parameters) || + checkAccessor(node); + } + + function checkAccessor(accessor: MethodDeclaration): boolean { + var kind = accessor.kind; + if (languageVersion < ScriptTarget.ES5) { + return grammarErrorOnNode(accessor.name, Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); + } + else if (inAmbientContext) { + return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); + } + else if (accessor.typeParameters) { + return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_have_type_parameters); + } + else if (kind === SyntaxKind.GetAccessor && accessor.parameters.length) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_get_accessor_cannot_have_parameters); + } + else if (kind === SyntaxKind.SetAccessor) { + if (accessor.type) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + else if (accessor.parameters.length !== 1) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else { + var parameter = accessor.parameters[0]; + if (parameter.flags & NodeFlags.Rest) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + else if (parameter.flags & NodeFlags.Modifier) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + else if (parameter.flags & NodeFlags.QuestionMark) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + else if (parameter.initializer) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } } } } - export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { var program: Program; var files: SourceFile[] = []; diff --git a/tests/baselines/reference/complicatedPrivacy.errors.txt b/tests/baselines/reference/complicatedPrivacy.errors.txt index 404ee545716..fd47927f883 100644 --- a/tests/baselines/reference/complicatedPrivacy.errors.txt +++ b/tests/baselines/reference/complicatedPrivacy.errors.txt @@ -1,9 +1,8 @@ -tests/cases/compiler/complicatedPrivacy.ts(11,24): error TS1054: A 'get' accessor cannot have parameters. tests/cases/compiler/complicatedPrivacy.ts(24,38): error TS1005: ';' expected. tests/cases/compiler/complicatedPrivacy.ts(73,49): error TS2305: Module 'mglo5' has no exported member 'i6'. -==== tests/cases/compiler/complicatedPrivacy.ts (3 errors) ==== +==== tests/cases/compiler/complicatedPrivacy.ts (2 errors) ==== module m1 { export module m2 { @@ -15,8 +14,6 @@ tests/cases/compiler/complicatedPrivacy.ts(73,49): error TS2305: Module 'mglo5' export class C2 implements m3.i3 { public get p1(arg) { - ~~ -!!! error TS1054: A 'get' accessor cannot have parameters. return new C1(); } diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index 0e91d11b280..696f173e930 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -30,7 +30,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(159,30): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(205,28): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(218,10): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(218,36): error TS1005: ';' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(219,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(227,13): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(234,14): error TS1005: '{' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,9): error TS1128: Declaration or statement expected. @@ -95,7 +94,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2304: Cannot find name 'string'. -==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (95 errors) ==== +==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (94 errors) ==== declare module "fs" { export class File { constructor(filename: string); @@ -420,8 +419,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T ~~~~~ !!! error TS2304: Cannot find name 'yield'. public get Property() { return 0; } - ~~~~~~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. public Member() { return 0; } diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt index b58d5ad8ffe..ca589fb13ed 100644 --- a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt @@ -1,9 +1,5 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,8): error TS1110: Type expected. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(12,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(16,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,15): error TS1110: Type expected. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(24,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(28,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,8): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(10,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(13,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors @@ -14,7 +10,7 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(29,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors -==== tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts (14 errors) ==== +==== tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts (10 errors) ==== // error to use super calls outside a constructor class Base { @@ -33,16 +29,12 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors } get C() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors return 1; } set C(v) { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors @@ -59,16 +51,12 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors } static get C() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors return 1; } static set C(v) { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt index 4c3f6d1eb7e..05dfdc82404 100644 --- a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt +++ b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt @@ -1,6 +1,3 @@ -tests/cases/compiler/duplicateObjectLiteralProperty.ts(14,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -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'. @@ -13,7 +10,7 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(15,9): error TS2300: Dupl tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Duplicate identifier 'a'. -==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (13 errors) ==== +==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (10 errors) ==== var x = { a: 1, ~ @@ -41,18 +38,12 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Dupl var y = { get a() { return 0; }, ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'a'. set a(v: number) { }, ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'a'. get a() { return 0; } ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. diff --git a/tests/baselines/reference/errorSuperCalls.errors.txt b/tests/baselines/reference/errorSuperCalls.errors.txt index 4369b4b4ab2..82c0a4e8279 100644 --- a/tests/baselines/reference/errorSuperCalls.errors.txt +++ b/tests/baselines/reference/errorSuperCalls.errors.txt @@ -1,10 +1,4 @@ -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(13,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(17,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(33,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(37,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(46,14): error TS1034: 'super' must be followed by an argument list or member access. -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(66,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(70,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(4,9): error TS2335: 'super' can only be referenced in a derived class. tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(9,9): error TS2335: 'super' can only be referenced in a derived class. tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(14,9): error TS2335: 'super' can only be referenced in a derived class. @@ -20,7 +14,7 @@ tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(67,9): error T tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(71,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors -==== tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts (20 errors) ==== +==== tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts (14 errors) ==== //super call in class constructor with no base type class NoBase { constructor() { @@ -38,16 +32,12 @@ tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(71,9): error T //super call in class accessor (get and set) with no base type get foo() { - ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2335: 'super' can only be referenced in a derived class. return null; } set foo(v) { - ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2335: 'super' can only be referenced in a derived class. @@ -72,16 +62,12 @@ tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(71,9): error T //super call in static class accessor (get and set) with no base type static get q() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2335: 'super' can only be referenced in a derived class. return null; } static set q(n) { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2335: 'super' can only be referenced in a derived class. @@ -119,16 +105,12 @@ tests/cases/conformance/expressions/superCalls/errorSuperCalls.ts(71,9): error T //super call in class accessor (get and set) of derived type get foo() { - ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors return null; } set foo(n) { - ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. super(); ~~~~~ !!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index a57c0a42c15..0aa14ee0cd3 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -23,18 +23,12 @@ tests/cases/compiler/giant.ts(240,24): error TS1111: A constructor implementatio tests/cases/compiler/giant.ts(243,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(244,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(245,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(246,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(247,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(248,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(249,23): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(250,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(251,32): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(252,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(254,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(255,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(256,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(257,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(258,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(262,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(262,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(267,30): error TS1037: A function implementation cannot be declared in an ambient context. @@ -64,18 +58,12 @@ tests/cases/compiler/giant.ts(498,24): error TS1111: A constructor implementatio tests/cases/compiler/giant.ts(501,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(502,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(503,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(504,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(505,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(506,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(507,23): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(508,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(509,32): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(510,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(512,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(513,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(514,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(515,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(516,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(520,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(520,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(525,30): error TS1037: A function implementation cannot be declared in an ambient context. @@ -85,18 +73,12 @@ tests/cases/compiler/giant.ts(534,20): error TS1111: A constructor implementatio tests/cases/compiler/giant.ts(537,17): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(538,18): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(539,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(540,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(541,27): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(542,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(543,19): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(544,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(545,28): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(546,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(548,17): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(549,27): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(550,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(551,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(552,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(556,18): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(556,21): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(558,24): error TS1111: A constructor implementation cannot be declared in an ambient context. @@ -257,7 +239,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (257 errors) ==== +==== tests/cases/compiler/giant.ts (239 errors) ==== /* Prefixes @@ -653,8 +635,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -663,8 +643,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -673,8 +651,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -683,8 +659,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -697,8 +671,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -707,8 +679,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -1113,8 +1083,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -1123,8 +1091,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -1133,8 +1099,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -1143,8 +1107,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1157,8 +1119,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -1167,8 +1127,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -1215,8 +1173,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -1225,8 +1181,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -1235,8 +1189,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -1245,8 +1197,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1259,8 +1209,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -1269,8 +1217,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { diff --git a/tests/baselines/reference/interfaceExtendingClass2.errors.txt b/tests/baselines/reference/interfaceExtendingClass2.errors.txt index bff97f4c088..83cd97c72c0 100644 --- a/tests/baselines/reference/interfaceExtendingClass2.errors.txt +++ b/tests/baselines/reference/interfaceExtendingClass2.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(4,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(13,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(13,13): error TS1131: Property or signature expected. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(14,9): error TS1128: Declaration or statement expected. @@ -6,13 +5,11 @@ tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtending tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(11,5): error TS2411: Property 'a' of type '{ toString: () => {}; }' is not assignable to string index type 'Object'. -==== tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts (6 errors) ==== +==== tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts (5 errors) ==== class Foo { x: string; y() { } get Z() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return 1; } [x: string]: Object; diff --git a/tests/baselines/reference/parserErrantSemicolonInClass1.errors.txt b/tests/baselines/reference/parserErrantSemicolonInClass1.errors.txt index cdbb4dbe9b8..7e71ec8fc61 100644 --- a/tests/baselines/reference/parserErrantSemicolonInClass1.errors.txt +++ b/tests/baselines/reference/parserErrantSemicolonInClass1.errors.txt @@ -1,11 +1,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts(9,21): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts(15,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts(18,23): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts(24,24): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts (5 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonInClass1.ts (1 errors) ==== class a { //constructor (); constructor (n: number); @@ -20,26 +16,18 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserErrantSemicolonIn public pv; public get d() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return 30; } public set d() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. } public static get p2() { - ~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return { x: 30, y: 40 }; } private static d2() { } private static get p3() { - ~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return "string"; } private pv3; diff --git a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt index 81da707c566..73261bfa072 100644 --- a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt +++ b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt @@ -1,14 +1,4 @@ -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(3,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(7,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(12,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(15,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(19,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. 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'. @@ -17,49 +7,35 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,9): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (17 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (7 errors) ==== class C { get x() { return 1; } ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'x'. get x() { return 1; } // error ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'x'. } class D { set x(v) { } ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'x'. set x(v) { } // error ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'x'. } class E { get x() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return 1; } set x(v) { } - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. } var x = { get x() { ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS2300: Duplicate identifier 'x'. return 1; }, @@ -67,8 +43,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN // error get x() { ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. ~ !!! error TS2300: Duplicate identifier 'x'. @@ -78,11 +52,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN var y = { get x() { - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return 1; }, set x(v) { } - ~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. } \ No newline at end of file From 0e6aab7c425c67ae59751f0fec126c955c83f961 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 21:41:07 -0800 Subject: [PATCH 058/178] Move object literal checks to the grammar checker. --- src/compiler/parser.ts | 128 +++++++++--------- .../reference/objectLiteralErrors.errors.txt | 56 +------- .../duplicateObjectLiteralProperty.ts | 1 + .../twoAccessorsWithSameName.ts | 1 + 4 files changed, 69 insertions(+), 117 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7c3cfb2fa98..c40178ac7c0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2707,68 +2707,6 @@ module ts { node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, /*allowTrailingComma*/ true); parseExpected(SyntaxKind.CloseBraceToken); - - var seen: Map = {}; - var Property = 1; - var GetAccessor = 2; - var SetAccesor = 4; - var GetOrSetAccessor = GetAccessor | SetAccesor; - forEach(node.properties, (p: Declaration) => { - // TODO(jfreeman): continue if we have a computed property - if (p.kind === SyntaxKind.OmittedExpression) { - return; - } - - var name = p.name; - - // ECMA-262 11.1.5 Object Initialiser - // If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true - // a.This production is contained in strict code and IsDataDescriptor(previous) is true and - // IsDataDescriptor(propId.descriptor) is true. - // b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true. - // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. - // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true - // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields - var currentKind: number; - if (p.kind === SyntaxKind.PropertyAssignment) { - currentKind = Property; - } - else if (p.kind === SyntaxKind.ShorthandPropertyAssignment) { - currentKind = Property; - } - else if (p.kind === SyntaxKind.GetAccessor) { - currentKind = GetAccessor; - } - else if (p.kind === SyntaxKind.SetAccessor) { - currentKind = SetAccesor; - } - else { - Debug.fail("Unexpected syntax kind:" + p.kind); - } - - if (!hasProperty(seen, name.text)) { - seen[name.text] = currentKind; - } - else { - var existingKind = seen[name.text]; - if (currentKind === Property && existingKind === Property) { - if (isInStrictMode) { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); - } - } - else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { - if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { - seen[name.text] = currentKind | existingKind; - } - else { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); - } - } - else { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); - } - } - }); return finishNode(node); } @@ -4267,6 +4205,7 @@ module ts { case SyntaxKind.GetAccessor: return visitGetAccessor(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); case SyntaxKind.Method: return visitMethod(node); + case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); } @@ -4365,6 +4304,71 @@ module ts { checkParameterList(node.parameters); } + function visitObjectLiteral(node: ObjectLiteral): void { + var seen: Map = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccesor = 4; + var GetOrSetAccessor = GetAccessor | SetAccesor; + var inStrictMode = (node.flags & NodeFlags.ParsedInStrictMode) !== 0; + forEach(node.properties, (p: Declaration) => { + // TODO(jfreeman): continue if we have a computed property + if (p.kind === SyntaxKind.OmittedExpression) { + return; + } + + var name = p.name; + + // ECMA-262 11.1.5 Object Initialiser + // If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true + // a.This production is contained in strict code and IsDataDescriptor(previous) is true and + // IsDataDescriptor(propId.descriptor) is true. + // b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true. + // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. + // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true + // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields + var currentKind: number; + if (p.kind === SyntaxKind.PropertyAssignment) { + currentKind = Property; + } + else if (p.kind === SyntaxKind.ShorthandPropertyAssignment) { + currentKind = Property; + } + else if (p.kind === SyntaxKind.GetAccessor) { + currentKind = GetAccessor; + } + else if (p.kind === SyntaxKind.SetAccessor) { + currentKind = SetAccesor; + } + else { + Debug.fail("Unexpected syntax kind:" + p.kind); + } + + if (!hasProperty(seen, name.text)) { + seen[name.text] = currentKind; + } + else { + var existingKind = seen[name.text]; + if (currentKind === Property && existingKind === Property) { + if (inStrictMode) { + grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); + } + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[name.text] = currentKind | existingKind; + } + else { + grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + } + } + else { + grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + }); + } + function visitParameter(node: ParameterDeclaration): void { checkParameterName(node); } diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index 91b9aaeecdc..8a1774c4525 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -1,23 +1,5 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(17,19): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,22): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,23): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,22): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,25): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,23): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,22): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,24): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,24): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,24): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,25): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1119: An object literal cannot have property and accessor with the same name. -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'. @@ -97,7 +79,7 @@ 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 (97 errors) ==== +==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (79 errors) ==== // Multiple properties with the same name var e1 = { a: 0, a: 0 }; @@ -195,99 +177,71 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) // Accessor and property with the same name var f1 = { a: 0, get a() { return 0; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f2 = { a: '', get a() { return ''; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f3 = { a: 0, get a() { return ''; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f4 = { a: true, get a() { return false; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f5 = { a: {}, get a() { return {}; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f6 = { a: 0, get 'a'() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f7 = { 'a': 0, get a() { return 0; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~ !!! error TS2300: Duplicate identifier 'a'. var f8 = { 'a': 0, get "a"() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~~~ !!! error TS2300: Duplicate identifier '"a"'. var f9 = { 'a': 0, get 'a'() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f10 = { "a": 0, get 'a'() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '"a"'. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f11 = { 1.0: 0, get '1'() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '1.0'. ~~~ !!! error TS2300: Duplicate identifier ''1''. var f12 = { 0: 0, get 0() { return 0; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~ !!! error TS2300: Duplicate identifier '0'. var f13 = { 0: 0, get 0() { return 0; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~ !!! error TS2300: Duplicate identifier '0'. var f14 = { 0: 0, get 0x0() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~~~ @@ -295,29 +249,21 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) var f14 = { 0: 0, get 000() { return 0; } }; ~~~ !!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~~~ !!! error TS2300: Duplicate identifier '000'. var f15 = { "100": 0, get 1e2() { return 0; } }; - ~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~~~ !!! error TS2300: Duplicate identifier '"100"'. ~~~ !!! error TS2300: Duplicate identifier '1e2'. var f16 = { 0x20: 0, get 3.2e1() { return 0; } }; - ~~~~~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~~ !!! error TS2300: Duplicate identifier '0x20'. ~~~~~ !!! error TS2300: Duplicate identifier '3.2e1'. var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } }; - ~ -!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ diff --git a/tests/cases/compiler/duplicateObjectLiteralProperty.ts b/tests/cases/compiler/duplicateObjectLiteralProperty.ts index 1ceb9c3c5dd..2591e6dd78a 100644 --- a/tests/cases/compiler/duplicateObjectLiteralProperty.ts +++ b/tests/cases/compiler/duplicateObjectLiteralProperty.ts @@ -1,3 +1,4 @@ +// @target: ES5 var x = { a: 1, b: true, // OK diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts index 2d802f244d0..5c098643712 100644 --- a/tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts @@ -1,3 +1,4 @@ +// @target: ES5 class C { get x() { return 1; } get x() { return 1; } // error From 68a3bd8fbc90687441f280fc9222db7862f9ba51 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 21:52:22 -0800 Subject: [PATCH 059/178] Move template version checks to the grammar walk. --- src/compiler/parser.ts | 40 ++++++++++--------- ...tringsWithIncompatibleTypedTags.errors.txt | 11 +---- ...mplateStringsWithTagsTypedAsAny.errors.txt | 8 +--- ...gedTemplateStringsWithTypedTags.errors.txt | 8 +--- .../templateStringInModuleName.errors.txt | 8 +--- .../templateStringInObjectLiteral.errors.txt | 7 +--- .../templateStringInPropertyName1.errors.txt | 6 +-- .../templateStringInPropertyName2.errors.txt | 6 +-- .../templateStringInYieldKeyword.errors.txt | 5 +-- ...eStringWithEmbeddedYieldKeyword.errors.txt | 7 +--- 10 files changed, 30 insertions(+), 76 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index c40178ac7c0..4e9f9488111 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2526,11 +2526,6 @@ module ts { ? parseLiteralNode() : parseTemplateExpression(); expr = finishNode(tagExpression); - - if (languageVersion < ScriptTarget.ES6) { - grammarErrorOnNode(expr, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - continue; } @@ -4194,20 +4189,21 @@ module ts { function checkNode(node: Node) { // No grammar errors on any of our children. Check this node for grammar errors. switch (node.kind) { - case SyntaxKind.ArrowFunction: return visitArrowFunction(node); - case SyntaxKind.CallSignature: return visitCallSignature(node); - case SyntaxKind.Constructor: return visitConstructor(node); - case SyntaxKind.ConstructorType: return visitConstructorType(node); - case SyntaxKind.ConstructSignature: return visitConstructSignature(node); - case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); - case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); - case SyntaxKind.FunctionType: return visitFunctionType(node); - case SyntaxKind.GetAccessor: return visitGetAccessor(node); - case SyntaxKind.IndexSignature: return visitIndexSignature(node); - case SyntaxKind.Method: return visitMethod(node); - case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); - case SyntaxKind.Parameter: return visitParameter(node); - case SyntaxKind.SetAccessor: return visitSetAccessor(node); + case SyntaxKind.ArrowFunction: return visitArrowFunction(node); + case SyntaxKind.CallSignature: return visitCallSignature(node); + case SyntaxKind.Constructor: return visitConstructor(node); + case SyntaxKind.ConstructorType: return visitConstructorType(node); + case SyntaxKind.ConstructSignature: return visitConstructSignature(node); + case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); + case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); + case SyntaxKind.FunctionType: return visitFunctionType(node); + case SyntaxKind.GetAccessor: return visitGetAccessor(node); + case SyntaxKind.IndexSignature: return visitIndexSignature(node); + case SyntaxKind.Method: return visitMethod(node); + case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); + case SyntaxKind.Parameter: return visitParameter(node); + case SyntaxKind.SetAccessor: return visitSetAccessor(node); + case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); } } @@ -4462,6 +4458,12 @@ module ts { } } } + + function visitTaggedTemplateExpression(node: TaggedTemplateExpression) { + if (languageVersion < ScriptTarget.ES6) { + grammarErrorOnNode(node, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } } export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt index cf915f36dd8..7dedca9eb32 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt @@ -5,10 +5,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(20,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(14,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. @@ -18,7 +15,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,57): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. -==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts (18 errors) ==== +==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts (15 errors) ==== interface I { (stringParts: string[], ...rest: boolean[]): I; g: I; @@ -62,24 +59,18 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped f `abc`[0].member `abc${1}def${2}ghi`; ~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${ true }def${ true }ghi`["member"].member `abc${ 1 }def${ 2 }ghi`; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. diff --git a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt index a15e0cbb49b..8a334a5611b 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt @@ -7,12 +7,10 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(15,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(17,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts (12 errors) ==== +==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts (10 errors) ==== var f: any; f `abc` @@ -50,14 +48,10 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts f `abc`["member"].someOtherTag `abc${1}def${2}ghi`; ~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].someOtherTag `abc${1}def${2}ghi`; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt index 0e4f7a63223..41f3492317f 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt @@ -5,12 +5,10 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(18,1 tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(20,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(22,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts (10 errors) ==== +==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts (8 errors) ==== interface I { (stringParts: string[], ...rest: number[]): I; g: I; @@ -49,14 +47,10 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,1 f `abc`[0].member `abc${1}def${2}ghi`; ~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; ~~~~~~~~~~~~~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); diff --git a/tests/baselines/reference/templateStringInModuleName.errors.txt b/tests/baselines/reference/templateStringInModuleName.errors.txt index fb6188d9d9a..858bd893164 100644 --- a/tests/baselines/reference/templateStringInModuleName.errors.txt +++ b/tests/baselines/reference/templateStringInModuleName.errors.txt @@ -1,8 +1,6 @@ tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,21): error TS1005: ';' expected. tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,24): error TS1005: ';' expected. tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,1): error TS2304: Cannot find name 'declare'. tests/cases/conformance/es6/templates/templateStringInModuleName.ts(1,9): error TS2304: Cannot find name 'module'. @@ -10,12 +8,10 @@ tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,1): error tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error TS2304: Cannot find name 'module'. -==== tests/cases/conformance/es6/templates/templateStringInModuleName.ts (10 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringInModuleName.ts (8 errors) ==== declare module `M1` { ~~~~~~ !!! error TS1005: ';' expected. - ~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS1005: ';' expected. ~~~~~~~ @@ -27,8 +23,6 @@ tests/cases/conformance/es6/templates/templateStringInModuleName.ts(4,9): error declare module `M${2}` { ~~~~~~ !!! error TS1005: ';' expected. - ~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS1005: ';' expected. ~~~~~~~ diff --git a/tests/baselines/reference/templateStringInObjectLiteral.errors.txt b/tests/baselines/reference/templateStringInObjectLiteral.errors.txt index b510e46ba6a..5406914163e 100644 --- a/tests/baselines/reference/templateStringInObjectLiteral.errors.txt +++ b/tests/baselines/reference/templateStringInObjectLiteral.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(1,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(3,5): error TS1136: Property assignment expected. tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(3,8): error TS1005: ',' expected. tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(3,10): error TS1134: Variable declaration expected. @@ -6,16 +5,12 @@ tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(4,1): err tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts(1,9): error TS2349: Cannot invoke an expression whose type lacks a call signature. -==== tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts (6 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringInObjectLiteral.ts (5 errors) ==== var x = { ~ - ~ a: `abc${ 123 }def`, - ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ `b`: 321 - ~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~ !!! error TS1136: Property assignment expected. ~ diff --git a/tests/baselines/reference/templateStringInPropertyName1.errors.txt b/tests/baselines/reference/templateStringInPropertyName1.errors.txt index c0b89e02d68..04f53976e65 100644 --- a/tests/baselines/reference/templateStringInPropertyName1.errors.txt +++ b/tests/baselines/reference/templateStringInPropertyName1.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(1,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(2,5): error TS1136: Property assignment expected. tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(2,8): error TS1005: ',' expected. tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(2,10): error TS1134: Variable declaration expected. @@ -6,13 +5,10 @@ tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(3,1): err tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts(1,9): error TS2349: Cannot invoke an expression whose type lacks a call signature. -==== tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts (6 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringInPropertyName1.ts (5 errors) ==== var x = { ~ - ~ `a`: 321 - ~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~ !!! error TS1136: Property assignment expected. ~ diff --git a/tests/baselines/reference/templateStringInPropertyName2.errors.txt b/tests/baselines/reference/templateStringInPropertyName2.errors.txt index d9302d25fa9..7faa04c3240 100644 --- a/tests/baselines/reference/templateStringInPropertyName2.errors.txt +++ b/tests/baselines/reference/templateStringInPropertyName2.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(1,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(2,5): error TS1136: Property assignment expected. tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(2,32): error TS1005: ',' expected. tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(2,34): error TS1134: Variable declaration expected. @@ -6,13 +5,10 @@ tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(3,1): err tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts(1,9): error TS2349: Cannot invoke an expression whose type lacks a call signature. -==== tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts (6 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringInPropertyName2.ts (5 errors) ==== var x = { ~ - ~ `abc${ 123 }def${ 456 }ghi`: 321 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~ !!! error TS1136: Property assignment expected. ~ diff --git a/tests/baselines/reference/templateStringInYieldKeyword.errors.txt b/tests/baselines/reference/templateStringInYieldKeyword.errors.txt index b70af797c5c..50b780ad3cb 100644 --- a/tests/baselines/reference/templateStringInYieldKeyword.errors.txt +++ b/tests/baselines/reference/templateStringInYieldKeyword.errors.txt @@ -1,11 +1,10 @@ tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,9): error TS1003: Identifier expected. tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,15): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(3,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,11): error TS2304: Cannot find name 'gen'. tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(3,13): error TS2304: Cannot find name 'yield'. -==== tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts (5 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts (4 errors) ==== function* gen { ~ !!! error TS1003: Identifier expected. @@ -15,8 +14,6 @@ tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(3,13): err !!! error TS2304: Cannot find name 'gen'. // Once this is supported, the inner expression does not need to be parenthesized. var x = yield `abc${ x }def`; - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~ !!! error TS2304: Cannot find name 'yield'. } diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt index 3cada665186..3bf910f3690 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt @@ -1,14 +1,13 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,9): error TS1003: Identifier expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,15): error TS1005: ';' expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,26): error TS1158: Invalid template literal; expected '}' -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,30): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(5,1): error TS1160: Unterminated template literal. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,11): error TS2304: Cannot find name 'gen'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,20): error TS2304: Cannot find name 'yield'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,30): error TS2304: Cannot find name 'def'. -==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts (8 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts (7 errors) ==== function* gen { ~ !!! error TS1003: Identifier expected. @@ -20,15 +19,11 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts( var x = `abc${ yield 10 }def`; ~~ !!! error TS1158: Invalid template literal; expected '}' - ~~~~~ ~~~~~ !!! error TS2304: Cannot find name 'yield'. ~~~ !!! error TS2304: Cannot find name 'def'. } - ~ -!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. - !!! error TS1160: Unterminated template literal. \ No newline at end of file From e5c3661e304ad75eb54178bc162b049bed36936a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 22:03:07 -0800 Subject: [PATCH 060/178] Move postfix/prefix checks to the grammar check. --- src/compiler/parser.ts | 49 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4e9f9488111..302635aaff9 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2373,21 +2373,7 @@ module ts { case SyntaxKind.MinusMinusToken: var operator = token; nextToken(); - var operand = parseUnaryExpression(); - if (isInStrictMode) { - // The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression - // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator - if ((operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken) && isEvalOrArgumentsIdentifier(operand)) { - reportInvalidUseInStrictMode(operand); - } - else if (operator === SyntaxKind.DeleteKeyword && operand.kind === SyntaxKind.Identifier) { - // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its - // UnaryExpression is a direct reference to a variable, function argument, or function name - grammarErrorOnNode(operand, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); - } - } - return makeUnaryExpression(SyntaxKind.PrefixOperator, pos, operator, operand); + return makeUnaryExpression(SyntaxKind.PrefixOperator, pos, operator, parseUnaryExpression()); case SyntaxKind.LessThanToken: return parseTypeAssertion(); } @@ -2408,12 +2394,6 @@ module ts { Debug.assert(isLeftHandSideExpression(expr)); if ((token === SyntaxKind.PlusPlusToken || token === SyntaxKind.MinusMinusToken) && !scanner.hasPrecedingLineBreak()) { - // The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression - // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } var operator = token; nextToken(); expr = makeUnaryExpression(SyntaxKind.PostfixOperator, expr.pos, operator, expr); @@ -4202,6 +4182,8 @@ module ts { case SyntaxKind.Method: return visitMethod(node); case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); case SyntaxKind.Parameter: return visitParameter(node); + case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); + case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); } @@ -4415,6 +4397,31 @@ module ts { } } + function visitPostfixOperator(node: UnaryExpression) { + // The identifier eval or arguments may not appear as the LeftHandSideExpression of an + // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression + // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. + if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.operand)) { + reportInvalidUseInStrictMode(node.operand); + } + } + + function visitPrefixOperator(node: UnaryExpression) { + if (node.flags & NodeFlags.ParsedInStrictMode) { + // The identifier eval or arguments may not appear as the LeftHandSideExpression of an + // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression + // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator + if ((node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken) && isEvalOrArgumentsIdentifier(node.operand)) { + reportInvalidUseInStrictMode(node.operand); + } + else if (node.operator === SyntaxKind.DeleteKeyword && node.operand.kind === SyntaxKind.Identifier) { + // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its + // UnaryExpression is a direct reference to a variable, function argument, or function name + grammarErrorOnNode(node.operand, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + } + } + } + function visitSetAccessor(node: MethodDeclaration) { checkParameterList(node.parameters) || checkAccessor(node); From 78af519f5fa6dd912d67337e6f92f95ced7c5369 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 22:18:21 -0800 Subject: [PATCH 061/178] Move enum checks to the grammar checker. --- src/compiler/parser.ts | 92 ++++++++++--------- .../reference/ambientEnum1.errors.txt | 17 ++++ .../reference/ambientErrors.errors.txt | 8 +- tests/cases/compiler/ambientEnum1.ts | 8 ++ 4 files changed, 76 insertions(+), 49 deletions(-) create mode 100644 tests/baselines/reference/ambientEnum1.errors.txt create mode 100644 tests/cases/compiler/ambientEnum1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 302635aaff9..6ce63e1a4da 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3750,55 +3750,15 @@ module ts { function parseAndCheckEnumDeclaration(pos: number, flags: NodeFlags): EnumDeclaration { var enumIsConst = flags & NodeFlags.Const; - function isIntegerLiteral(expression: Expression): boolean { - function isInteger(literalExpression: LiteralExpression): boolean { - // Allows for scientific notation since literalExpression.text was formed by - // coercing a number to a string. Sometimes this coercion can yield a string - // in scientific notation. - // We also don't need special logic for hex because a hex integer is converted - // to decimal when it is coerced. - return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); - } - if (expression.kind === SyntaxKind.PrefixOperator) { - var unaryExpression = expression; - if (unaryExpression.operator === SyntaxKind.PlusToken || unaryExpression.operator === SyntaxKind.MinusToken) { - expression = unaryExpression.operand; - } - } - if (expression.kind === SyntaxKind.NumericLiteral) { - return isInteger(expression); - } - - return false; - } - - var inConstantEnumMemberSection = true; // In an ambient declaration, the grammar only allows integer literals as initializers. // In a non-ambient declaration, the grammar allows uninitialized members only in a // ConstantEnumMemberSection, which starts at the beginning of an enum declaration // or any time an integer literal initializer is encountered. - function parseAndCheckEnumMember(): EnumMember { + function parseEnumMember(): EnumMember { var node = createNode(SyntaxKind.EnumMember); - var errorCountBeforeEnumMember = file._parserDiagnostics.length; node.name = parsePropertyName(); node.initializer = parseInitializer(/*inParameter*/ false); - - // skip checks below for const enums - they allow arbitrary initializers as long as they can be evaluated to constant expressions. - // since all values are known in compile time - it is not necessary to check that constant enum section precedes computed enum members. - if (!enumIsConst) { - if (inAmbientContext) { - if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file._parserDiagnostics.length) { - grammarErrorOnNode(node.name, Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); - } - } - else if (node.initializer) { - inConstantEnumMemberSection = isIntegerLiteral(node.initializer); - } - else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file._parserDiagnostics.length) { - grammarErrorOnNode(node.name, Diagnostics.Enum_member_must_have_initializer); - } - } return finishNode(node); } @@ -3811,7 +3771,7 @@ module ts { node.name = parseIdentifier(); if (parseExpected(SyntaxKind.OpenBraceToken)) { node.members = parseDelimitedList(ParsingContext.EnumMembers, - parseAndCheckEnumMember, /*allowTrailingComma*/ true); + parseEnumMember, /*allowTrailingComma*/ true); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -4174,6 +4134,7 @@ module ts { case SyntaxKind.Constructor: return visitConstructor(node); case SyntaxKind.ConstructorType: return visitConstructorType(node); case SyntaxKind.ConstructSignature: return visitConstructSignature(node); + case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); case SyntaxKind.FunctionType: return visitFunctionType(node); @@ -4224,6 +4185,53 @@ module ts { checkParameterList(node.parameters); } + function visitEnumDeclaration(enumDecl: EnumDeclaration) { + var enumIsConst = (enumDecl.flags & NodeFlags.Const) !== 0; + + // skip checks below for const enums - they allow arbitrary initializers as long as they can be evaluated to constant expressions. + // since all values are known in compile time - it is not necessary to check that constant enum section precedes computed enum members. + if (!enumIsConst) { + var inConstantEnumMemberSection = true; + for (var i = 0, n = enumDecl.members.length; i < n; i++) { + var node = enumDecl.members[i]; + if (inAmbientContext) { + if (node.initializer && !isIntegerLiteral(node.initializer)) { + grammarErrorOnNode(node.name, Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); + } + } + else if (node.initializer) { + inConstantEnumMemberSection = isIntegerLiteral(node.initializer); + } + else if (!inConstantEnumMemberSection) { + grammarErrorOnNode(node.name, Diagnostics.Enum_member_must_have_initializer); + } + } + } + } + + function isIntegerLiteral(expression: Expression): boolean { + function isInteger(literalExpression: LiteralExpression): boolean { + // Allows for scientific notation since literalExpression.text was formed by + // coercing a number to a string. Sometimes this coercion can yield a string + // in scientific notation. + // We also don't need special logic for hex because a hex integer is converted + // to decimal when it is coerced. + return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); + } + + if (expression.kind === SyntaxKind.PrefixOperator) { + var unaryExpression = expression; + if (unaryExpression.operator === SyntaxKind.PlusToken || unaryExpression.operator === SyntaxKind.MinusToken) { + expression = unaryExpression.operand; + } + } + if (expression.kind === SyntaxKind.NumericLiteral) { + return isInteger(expression); + } + + return false; + } + function visitFunctionDeclaration(node: FunctionLikeDeclaration) { checkParameterList(node.parameters); } diff --git a/tests/baselines/reference/ambientEnum1.errors.txt b/tests/baselines/reference/ambientEnum1.errors.txt new file mode 100644 index 00000000000..b4bb534f5dd --- /dev/null +++ b/tests/baselines/reference/ambientEnum1.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/ambientEnum1.ts(2,9): error TS1066: Ambient enum elements can only have integer literal initializers. +tests/cases/compiler/ambientEnum1.ts(7,9): error TS1066: Ambient enum elements can only have integer literal initializers. + + +==== tests/cases/compiler/ambientEnum1.ts (2 errors) ==== + declare enum E1 { + y = 4.23 + ~ +!!! error TS1066: Ambient enum elements can only have integer literal initializers. + } + + // Ambient enum with computer member + declare enum E2 { + x = 'foo'.length + ~ +!!! error TS1066: Ambient enum elements can only have integer literal initializers. + } \ No newline at end of file diff --git a/tests/baselines/reference/ambientErrors.errors.txt b/tests/baselines/reference/ambientErrors.errors.txt index 975dc9ad63a..618829c8bd9 100644 --- a/tests/baselines/reference/ambientErrors.errors.txt +++ b/tests/baselines/reference/ambientErrors.errors.txt @@ -1,7 +1,5 @@ tests/cases/conformance/ambient/ambientErrors.ts(2,15): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/ambient/ambientErrors.ts(24,5): error TS1066: Ambient enum elements can only have integer literal initializers. -tests/cases/conformance/ambient/ambientErrors.ts(29,5): error TS1066: Ambient enum elements can only have integer literal initializers. tests/cases/conformance/ambient/ambientErrors.ts(34,11): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/ambient/ambientErrors.ts(37,18): error TS1039: Initializers are not allowed in ambient contexts. @@ -16,7 +14,7 @@ tests/cases/conformance/ambient/ambientErrors.ts(51,16): error TS2436: Ambient e tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export assignment cannot be used in a module with other exported elements. -==== tests/cases/conformance/ambient/ambientErrors.ts (16 errors) ==== +==== tests/cases/conformance/ambient/ambientErrors.ts (14 errors) ==== // Ambient variable with an initializer declare var x = 4; ~ @@ -49,15 +47,11 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export // Ambient enum with non - integer literal constant member declare enum E1 { y = 4.23 - ~ -!!! error TS1066: Ambient enum elements can only have integer literal initializers. } // Ambient enum with computer member declare enum E2 { x = 'foo'.length - ~ -!!! error TS1066: Ambient enum elements can only have integer literal initializers. } // Ambient module with initializers for values, bodies for functions / classes diff --git a/tests/cases/compiler/ambientEnum1.ts b/tests/cases/compiler/ambientEnum1.ts new file mode 100644 index 00000000000..05b0cdd3a47 --- /dev/null +++ b/tests/cases/compiler/ambientEnum1.ts @@ -0,0 +1,8 @@ + declare enum E1 { + y = 4.23 + } + + // Ambient enum with computer member + declare enum E2 { + x = 'foo'.length + } \ No newline at end of file From 5a7929aec7451fe255535f6234bd63a396cee6ed Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 22:37:31 -0800 Subject: [PATCH 062/178] Move variable grammar checks to the grammar checker. --- src/compiler/parser.ts | 34 ++++++++++++------- .../reference/ambientErrors.errors.txt | 8 +---- .../reference/ambientErrors1.errors.txt | 7 ++++ .../initializersInDeclarations.errors.txt | 11 +----- .../missingRequiredDeclare.d.errors.txt | 7 ++-- .../parserVariableStatement1.d.errors.txt | 7 ++-- tests/cases/compiler/ambientErrors1.ts | 1 + 7 files changed, 35 insertions(+), 40 deletions(-) create mode 100644 tests/baselines/reference/ambientErrors1.errors.txt create mode 100644 tests/cases/compiler/ambientErrors1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6ce63e1a4da..1cc5e09d680 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1005,7 +1005,6 @@ module ts { grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } - function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } @@ -3292,7 +3291,6 @@ module ts { function parseVariableDeclaration(flags: NodeFlags, noIn?: boolean): VariableDeclaration { var node = createNode(SyntaxKind.VariableDeclaration); node.flags = flags; - var errorCountBeforeVariableDeclaration = file._parserDiagnostics.length; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); @@ -3301,17 +3299,6 @@ module ts { var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; node.initializer = parseInitializer(/*inParameter*/ false, noIn); - if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file._parserDiagnostics.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } - if (!inAmbientContext && !node.initializer && flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code - // and its Identifier is eval or arguments - reportInvalidUseInStrictMode(node.name); - } return finishNode(node); } @@ -4147,6 +4134,7 @@ module ts { case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); + case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); } } @@ -4159,6 +4147,11 @@ module ts { return true; } + function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { + file._syntacticDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; + } + function reportInvalidUseInStrictMode(node: Identifier): boolean { // declarationNameToString cannot be used here since it uses a backreference to 'parent' that is not yet set var name = sourceText.substring(skipTrivia(sourceText, node.pos), node.end); @@ -4479,6 +4472,21 @@ module ts { grammarErrorOnNode(node, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); } } + + function visitVariableDeclaration(node: VariableDeclaration) { + if (inAmbientContext && node.initializer) { + var equalsPos = node.type ? skipTrivia(sourceText, node.type.end) : skipTrivia(sourceText, node.name.end); + grammarErrorAtPos(equalsPos, "=".length, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + if (!inAmbientContext && !node.initializer && node.flags & NodeFlags.Const) { + grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); + } + if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code + // and its Identifier is eval or arguments + reportInvalidUseInStrictMode(node.name); + } + } } export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { diff --git a/tests/baselines/reference/ambientErrors.errors.txt b/tests/baselines/reference/ambientErrors.errors.txt index 618829c8bd9..e89586275a3 100644 --- a/tests/baselines/reference/ambientErrors.errors.txt +++ b/tests/baselines/reference/ambientErrors.errors.txt @@ -1,6 +1,4 @@ -tests/cases/conformance/ambient/ambientErrors.ts(2,15): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/ambient/ambientErrors.ts(34,11): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/ambient/ambientErrors.ts(37,18): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(38,11): error TS1039: Initializers are not allowed in ambient contexts. @@ -14,11 +12,9 @@ tests/cases/conformance/ambient/ambientErrors.ts(51,16): error TS2436: Ambient e tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export assignment cannot be used in a module with other exported elements. -==== tests/cases/conformance/ambient/ambientErrors.ts (14 errors) ==== +==== tests/cases/conformance/ambient/ambientErrors.ts (12 errors) ==== // Ambient variable with an initializer declare var x = 4; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. // Ambient functions with invalid overloads declare function fn(x: number): string; @@ -57,8 +53,6 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export // Ambient module with initializers for values, bodies for functions / classes declare module M1 { var x = 3; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. function fn() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. diff --git a/tests/baselines/reference/ambientErrors1.errors.txt b/tests/baselines/reference/ambientErrors1.errors.txt new file mode 100644 index 00000000000..db7a155cc3f --- /dev/null +++ b/tests/baselines/reference/ambientErrors1.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/ambientErrors1.ts(1,15): error TS1039: Initializers are not allowed in ambient contexts. + + +==== tests/cases/compiler/ambientErrors1.ts (1 errors) ==== + declare var x = 4; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. \ No newline at end of file diff --git a/tests/baselines/reference/initializersInDeclarations.errors.txt b/tests/baselines/reference/initializersInDeclarations.errors.txt index 94736957365..49a06cf9a29 100644 --- a/tests/baselines/reference/initializersInDeclarations.errors.txt +++ b/tests/baselines/reference/initializersInDeclarations.errors.txt @@ -1,13 +1,10 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,7): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,14): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(7,16): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(12,15): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(13,15): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(16,2): error TS1036: Statements are not allowed in ambient contexts. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(18,16): error TS1039: Initializers are not allowed in ambient contexts. -==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (7 errors) ==== +==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (4 errors) ==== // Errors: Initializers & statements in declaration file @@ -26,11 +23,7 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(18,16): er } declare var x = []; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. declare var y = {}; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. declare module M1 { while(true); @@ -38,6 +31,4 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(18,16): er !!! error TS1036: Statements are not allowed in ambient contexts. export var v1 = () => false; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. } \ No newline at end of file diff --git a/tests/baselines/reference/missingRequiredDeclare.d.errors.txt b/tests/baselines/reference/missingRequiredDeclare.d.errors.txt index dc713c86d89..1e52fa92fe5 100644 --- a/tests/baselines/reference/missingRequiredDeclare.d.errors.txt +++ b/tests/baselines/reference/missingRequiredDeclare.d.errors.txt @@ -1,10 +1,7 @@ tests/cases/compiler/missingRequiredDeclare.d.ts(1,1): error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. -tests/cases/compiler/missingRequiredDeclare.d.ts(1,7): error TS1039: Initializers are not allowed in ambient contexts. -==== tests/cases/compiler/missingRequiredDeclare.d.ts (2 errors) ==== +==== tests/cases/compiler/missingRequiredDeclare.d.ts (1 errors) ==== var x = 1; ~~~ -!!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. \ No newline at end of file +!!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. \ No newline at end of file diff --git a/tests/baselines/reference/parserVariableStatement1.d.errors.txt b/tests/baselines/reference/parserVariableStatement1.d.errors.txt index de0bef5288c..7176e5ed69f 100644 --- a/tests/baselines/reference/parserVariableStatement1.d.errors.txt +++ b/tests/baselines/reference/parserVariableStatement1.d.errors.txt @@ -1,10 +1,7 @@ tests/cases/conformance/parser/ecmascript5/Statements/parserVariableStatement1.d.ts(1,1): error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. -tests/cases/conformance/parser/ecmascript5/Statements/parserVariableStatement1.d.ts(1,7): error TS1039: Initializers are not allowed in ambient contexts. -==== tests/cases/conformance/parser/ecmascript5/Statements/parserVariableStatement1.d.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Statements/parserVariableStatement1.d.ts (1 errors) ==== var v = 1; ~~~ -!!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. \ No newline at end of file +!!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. \ No newline at end of file diff --git a/tests/cases/compiler/ambientErrors1.ts b/tests/cases/compiler/ambientErrors1.ts new file mode 100644 index 00000000000..ef249266498 --- /dev/null +++ b/tests/cases/compiler/ambientErrors1.ts @@ -0,0 +1 @@ +declare var x = 4; \ No newline at end of file From 3dfa8bef24f6e736d7bcbdfd58327441bfd000bc Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 22:46:35 -0800 Subject: [PATCH 063/178] Move contructor grammar checks into the grammar walker. --- src/compiler/parser.ts | 22 +++++++++++++------ ...torWithIncompleteTypeAnnotation.errors.txt | 5 +---- .../parserConstructorDeclaration11.errors.txt | 5 +---- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 1cc5e09d680..775ed08ca47 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3373,12 +3373,6 @@ module ts { node.parameters = sig.parameters; node.type = sig.type; node.body = parseAndCheckFunctionBody(/*isConstructor*/ true); - if (node.typeParameters) { - grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); - } - if (node.type) { - grammarErrorOnNode(node.type, Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); - } return finishNode(node); } @@ -4167,7 +4161,21 @@ module ts { } function visitConstructor(node: ConstructorDeclaration) { - checkParameterList(node.parameters); + checkParameterList(node.parameters) || + checkConstructorTypeParameters(node) || + checkConstructorTypeAnnotation(node); + } + + function checkConstructorTypeParameters(node: ConstructorDeclaration) { + if (node.typeParameters) { + return grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + } + + function checkConstructorTypeAnnotation(node: ConstructorDeclaration) { + if (node.type) { + return grammarErrorOnNode(node.type, Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } } function visitConstructorType(node: SignatureDeclaration) { diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index 696f173e930..c18dfb8e354 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -40,7 +40,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,9): error TS tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,26): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(239,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(241,5): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,67): error TS1093: Type annotation cannot appear on a constructor declaration. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,69): error TS1110: Type expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,9): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,31): error TS1005: ',' expected. @@ -94,7 +93,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2304: Cannot find name 'string'. -==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (94 errors) ==== +==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (93 errors) ==== declare module "fs" { export class File { constructor(filename: string); @@ -486,8 +485,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T private otherValue = 42; constructor(private value: number, public name: string) : } - -!!! error TS1093: Type annotation cannot appear on a constructor declaration. ~ !!! error TS1110: Type expected. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parserConstructorDeclaration11.errors.txt b/tests/baselines/reference/parserConstructorDeclaration11.errors.txt index e8a799fc36a..7e5c305fb80 100644 --- a/tests/baselines/reference/parserConstructorDeclaration11.errors.txt +++ b/tests/baselines/reference/parserConstructorDeclaration11.errors.txt @@ -1,12 +1,9 @@ tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration11.ts(2,14): error TS1098: Type parameter list cannot be empty. -tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration11.ts(2,15): error TS1092: Type parameters cannot appear on a constructor declaration. -==== tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration11.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration11.ts (1 errors) ==== class C { constructor<>() { } ~~ !!! error TS1098: Type parameter list cannot be empty. - -!!! error TS1092: Type parameters cannot appear on a constructor declaration. } \ No newline at end of file From 6900c8ff81dbc6c14e400c326f6b4473bf016207 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 22:58:11 -0800 Subject: [PATCH 064/178] Move module grammar checks to the grammar checker. --- src/compiler/parser.ts | 24 +++++---- ...DeclarationInModuleDeclaration1.errors.txt | 9 ++++ .../privacyGloImportParseErrors.errors.txt | 26 +--------- .../privacyImportParseErrors.errors.txt | 50 +------------------ .../importDeclarationInModuleDeclaration1.ts | 3 ++ 5 files changed, 29 insertions(+), 83 deletions(-) create mode 100644 tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt create mode 100644 tests/cases/compiler/importDeclarationInModuleDeclaration1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 775ed08ca47..586c9f7e107 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3782,15 +3782,6 @@ module ts { } else { node.body = parseModuleBody(); - forEach((node.body).statements, s => { - if (s.kind === SyntaxKind.ExportAssignment) { - // Export assignments are not allowed in an internal module - grammarErrorOnNode(s, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); - } - else if (s.kind === SyntaxKind.ImportDeclaration && (s).externalModuleName) { - grammarErrorOnNode(s, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); - } - }); } return finishNode(node); } @@ -4122,6 +4113,7 @@ module ts { case SyntaxKind.GetAccessor: return visitGetAccessor(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); case SyntaxKind.Method: return visitMethod(node); + case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); @@ -4291,6 +4283,20 @@ module ts { checkParameterList(node.parameters); } + function visitModuleDeclaration(node: ModuleDeclaration): void { + if (node.name.kind === SyntaxKind.Identifier && node.body.kind === SyntaxKind.ModuleBlock) { + forEach((node.body).statements, s => { + if (s.kind === SyntaxKind.ExportAssignment) { + // Export assignments are not allowed in an internal module + grammarErrorOnNode(s, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (s.kind === SyntaxKind.ImportDeclaration && (s).externalModuleName) { + grammarErrorOnNode(s, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + }); + } + } + function visitObjectLiteral(node: ObjectLiteral): void { var seen: Map = {}; var Property = 1; diff --git a/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt new file mode 100644 index 00000000000..82132947ee5 --- /dev/null +++ b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/importDeclarationInModuleDeclaration1.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. + + +==== tests/cases/compiler/importDeclarationInModuleDeclaration1.ts (1 errors) ==== + module m2 { + import m3 = require("use_glo_M1_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. + } \ No newline at end of file diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index b87e6867a8f..0ac0ed35105 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -1,12 +1,4 @@ -tests/cases/compiler/privacyGloImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(69,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(81,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(82,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(121,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(125,13): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(133,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/privacyGloImportParseErrors.ts(146,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(149,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -16,7 +8,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(138,16): error TS2435: Ambie tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambient external modules cannot be nested in other modules. -==== tests/cases/compiler/privacyGloImportParseErrors.ts (16 errors) ==== +==== tests/cases/compiler/privacyGloImportParseErrors.ts (8 errors) ==== module m1 { export module m1_M1_public { export class c1 { @@ -80,8 +72,6 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -94,8 +84,6 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie var m1_im3_private_v4_private = m1_im3_private.f1(); import m1_im4_private = require("m1_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M4_private'. export var m1_im4_private_v1_public = m1_im4_private.c1; @@ -110,11 +98,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie export import m1_im1_public = m1_M1_public; export import m1_im2_public = m1_M2_private; export import m1_im3_public = require("m1_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export import m1_im4_public = require("m1_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } module glo_M1_public { @@ -154,14 +138,10 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import errorImport = require("glo_M2_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; module m5 { import m5_errorImport = require("glo_M2_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -191,13 +171,9 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/baselines/reference/privacyImportParseErrors.errors.txt b/tests/baselines/reference/privacyImportParseErrors.errors.txt index 3388cdc3b9c..6e901ab2b6d 100644 --- a/tests/baselines/reference/privacyImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyImportParseErrors.errors.txt @@ -1,22 +1,6 @@ -tests/cases/compiler/privacyImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(69,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(81,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(82,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(143,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(153,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(166,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(167,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(273,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(277,13): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(302,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(306,13): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(314,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/privacyImportParseErrors.ts(326,9): error TS1029: 'export' modifier must precede 'declare' modifier. tests/cases/compiler/privacyImportParseErrors.ts(328,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/privacyImportParseErrors.ts(341,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(344,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(350,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(353,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -49,7 +33,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(333,16): error TS2435: Ambient tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient external modules cannot be nested in other modules. -==== tests/cases/compiler/privacyImportParseErrors.ts (49 errors) ==== +==== tests/cases/compiler/privacyImportParseErrors.ts (33 errors) ==== export module m1 { export module m1_M1_public { export class c1 { @@ -113,8 +97,6 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -127,8 +109,6 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im3_private_v4_private = m1_im3_private.f1(); import m1_im4_private = require("m1_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M4_private'. export var m1_im4_private_v1_public = m1_im4_private.c1; @@ -143,11 +123,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient export import m1_im1_public = m1_M1_public; export import m1_im2_public = m1_M2_private; export import m1_im3_public = require("m1_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export import m1_im4_public = require("m1_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } module m2 { @@ -213,8 +189,6 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m2_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm2_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -227,8 +201,6 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im3_private_v4_private = m1_im3_private.f1(); import m1_im4_private = require("m2_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm2_M4_private'. export var m1_im4_private_v1_public = m1_im4_private.c1; @@ -244,11 +216,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient export import m1_im1_public = m2_M1_public; export import m1_im2_public = m2_M2_private; export import m1_im3_public = require("m2_M3_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export import m1_im4_public = require("m2_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } export module glo_M1_public { @@ -375,14 +343,10 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M2_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; module m5 { import m5_errorImport = require("glo_M2_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -416,14 +380,10 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M3_private; module m5 { import m5_errorImport = require("glo_M4_private"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M3_private; } } @@ -481,26 +441,18 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } export module m3 { import m3 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/cases/compiler/importDeclarationInModuleDeclaration1.ts b/tests/cases/compiler/importDeclarationInModuleDeclaration1.ts new file mode 100644 index 00000000000..9f7f9ed7ccd --- /dev/null +++ b/tests/cases/compiler/importDeclarationInModuleDeclaration1.ts @@ -0,0 +1,3 @@ +module m2 { + import m3 = require("use_glo_M1_public"); +} \ No newline at end of file From 07f41dc78690f06bf12962c4a34b0574b44ff9cb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 23:34:26 -0800 Subject: [PATCH 065/178] Move variable statement checks to the grammar checker. --- src/compiler/parser.ts | 128 ++++++++++-------- .../letDeclarations-es5-1.errors.txt | 27 ++++ .../reference/letDeclarations-es5.errors.txt | 20 +-- tests/cases/compiler/letDeclarations-es5-1.ts | 7 + 4 files changed, 110 insertions(+), 72 deletions(-) create mode 100644 tests/baselines/reference/letDeclarations-es5-1.errors.txt create mode 100644 tests/cases/compiler/letDeclarations-es5-1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 586c9f7e107..19f228a2c54 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2721,14 +2721,10 @@ module ts { } // STATEMENTS - function parseStatementAllowingLetDeclaration() { - return parseStatement(/*allowLetAndConstDeclarations*/ true); - } - function parseBlock(ignoreMissingOpenBrace: boolean, checkForStrictMode: boolean): Block { var node = createNode(SyntaxKind.Block); if (parseExpected(SyntaxKind.OpenBraceToken) || ignoreMissingOpenBrace) { - node.statements = parseList(ParsingContext.BlockStatements, checkForStrictMode, parseStatementAllowingLetDeclaration); + node.statements = parseList(ParsingContext.BlockStatements, checkForStrictMode, parseStatement); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -2774,8 +2770,8 @@ module ts { parseExpected(SyntaxKind.OpenParenToken); node.expression = parseExpression(); parseExpected(SyntaxKind.CloseParenToken); - node.thenStatement = parseStatement(/*allowLetAndConstDeclarations*/ false); - node.elseStatement = parseOptional(SyntaxKind.ElseKeyword) ? parseStatement(/*allowLetAndConstDeclarations*/ false) : undefined; + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(SyntaxKind.ElseKeyword) ? parseStatement() : undefined; return finishNode(node); } @@ -2785,7 +2781,7 @@ module ts { var saveInIterationStatement = inIterationStatement; inIterationStatement = ControlBlockContext.Nested; - node.statement = parseStatement(/*allowLetAndConstDeclarations*/ false); + node.statement = parseStatement(); inIterationStatement = saveInIterationStatement; parseExpected(SyntaxKind.WhileKeyword); @@ -2810,7 +2806,7 @@ module ts { var saveInIterationStatement = inIterationStatement; inIterationStatement = ControlBlockContext.Nested; - node.statement = parseStatement(/*allowLetAndConstDeclarations*/ false); + node.statement = parseStatement(); inIterationStatement = saveInIterationStatement; return finishNode(node); @@ -2883,7 +2879,7 @@ module ts { var saveInIterationStatement = inIterationStatement; inIterationStatement = ControlBlockContext.Nested; - forOrForInStatement.statement = parseStatement(/*allowLetAndConstDeclarations*/ false); + forOrForInStatement.statement = parseStatement(); inIterationStatement = saveInIterationStatement; return finishNode(forOrForInStatement); @@ -2994,7 +2990,7 @@ module ts { parseExpected(SyntaxKind.OpenParenToken); node.expression = parseExpression(); parseExpected(SyntaxKind.CloseParenToken); - node.statement = parseStatement(/*allowLetAndConstDeclarations*/ false); + node.statement = parseStatement(); node = finishNode(node); if (isInStrictMode) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such @@ -3009,7 +3005,7 @@ module ts { parseExpected(SyntaxKind.CaseKeyword); node.expression = parseExpression(); parseExpected(SyntaxKind.ColonToken); - node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatementAllowingLetDeclaration); + node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement); return finishNode(node); } @@ -3017,7 +3013,7 @@ module ts { var node = createNode(SyntaxKind.DefaultClause); parseExpected(SyntaxKind.DefaultKeyword); parseExpected(SyntaxKind.ColonToken); - node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatementAllowingLetDeclaration); + node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement); return finishNode(node); } @@ -3124,9 +3120,9 @@ module ts { return token === SyntaxKind.WhileKeyword || token === SyntaxKind.DoKeyword || token === SyntaxKind.ForKeyword; } - function parseStatementWithLabelSet(allowLetAndConstDeclarations: boolean): Statement { + function parseStatementWithLabelSet(): Statement { labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); - var statement = parseStatement(allowLetAndConstDeclarations); + var statement = parseStatement(); labelledStatementInfo.pop(); return statement; } @@ -3135,7 +3131,7 @@ module ts { return isIdentifier() && lookAhead(() => nextToken() === SyntaxKind.ColonToken); } - function parseLabeledStatement(allowLetAndConstDeclarations: boolean): LabeledStatement { + function parseLabeledStatement(): LabeledStatement { var node = createNode(SyntaxKind.LabeledStatement); node.label = parseIdentifier(); parseExpected(SyntaxKind.ColonToken); @@ -3147,7 +3143,7 @@ module ts { // We only want to call parseStatementWithLabelSet when the label set is complete // Therefore, keep parsing labels until we know we're done. - node.statement = isLabel() ? parseLabeledStatement(allowLetAndConstDeclarations) : parseStatementWithLabelSet(allowLetAndConstDeclarations); + node.statement = isLabel() ? parseLabeledStatement() : parseStatementWithLabelSet(); return finishNode(node); } @@ -3220,7 +3216,7 @@ module ts { } } - function parseStatement(allowLetAndConstDeclarations: boolean): Statement { + function parseStatement(): Statement { switch (token) { case SyntaxKind.OpenBraceToken: return parseBlock(/* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false); @@ -3228,7 +3224,7 @@ module ts { case SyntaxKind.LetKeyword: case SyntaxKind.ConstKeyword: // const here should always be parsed as const declaration because of check in 'isStatement' - return parseVariableStatement(allowLetAndConstDeclarations); + return parseVariableStatement(); case SyntaxKind.FunctionKeyword: return parseFunctionDeclaration(); case SyntaxKind.SemicolonToken: @@ -3261,10 +3257,9 @@ module ts { case SyntaxKind.DebuggerKeyword: return parseDebuggerStatement(); default: - if (isLabel()) { - return parseLabeledStatement(allowLetAndConstDeclarations); - } - return parseExpressionStatement(); + return isLabel() + ? parseLabeledStatement() + : parseExpressionStatement(); } } @@ -3307,43 +3302,26 @@ module ts { () => parseVariableDeclaration(flags, noIn), /*allowTrailingComma*/ false); } - function parseVariableStatement(allowLetAndConstDeclarations: boolean, pos?: number, flags?: NodeFlags): VariableStatement { + function parseVariableStatement(pos?: number, flags?: NodeFlags): VariableStatement { var node = createNode(SyntaxKind.VariableStatement, pos); - if (flags) node.flags = flags; - var errorCountBeforeVarStatement = file._parserDiagnostics.length; + if (flags) { + node.flags = flags; + } + if (token === SyntaxKind.LetKeyword) { node.flags |= NodeFlags.Let; } else if (token === SyntaxKind.ConstKeyword) { node.flags |= NodeFlags.Const; } - else if (token !== SyntaxKind.VarKeyword) { - error(Diagnostics.var_let_or_const_expected); + else { + Debug.assert(token === SyntaxKind.VarKeyword); } + nextToken(); node.declarations = parseVariableDeclarationList(node.flags, /*noIn*/false); parseSemicolon(); - finishNode(node); - if (!node.declarations.length && file._parserDiagnostics.length === errorCountBeforeVarStatement) { - grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < ScriptTarget.ES6) { - if (node.flags & NodeFlags.Let) { - grammarErrorOnNode(node, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - else if (node.flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - } - else if (!allowLetAndConstDeclarations) { - if (node.flags & NodeFlags.Let) { - grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block); - } - else if (node.flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block); - } - } - return node; + return finishNode(node); } function parseFunctionDeclaration(pos?: number, flags?: NodeFlags): FunctionLikeDeclaration { @@ -3895,7 +3873,7 @@ module ts { switch (token) { case SyntaxKind.VarKeyword: case SyntaxKind.LetKeyword: - result = parseVariableStatement(/*allowLetAndConstDeclarations*/ true, pos, flags); + result = parseVariableStatement(pos, flags); break; case SyntaxKind.ConstKeyword: var isConstEnum = lookAhead(() => nextToken() === SyntaxKind.EnumKeyword); @@ -3903,7 +3881,7 @@ module ts { result = parseAndCheckEnumDeclaration(pos, flags | NodeFlags.Const); } else { - result = parseVariableStatement(/*allowLetAndConstDeclarations*/ true, pos, flags); + result = parseVariableStatement(pos, flags); } break; case SyntaxKind.FunctionKeyword: @@ -3955,7 +3933,7 @@ module ts { var statementStart = scanner.getTokenPos(); var statementFirstTokenLength = scanner.getTextPos() - statementStart; var errorCountBeforeStatement = file._parserDiagnostics.length; - var statement = parseStatement(/*allowLetAndConstDeclarations*/ true); + var statement = parseStatement(); if (inAmbientContext && file._parserDiagnostics.length === errorCountBeforeStatement) { grammarErrorAtPos(statementStart, statementFirstTokenLength, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); @@ -4076,10 +4054,14 @@ module ts { // We're automatically in an ambient context if this is a .d.ts file. var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); - + var parent: Node; visitNode(file); function visitNode(node: Node): void { + var savedParent = parent; + node.parent = parent; + parent = node; + // First recurse and perform all grammar checks on the children of this node. var savedInAmbientContext = inAmbientContext if (node.flags & NodeFlags.Ambient) { @@ -4096,6 +4078,7 @@ module ts { } inAmbientContext = savedInAmbientContext; + parent = savedParent; } function checkNode(node: Node) { @@ -4121,6 +4104,7 @@ module ts { case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); + case SyntaxKind.VariableStatement: return visitVariableStatement(node); } } @@ -4501,6 +4485,44 @@ module ts { reportInvalidUseInStrictMode(node.name); } } + + function visitVariableStatement(node: VariableStatement) { + if (!node.declarations.length) { + grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); + } + if (languageVersion < ScriptTarget.ES6) { + if (node.flags & NodeFlags.Let) { + grammarErrorOnNode(node, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + else if (node.flags & NodeFlags.Const) { + grammarErrorOnNode(node, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } + else if (!allowLetAndConstDeclarations(node.parent)) { + if (node.flags & NodeFlags.Let) { + grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block); + } + else if (node.flags & NodeFlags.Const) { + grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block); + } + } + } + + function allowLetAndConstDeclarations(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.IfStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.WithStatement: + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + return false; + case SyntaxKind.LabeledStatement: + return allowLetAndConstDeclarations(node.parent); + } + + return true; + } } export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { diff --git a/tests/baselines/reference/letDeclarations-es5-1.errors.txt b/tests/baselines/reference/letDeclarations-es5-1.errors.txt new file mode 100644 index 00000000000..5eb52d48f52 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-es5-1.errors.txt @@ -0,0 +1,27 @@ +tests/cases/compiler/letDeclarations-es5-1.ts(1,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(2,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(3,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(4,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(5,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(6,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + + +==== tests/cases/compiler/letDeclarations-es5-1.ts (6 errors) ==== + let l1; + ~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + let l2: number; + ~~~~~~~~~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + let l3, l4, l5 :string, l6; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + let l7 = false; + ~~~~~~~~~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + let l8: number = 23; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. + let l9 = 0, l10 :string = "", l11 = null; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-es5.errors.txt b/tests/baselines/reference/letDeclarations-es5.errors.txt index be1a56a8b7f..444bd911124 100644 --- a/tests/baselines/reference/letDeclarations-es5.errors.txt +++ b/tests/baselines/reference/letDeclarations-es5.errors.txt @@ -1,34 +1,16 @@ -tests/cases/compiler/letDeclarations-es5.ts(2,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(3,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(4,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(6,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(7,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(8,1): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. tests/cases/compiler/letDeclarations-es5.ts(10,8): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. tests/cases/compiler/letDeclarations-es5.ts(12,8): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -==== tests/cases/compiler/letDeclarations-es5.ts (8 errors) ==== +==== tests/cases/compiler/letDeclarations-es5.ts (2 errors) ==== let l1; - ~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l2: number; - ~~~~~~~~~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l3, l4, l5 :string, l6; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l7 = false; - ~~~~~~~~~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l8: number = 23; - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l9 = 0, l10 :string = "", l11 = null; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. for(let l11 in {}) { } ~~~~ diff --git a/tests/cases/compiler/letDeclarations-es5-1.ts b/tests/cases/compiler/letDeclarations-es5-1.ts new file mode 100644 index 00000000000..cd93feeda0d --- /dev/null +++ b/tests/cases/compiler/letDeclarations-es5-1.ts @@ -0,0 +1,7 @@ +// @target: ES5 + let l1; + let l2: number; + let l3, l4, l5 :string, l6; + let l7 = false; + let l8: number = 23; + let l9 = 0, l10 :string = "", l11 = null; \ No newline at end of file From 7fb21a25f692abcb7aa0b67e72ddbe08f403b2e6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 18 Nov 2014 23:43:12 -0800 Subject: [PATCH 066/178] Move catch block checks to the grammar checker. --- src/compiler/parser.ts | 24 ++++++++++++++---------- src/compiler/types.ts | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 19f228a2c54..0a4658f42b5 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3089,23 +3089,14 @@ module ts { parseExpected(SyntaxKind.CatchKeyword); parseExpected(SyntaxKind.OpenParenToken); var variable = parseIdentifier(); - var typeAnnotationColonStart = scanner.getTokenPos(); - var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; var typeAnnotation = parseTypeAnnotation(); parseExpected(SyntaxKind.CloseParenToken); var result = parseBlock(/* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false); result.kind = SyntaxKind.CatchBlock; result.pos = pos; result.variable = variable; + result.type = typeAnnotation; - if (typeAnnotation) { - errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { - // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the - // Catch production is eval or arguments - reportInvalidUseInStrictMode(variable); - } return result; } @@ -4086,6 +4077,7 @@ module ts { switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.CallSignature: return visitCallSignature(node); + case SyntaxKind.CatchBlock: return visitCatchBlock(node); case SyntaxKind.Constructor: return visitConstructor(node); case SyntaxKind.ConstructorType: return visitConstructorType(node); case SyntaxKind.ConstructSignature: return visitConstructSignature(node); @@ -4136,6 +4128,18 @@ module ts { checkParameterList(node.parameters); } + function visitCatchBlock(node: CatchBlock) { + if (node.type) { + var colonStart = skipTrivia(sourceText, node.variable.end); + grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + } + if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.variable)) { + // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the + // Catch production is eval or arguments + reportInvalidUseInStrictMode(node.variable); + } + } + function visitConstructor(node: ConstructorDeclaration) { checkParameterList(node.parameters) || checkConstructorTypeParameters(node) || diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 227034993ca..1e623a26f7e 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -584,6 +584,7 @@ module ts { export interface CatchBlock extends Block { variable: Identifier; + type?: TypeNode; } export interface ClassDeclaration extends Declaration { From de63023b1e7c7a007b4451c7e2406cf8f265652f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 00:11:59 -0800 Subject: [PATCH 067/178] Move type parameter checks to the grammar checker. --- src/compiler/parser.ts | 54 +++++++++------- ...ontShowCompilerGeneratedMembers.errors.txt | 8 +-- .../parserConstructorDeclaration12.errors.txt | 61 +++++++++++++++++++ .../parserConstructorDeclaration12.ts | 10 +++ 4 files changed, 105 insertions(+), 28 deletions(-) create mode 100644 tests/baselines/reference/parserConstructorDeclaration12.errors.txt create mode 100644 tests/cases/compiler/parserConstructorDeclaration12.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0a4658f42b5..25b6f11fa5b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1614,14 +1614,7 @@ module ts { function parseTypeParameters(): NodeArray { if (token === SyntaxKind.LessThanToken) { - var pos = getNodePos(); - var result = parseBracketedList(ParsingContext.TypeParameters, parseTypeParameter, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); - if (!result.length) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, Diagnostics.Type_parameter_list_cannot_be_empty); - } - return result; + return parseBracketedList(ParsingContext.TypeParameters, parseTypeParameter, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } } @@ -4121,11 +4114,13 @@ module ts { } function visitArrowFunction(node: FunctionExpression) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitCallSignature(node: ConstructorDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitCatchBlock(node: CatchBlock) { @@ -4141,7 +4136,8 @@ module ts { } function visitConstructor(node: ConstructorDeclaration) { - checkParameterList(node.parameters) || + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node); } @@ -4159,11 +4155,13 @@ module ts { } function visitConstructorType(node: SignatureDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitConstructSignature(node: FunctionLikeDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitEnumDeclaration(enumDecl: EnumDeclaration) { @@ -4214,20 +4212,24 @@ module ts { } function visitFunctionDeclaration(node: FunctionLikeDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitFunctionExpression(node: FunctionExpression) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitFunctionType(node: SignatureDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitGetAccessor(node: MethodDeclaration) { - checkParameterList(node.parameters) || - checkAccessor(node); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters) || + checkAccessor(node); } function visitIndexSignature(node: SignatureDeclaration): void { @@ -4268,7 +4270,8 @@ module ts { } function visitMethod(node: MethodDeclaration) { - checkParameterList(node.parameters); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters); } function visitModuleDeclaration(node: ModuleDeclaration): void { @@ -4366,6 +4369,14 @@ module ts { } } + function checkTypeParameterList(typeParameters: NodeArray): boolean { + if (typeParameters && typeParameters.length === 0) { + var start = typeParameters.pos - "<".length; + var end = typeParameters.end + ">".length; + return grammarErrorAtPos(start, end - start, Diagnostics.Type_parameter_list_cannot_be_empty); + } + } + function checkParameterList(parameters: NodeArray): boolean { var seenOptionalParameter = false; var parameterCount = parameters.length; @@ -4426,8 +4437,9 @@ module ts { } function visitSetAccessor(node: MethodDeclaration) { - checkParameterList(node.parameters) || - checkAccessor(node); + checkTypeParameterList(node.typeParameters) || + checkParameterList(node.parameters) || + checkAccessor(node); } function checkAccessor(accessor: MethodDeclaration): boolean { diff --git a/tests/baselines/reference/dontShowCompilerGeneratedMembers.errors.txt b/tests/baselines/reference/dontShowCompilerGeneratedMembers.errors.txt index cd2402161c3..5f6f15791f6 100644 --- a/tests/baselines/reference/dontShowCompilerGeneratedMembers.errors.txt +++ b/tests/baselines/reference/dontShowCompilerGeneratedMembers.errors.txt @@ -1,22 +1,16 @@ -tests/cases/compiler/dontShowCompilerGeneratedMembers.ts(3,5): error TS1098: Type parameter list cannot be empty. -tests/cases/compiler/dontShowCompilerGeneratedMembers.ts(3,6): error TS1005: '(' expected. tests/cases/compiler/dontShowCompilerGeneratedMembers.ts(3,6): error TS1139: Type parameter declaration expected. tests/cases/compiler/dontShowCompilerGeneratedMembers.ts(4,1): error TS1109: Expression expected. tests/cases/compiler/dontShowCompilerGeneratedMembers.ts(1,5): error TS2322: Type 'number' is not assignable to type '{ (): any; x: number; }'. Property 'x' is missing in type 'Number'. -==== tests/cases/compiler/dontShowCompilerGeneratedMembers.ts (5 errors) ==== +==== tests/cases/compiler/dontShowCompilerGeneratedMembers.ts (3 errors) ==== var f: { ~ !!! error TS2322: Type 'number' is not assignable to type '{ (): any; x: number; }'. !!! error TS2322: Property 'x' is missing in type 'Number'. x: number; <- - ~ -!!! error TS1098: Type parameter list cannot be empty. - ~ -!!! error TS1005: '(' expected. ~ !!! error TS1139: Type parameter declaration expected. }; diff --git a/tests/baselines/reference/parserConstructorDeclaration12.errors.txt b/tests/baselines/reference/parserConstructorDeclaration12.errors.txt new file mode 100644 index 00000000000..1af651d6ca9 --- /dev/null +++ b/tests/baselines/reference/parserConstructorDeclaration12.errors.txt @@ -0,0 +1,61 @@ +tests/cases/compiler/parserConstructorDeclaration12.ts(2,14): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(3,14): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(4,15): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(5,15): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(6,14): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(7,14): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(8,15): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(9,15): error TS1098: Type parameter list cannot be empty. +tests/cases/compiler/parserConstructorDeclaration12.ts(2,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(3,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(4,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(5,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(6,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(7,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(8,3): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/parserConstructorDeclaration12.ts(9,3): error TS2392: Multiple constructor implementations are not allowed. + + +==== tests/cases/compiler/parserConstructorDeclaration12.ts (16 errors) ==== + class C { + constructor<>() { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor<> () { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor <>() { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor <> () { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor< >() { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor< > () { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor < >() { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + constructor < > () { } + ~~ +!!! error TS1098: Type parameter list cannot be empty. + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. + } \ No newline at end of file diff --git a/tests/cases/compiler/parserConstructorDeclaration12.ts b/tests/cases/compiler/parserConstructorDeclaration12.ts new file mode 100644 index 00000000000..27d7daff1ef --- /dev/null +++ b/tests/cases/compiler/parserConstructorDeclaration12.ts @@ -0,0 +1,10 @@ +class C { + constructor<>() { } + constructor<> () { } + constructor <>() { } + constructor <> () { } + constructor< >() { } + constructor< > () { } + constructor < >() { } + constructor < > () { } +} \ No newline at end of file From afb035631a104d1016a869719a42f93c479ba4e8 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 00:19:26 -0800 Subject: [PATCH 068/178] Move strict check for binary expressions to grammar checker. --- src/compiler/parser.ts | 90 +++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 25b6f11fa5b..c10adae271b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2043,12 +2043,7 @@ module ts { // Now see if we might be in cases '2' or '3'. // If the expression was a LHS expression, and we have an assignment operator, then // we're in '2' or '3'. Consume the assignment and return. - if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an - // Assignment operator(11.13) or of a PostfixExpression(11.3) - reportInvalidUseInStrictMode(expr); - } + if (isLeftHandSideExpression(expr) && isAssignmentOperator(token)) { var operator = token; nextToken(); return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); @@ -2058,37 +2053,6 @@ module ts { return expr; } - function isLeftHandSideExpression(expr: Expression): boolean { - if (expr) { - switch (expr.kind) { - case SyntaxKind.PropertyAccess: - case SyntaxKind.IndexedAccess: - case SyntaxKind.NewExpression: - case SyntaxKind.CallExpression: - case SyntaxKind.TaggedTemplateExpression: - case SyntaxKind.ArrayLiteral: - case SyntaxKind.ParenExpression: - case SyntaxKind.ObjectLiteral: - case SyntaxKind.FunctionExpression: - case SyntaxKind.Identifier: - case SyntaxKind.Missing: - case SyntaxKind.RegularExpressionLiteral: - case SyntaxKind.NumericLiteral: - case SyntaxKind.StringLiteral: - case SyntaxKind.NoSubstitutionTemplateLiteral: - case SyntaxKind.TemplateExpression: - case SyntaxKind.FalseKeyword: - case SyntaxKind.NullKeyword: - case SyntaxKind.ThisKeyword: - case SyntaxKind.TrueKeyword: - case SyntaxKind.SuperKeyword: - return true; - } - } - - return false; - } - function parseSimpleArrowFunctionExpression(identifier: Identifier): Expression { Debug.assert(token === SyntaxKind.EqualsGreaterThanToken, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(SyntaxKind.EqualsGreaterThanToken); @@ -2269,10 +2233,6 @@ module ts { return makeFunctionExpression(SyntaxKind.ArrowFunction, pos, /* name */ undefined, sig, body); } - function isAssignmentOperator(): boolean { - return token >= SyntaxKind.FirstAssignment && token <= SyntaxKind.LastAssignment; - } - function parseConditionalExpression(noIn?: boolean): Expression { var expr = parseBinaryExpression(noIn); while (parseOptional(SyntaxKind.QuestionToken)) { @@ -4033,6 +3993,41 @@ module ts { return file; } + function isLeftHandSideExpression(expr: Expression): boolean { + if (expr) { + switch (expr.kind) { + case SyntaxKind.PropertyAccess: + case SyntaxKind.IndexedAccess: + case SyntaxKind.NewExpression: + case SyntaxKind.CallExpression: + case SyntaxKind.TaggedTemplateExpression: + case SyntaxKind.ArrayLiteral: + case SyntaxKind.ParenExpression: + case SyntaxKind.ObjectLiteral: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Identifier: + case SyntaxKind.Missing: + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.NumericLiteral: + case SyntaxKind.StringLiteral: + case SyntaxKind.NoSubstitutionTemplateLiteral: + case SyntaxKind.TemplateExpression: + case SyntaxKind.FalseKeyword: + case SyntaxKind.NullKeyword: + case SyntaxKind.ThisKeyword: + case SyntaxKind.TrueKeyword: + case SyntaxKind.SuperKeyword: + return true; + } + } + + return false; + } + + function isAssignmentOperator(token: SyntaxKind): boolean { + return token >= SyntaxKind.FirstAssignment && token <= SyntaxKind.LastAssignment; + } + function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { var syntacticDiagnostics = file._syntacticDiagnostics; @@ -4069,6 +4064,7 @@ module ts { // No grammar errors on any of our children. Check this node for grammar errors. switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); + case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); case SyntaxKind.CallSignature: return visitCallSignature(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); case SyntaxKind.Constructor: return visitConstructor(node); @@ -4118,6 +4114,18 @@ module ts { checkParameterList(node.parameters); } + function visitBinaryExpression(node: BinaryExpression) { + if (node.flags & NodeFlags.ParsedInStrictMode) { + if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { + if (isEvalOrArgumentsIdentifier(node.left)) { + // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an + // Assignment operator(11.13) or of a PostfixExpression(11.3) + reportInvalidUseInStrictMode(node.left); + } + } + } + } + function visitCallSignature(node: ConstructorDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); From cd162cf587e8dd93278431ad2246b63b413e356b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 00:25:37 -0800 Subject: [PATCH 069/178] Move all strict checks to the grammar checker. --- src/compiler/parser.ts | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index c10adae271b..71c24e2793c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -999,12 +999,6 @@ module ts { file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } - function reportInvalidUseInStrictMode(node: Identifier): void { - // declarationNameToString cannot be used here since it uses a backreference to 'parent' that is not yet set - var name = sourceText.substring(skipTrivia(sourceText, node.pos), node.end); - grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); - } - function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } @@ -2643,11 +2637,6 @@ module ts { var name = isIdentifier() ? parseIdentifier() : undefined; var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); var body = parseBody(/* ignoreMissingOpenBrace */ false); - if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { - // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the - // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) - reportInvalidUseInStrictMode(name); - } return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body); } @@ -3278,11 +3267,6 @@ module ts { node.parameters = sig.parameters; node.type = sig.type; node.body = parseAndCheckFunctionBody(/*isConstructor*/ false); - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name) && node.name.kind === SyntaxKind.Identifier) { - // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the - // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) - reportInvalidUseInStrictMode(node.name); - } return finishNode(node); } @@ -4221,12 +4205,22 @@ module ts { function visitFunctionDeclaration(node: FunctionLikeDeclaration) { checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParameterList(node.parameters) || + checkFunctionName(node.name); } function visitFunctionExpression(node: FunctionExpression) { checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParameterList(node.parameters) || + checkFunctionName(node.name); + } + + function checkFunctionName(name: Node) { + if (name && name.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(name)) { + // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the + // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) + return reportInvalidUseInStrictMode(name); + } } function visitFunctionType(node: SignatureDeclaration) { @@ -4372,8 +4366,7 @@ module ts { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - return true; + return reportInvalidUseInStrictMode(node.name); } } From 7222fd34ecf6334952e20ef98f6aa29f2a1766e2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 00:53:17 -0800 Subject: [PATCH 070/178] Move grammar checking on a trailing comma to the grammar checker. --- src/compiler/parser.ts | 93 +++++++++++++------ ...serErrorRecovery_ParameterList2.errors.txt | 5 +- ...rserErrorRecovery_VariableList1.errors.txt | 5 +- 3 files changed, 67 insertions(+), 36 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 71c24e2793c..a7c3c47b62c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1385,14 +1385,12 @@ module ts { } // Parses a comma-delimited list of elements - function parseDelimitedList(kind: ParsingContext, parseElement: () => T, allowTrailingComma: boolean): NodeArray { + function parseDelimitedList(kind: ParsingContext, parseElement: () => T): NodeArray { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var result = >[]; result.pos = getNodePos(); - // Keep track of how many errors we had before the list started. If we don't see any new - // errors resulting from the list being malformed, we are free to complain about a trailing comma. - var errorCountBeforeParsingList = file._parserDiagnostics.length; + var commaStart = -1; // Meaning the previous token was not a comma while (true) { if (isListElement(kind, /* inErrorRecovery */ false)) { @@ -1425,12 +1423,6 @@ module ts { // was a trailing comma. // Check if the last token was a comma. if (commaStart >= 0) { - if (!allowTrailingComma) { - if (file._parserDiagnostics.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; } @@ -1457,7 +1449,7 @@ module ts { function parseBracketedList(kind: ParsingContext, parseElement: () => T, startToken: SyntaxKind, endToken: SyntaxKind): NodeArray { if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, /*allowTrailingComma*/ false); + var result = parseDelimitedList(kind, parseElement); parseExpected(endToken); return result; } @@ -2438,8 +2430,7 @@ module ts { else { parseExpected(SyntaxKind.OpenParenToken); } - callExpr.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, - parseArgumentExpression, /*allowTrailingComma*/ false); + callExpr.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); parseExpected(SyntaxKind.CloseParenToken); expr = finishNode(callExpr); continue; @@ -2564,8 +2555,7 @@ module ts { var node = createNode(SyntaxKind.ArrayLiteral); parseExpected(SyntaxKind.OpenBracketToken); if (scanner.hasPrecedingLineBreak()) node.flags |= NodeFlags.MultiLine; - node.elements = parseDelimitedList(ParsingContext.ArrayLiteralMembers, - parseArrayLiteralElement, /*allowTrailingComma*/ true); + node.elements = parseDelimitedList(ParsingContext.ArrayLiteralMembers, parseArrayLiteralElement); parseExpected(SyntaxKind.CloseBracketToken); return finishNode(node); } @@ -2626,7 +2616,7 @@ module ts { node.flags |= NodeFlags.MultiLine; } - node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, /*allowTrailingComma*/ true); + node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember); parseExpected(SyntaxKind.CloseBraceToken); return finishNode(node); } @@ -2655,8 +2645,7 @@ module ts { parseExpected(SyntaxKind.NewKeyword); node.func = parseCallAndAccess(parsePrimaryExpression(), /* inNewExpression */ true); if (parseOptional(SyntaxKind.OpenParenToken) || token === SyntaxKind.LessThanToken && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, - parseArgumentExpression, /*allowTrailingComma*/ false); + node.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); parseExpected(SyntaxKind.CloseParenToken); } return finishNode(node); @@ -2805,8 +2794,13 @@ module ts { } else { var forStatement = createNode(SyntaxKind.ForStatement, pos); - if (declarations) forStatement.declarations = declarations; - if (varOrInit) forStatement.initializer = varOrInit; + if (declarations) { + forStatement.declarations = declarations; + } + if (varOrInit) { + forStatement.initializer = varOrInit; + } + parseExpected(SyntaxKind.SemicolonToken); if (token !== SyntaxKind.SemicolonToken && token !== SyntaxKind.CloseParenToken) { forStatement.condition = parseExpression(); @@ -3231,8 +3225,7 @@ module ts { } function parseVariableDeclarationList(flags: NodeFlags, noIn?: boolean): NodeArray { - return parseDelimitedList(ParsingContext.VariableDeclarations, - () => parseVariableDeclaration(flags, noIn), /*allowTrailingComma*/ false); + return parseDelimitedList(ParsingContext.VariableDeclarations, () => parseVariableDeclaration(flags, noIn)); } function parseVariableStatement(pos?: number, flags?: NodeFlags): VariableStatement { @@ -3584,8 +3577,7 @@ module ts { var implementsKeywordLength: number; if (parseOptional(SyntaxKind.ImplementsKeyword)) { implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, - parseTypeReference, /*allowTrailingComma*/ false); + node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } var errorCountBeforeClassBody = file._parserDiagnostics.length; if (parseExpected(SyntaxKind.OpenBraceToken)) { @@ -3613,8 +3605,7 @@ module ts { var extendsKeywordLength: number; if (parseOptional(SyntaxKind.ExtendsKeyword)) { extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, - parseTypeReference, /*allowTrailingComma*/ false); + node.baseTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } var errorCountBeforeInterfaceBody = file._parserDiagnostics.length; node.members = parseTypeLiteral().members; @@ -3657,8 +3648,7 @@ module ts { parseExpected(SyntaxKind.EnumKeyword); node.name = parseIdentifier(); if (parseExpected(SyntaxKind.OpenBraceToken)) { - node.members = parseDelimitedList(ParsingContext.EnumMembers, - parseEnumMember, /*allowTrailingComma*/ true); + node.members = parseDelimitedList(ParsingContext.EnumMembers, parseEnumMember); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -4049,8 +4039,10 @@ module ts { switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); + case SyntaxKind.CallExpression: return visitCallExpression(node); case SyntaxKind.CallSignature: return visitCallSignature(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); + case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); case SyntaxKind.Constructor: return visitConstructor(node); case SyntaxKind.ConstructorType: return visitConstructorType(node); case SyntaxKind.ConstructSignature: return visitConstructSignature(node); @@ -4060,14 +4052,17 @@ module ts { case SyntaxKind.FunctionType: return visitFunctionType(node); case SyntaxKind.GetAccessor: return visitGetAccessor(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); + case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); case SyntaxKind.Method: return visitMethod(node); case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); + case SyntaxKind.NewExpression: return visitNewExpression(node); case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); + case SyntaxKind.TupleType: return visitTupleType(node); case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); case SyntaxKind.VariableStatement: return visitVariableStatement(node); } @@ -4110,6 +4105,19 @@ module ts { } } + function visitCallExpression(node: CallExpression) { + checkForTrailingComma(node.typeArguments) || + checkForTrailingComma(node.arguments); + } + + function checkForTrailingComma(list: NodeArray): boolean { + if (list && list.hasTrailingComma) { + var start = list.end - ",".length; + var end = list.end; + return grammarErrorAtPos(start, end - start, Diagnostics.Trailing_comma_not_allowed); + } + } + function visitCallSignature(node: ConstructorDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); @@ -4127,6 +4135,10 @@ module ts { } } + function visitClassDeclaration(node: ClassDeclaration) { + checkForTrailingComma(node.implementedTypes); + } + function visitConstructor(node: ConstructorDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || @@ -4271,6 +4283,10 @@ module ts { } } + function visitInterfaceDeclaration(node: InterfaceDeclaration) { + checkForTrailingComma(node.baseTypes); + } + function visitMethod(node: MethodDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); @@ -4290,6 +4306,11 @@ module ts { } } + function visitNewExpression(node: NewExpression): void { + checkForTrailingComma(node.typeArguments) || + checkForTrailingComma(node.arguments); + } + function visitObjectLiteral(node: ObjectLiteral): void { var seen: Map = {}; var Property = 1; @@ -4371,6 +4392,10 @@ module ts { } function checkTypeParameterList(typeParameters: NodeArray): boolean { + if (checkForTrailingComma(typeParameters)) { + return true; + } + if (typeParameters && typeParameters.length === 0) { var start = typeParameters.pos - "<".length; var end = typeParameters.end + ">".length; @@ -4379,6 +4404,10 @@ module ts { } function checkParameterList(parameters: NodeArray): boolean { + if (checkForTrailingComma(parameters)) { + return true; + } + var seenOptionalParameter = false; var parameterCount = parameters.length; @@ -4488,6 +4517,10 @@ module ts { } } + function visitTupleType(node: TupleTypeNode) { + checkForTrailingComma(node.elementTypes); + } + function visitVariableDeclaration(node: VariableDeclaration) { if (inAmbientContext && node.initializer) { var equalsPos = node.type ? skipTrivia(sourceText, node.type.end) : skipTrivia(sourceText, node.name.end); @@ -4504,6 +4537,10 @@ module ts { } function visitVariableStatement(node: VariableStatement) { + if (checkForTrailingComma(node.declarations)) { + return; + } + if (!node.declarations.length) { grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); } diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList2.errors.txt b/tests/baselines/reference/parserErrorRecovery_ParameterList2.errors.txt index fd4c286f356..48cd83147d7 100644 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList2.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList2.errors.txt @@ -1,11 +1,8 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList2.ts(1,13): error TS1009: Trailing comma not allowed. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList2.ts(1,15): error TS1005: ')' expected. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList2.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList2.ts (1 errors) ==== function f(a, { - ~ -!!! error TS1009: Trailing comma not allowed. ~ !!! error TS1005: ')' expected. } \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt b/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt index b69cab688f0..a42ffcdd474 100644 --- a/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt @@ -1,11 +1,8 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts(1,6): error TS1009: Trailing comma not allowed. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts(2,1): error TS1108: A 'return' statement can only be used within a function body. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts (1 errors) ==== var a, - ~ -!!! error TS1009: Trailing comma not allowed. return; ~~~~~~ !!! error TS1108: A 'return' statement can only be used within a function body. \ No newline at end of file From 9170962998557a34ab50758e1f1a821b10e3b94d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 02:11:17 -0800 Subject: [PATCH 071/178] Move declaration list checking to the grammar checks. --- src/compiler/checker.ts | 11 ++- src/compiler/emitter.ts | 19 +++-- src/compiler/parser.ts | 81 +++++++++++-------- src/compiler/types.ts | 2 +- .../constDeclarations-es5.errors.txt | 12 +-- .../letDeclarations-es5-1.errors.txt | 24 +++--- .../reference/letDeclarations-es5.errors.txt | 28 +++++-- .../parserForInStatement2.errors.txt | 4 +- .../parserForInStatement3.errors.txt | 4 +- .../parserForInStatement6.errors.txt | 4 +- .../parserForInStatement7.errors.txt | 4 +- .../parserVariableDeclaration6.errors.txt | 4 +- .../parserVariableDeclaration8.errors.txt | 4 +- 13 files changed, 118 insertions(+), 83 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a3b4bbf3f73..b947a271be3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7531,10 +7531,13 @@ module ts { // for (var VarDecl in Expr) Statement // VarDecl must be a variable declaration without a type annotation that declares a variable of type Any, // and Expr must be an expression of type Any, an object type, or a type parameter type. - if (node.declaration) { - checkVariableDeclaration(node.declaration); - if (node.declaration.type) { - error(node.declaration, Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + checkVariableDeclaration(decl); + if (decl.type) { + error(decl, Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + } } } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 1d2274d245c..ef4d02edd14 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1336,15 +1336,18 @@ module ts { var endPos = emitToken(SyntaxKind.ForKeyword, node.pos); write(" "); endPos = emitToken(SyntaxKind.OpenParenToken, endPos); - if (node.declaration) { - if (node.declaration.flags & NodeFlags.Let) { - emitToken(SyntaxKind.LetKeyword, endPos); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + if (decl.flags & NodeFlags.Let) { + emitToken(SyntaxKind.LetKeyword, endPos); + } + else { + emitToken(SyntaxKind.VarKeyword, endPos); + } + write(" "); + emit(decl); } - else { - emitToken(SyntaxKind.VarKeyword, endPos); - } - write(" "); - emit(node.declaration); } else { emit(node.variable); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a7c3c47b62c..0b4ac1b5cae 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -303,7 +303,7 @@ module ts { child((node).iterator) || child((node).statement); case SyntaxKind.ForInStatement: - return child((node).declaration) || + return children((node).declarations) || child((node).variable) || child((node).expression) || child((node).statement); @@ -2750,27 +2750,12 @@ module ts { if (token !== SyntaxKind.SemicolonToken) { if (parseOptional(SyntaxKind.VarKeyword)) { var declarations = parseVariableDeclarationList(0, /*noIn*/ true); - if (!declarations.length) { - error(Diagnostics.Variable_declaration_list_cannot_be_empty); - } } else if (parseOptional(SyntaxKind.LetKeyword)) { var declarations = parseVariableDeclarationList(NodeFlags.Let, /*noIn*/ true); - if (!declarations.length) { - error(Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < ScriptTarget.ES6) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else if (parseOptional(SyntaxKind.ConstKeyword)) { var declarations = parseVariableDeclarationList(NodeFlags.Const, /*noIn*/ true); - if (!declarations.length) { - error(Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < ScriptTarget.ES6) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else { var varOrInit = parseExpression(true); @@ -2780,10 +2765,7 @@ module ts { if (parseOptional(SyntaxKind.InKeyword)) { var forInStatement = createNode(SyntaxKind.ForInStatement, pos); if (declarations) { - if (declarations.length > 1) { - error(Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - } - forInStatement.declaration = declarations[0]; + forInStatement.declarations = declarations; } else { forInStatement.variable = varOrInit; @@ -4047,6 +4029,8 @@ module ts { case SyntaxKind.ConstructorType: return visitConstructorType(node); case SyntaxKind.ConstructSignature: return visitConstructSignature(node); case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); + case SyntaxKind.ForInStatement: return visitForInStatement(node); + case SyntaxKind.ForStatement: return visitForStatement(node); case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); case SyntaxKind.FunctionType: return visitFunctionType(node); @@ -4215,6 +4199,21 @@ module ts { return false; } + function visitForInStatement(node: ForInStatement) { + checkVariableDeclarations(node.declarations) || + checkForMoreThanOneDeclaration(node.declarations); + } + + function visitForStatement(node: ForStatement) { + checkVariableDeclarations(node.declarations); + } + + function checkForMoreThanOneDeclaration(declarations: NodeArray) { + if (declarations && declarations.length > 1) { + return grammarErrorOnNode(declarations[1], Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + } + } + function visitFunctionDeclaration(node: FunctionLikeDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || @@ -4536,28 +4535,40 @@ module ts { } } - function visitVariableStatement(node: VariableStatement) { - if (checkForTrailingComma(node.declarations)) { - return; - } + function checkVariableDeclarations(declarations: NodeArray): boolean { + if (declarations) { + if (checkForTrailingComma(declarations)) { + return true; + } - if (!node.declarations.length) { - grammarErrorOnNode(node, Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < ScriptTarget.ES6) { - if (node.flags & NodeFlags.Let) { - grammarErrorOnNode(node, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + if (!declarations.length) { + return grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, Diagnostics.Variable_declaration_list_cannot_be_empty); } - else if (node.flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + + var decl = declarations[0]; + if (languageVersion < ScriptTarget.ES6) { + if (decl.flags & NodeFlags.Let) { + return grammarErrorOnNode(decl, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + else if (decl.flags & NodeFlags.Const) { + return grammarErrorOnNode(decl, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } } } - else if (!allowLetAndConstDeclarations(node.parent)) { + } + + function visitVariableStatement(node: VariableStatement) { + checkVariableDeclarations(node.declarations) || + checkForDisallowedLetOrConstStatement(node); + } + + function checkForDisallowedLetOrConstStatement(node: VariableStatement) { + if (!allowLetAndConstDeclarations(node.parent)) { if (node.flags & NodeFlags.Let) { - grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block); + return grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block); } else if (node.flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block); + return grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block); } } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1e623a26f7e..17ee1ce6134 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -539,7 +539,7 @@ module ts { } export interface ForInStatement extends IterationStatement { - declaration?: VariableDeclaration; + declarations?: NodeArray; variable?: Expression; expression: Expression; } diff --git a/tests/baselines/reference/constDeclarations-es5.errors.txt b/tests/baselines/reference/constDeclarations-es5.errors.txt index 0b830eab05a..c928e6ae48e 100644 --- a/tests/baselines/reference/constDeclarations-es5.errors.txt +++ b/tests/baselines/reference/constDeclarations-es5.errors.txt @@ -1,17 +1,17 @@ -tests/cases/compiler/constDeclarations-es5.ts(2,1): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/constDeclarations-es5.ts(3,1): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/constDeclarations-es5.ts(4,1): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/constDeclarations-es5.ts(2,7): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/constDeclarations-es5.ts(3,7): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/constDeclarations-es5.ts(4,7): error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. ==== tests/cases/compiler/constDeclarations-es5.ts (3 errors) ==== const z7 = false; - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. const z8: number = 23; - ~~~~~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. const z9 = 0, z10 :string = "", z11 = null; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1154: 'const' declarations are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-es5-1.errors.txt b/tests/baselines/reference/letDeclarations-es5-1.errors.txt index 5eb52d48f52..f0430585a3b 100644 --- a/tests/baselines/reference/letDeclarations-es5-1.errors.txt +++ b/tests/baselines/reference/letDeclarations-es5-1.errors.txt @@ -1,27 +1,27 @@ -tests/cases/compiler/letDeclarations-es5-1.ts(1,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5-1.ts(2,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5-1.ts(3,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5-1.ts(4,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5-1.ts(5,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5-1.ts(6,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(1,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(2,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(3,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(4,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(5,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5-1.ts(6,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. ==== tests/cases/compiler/letDeclarations-es5-1.ts (6 errors) ==== let l1; - ~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l2: number; - ~~~~~~~~~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l3, l4, l5 :string, l6; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l7 = false; - ~~~~~~~~~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l8: number = 23; - ~~~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l9 = 0, l10 :string = "", l11 = null; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-es5.errors.txt b/tests/baselines/reference/letDeclarations-es5.errors.txt index 444bd911124..34bd93dba3c 100644 --- a/tests/baselines/reference/letDeclarations-es5.errors.txt +++ b/tests/baselines/reference/letDeclarations-es5.errors.txt @@ -1,22 +1,40 @@ -tests/cases/compiler/letDeclarations-es5.ts(10,8): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -tests/cases/compiler/letDeclarations-es5.ts(12,8): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(2,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(3,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(4,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(6,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(7,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(8,5): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(10,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/letDeclarations-es5.ts(12,9): error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. -==== tests/cases/compiler/letDeclarations-es5.ts (2 errors) ==== +==== tests/cases/compiler/letDeclarations-es5.ts (8 errors) ==== let l1; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l2: number; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l3, l4, l5 :string, l6; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l7 = false; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l8: number = 23; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. let l9 = 0, l10 :string = "", l11 = null; + ~~ +!!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. for(let l11 in {}) { } - ~~~~ + ~~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. for(let l12 = 0; l12 < 9; l12++) { } - ~~~~~~~~ + ~~~ !!! error TS1153: 'let' declarations are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/parserForInStatement2.errors.txt b/tests/baselines/reference/parserForInStatement2.errors.txt index 30c20036029..1399a323da0 100644 --- a/tests/baselines/reference/parserForInStatement2.errors.txt +++ b/tests/baselines/reference/parserForInStatement2.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement2.ts(1,10): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement2.ts(1,9): error TS1123: Variable declaration list cannot be empty. tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement2.ts(1,13): error TS2304: Cannot find name 'X'. ==== tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement2.ts (2 errors) ==== for (var in X) { - ~~ + !!! error TS1123: Variable declaration list cannot be empty. ~ !!! error TS2304: Cannot find name 'X'. diff --git a/tests/baselines/reference/parserForInStatement3.errors.txt b/tests/baselines/reference/parserForInStatement3.errors.txt index b3e02edf9f7..aa6eea4397b 100644 --- a/tests/baselines/reference/parserForInStatement3.errors.txt +++ b/tests/baselines/reference/parserForInStatement3.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement3.ts(1,18): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. +tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement3.ts(1,13): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement3.ts(1,18): error TS2304: Cannot find name 'X'. ==== tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement3.ts (2 errors) ==== for (var a, b in X) { - ~ + ~ !!! error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. ~ !!! error TS2304: Cannot find name 'X'. diff --git a/tests/baselines/reference/parserForInStatement6.errors.txt b/tests/baselines/reference/parserForInStatement6.errors.txt index cb04fa4d6f9..a4eaeb12410 100644 --- a/tests/baselines/reference/parserForInStatement6.errors.txt +++ b/tests/baselines/reference/parserForInStatement6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement6.ts(1,26): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. +tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement6.ts(1,17): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement6.ts(1,26): error TS2304: Cannot find name 'X'. ==== tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement6.ts (2 errors) ==== for (var a = 1, b = 2 in X) { - ~ + ~ !!! error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. ~ !!! error TS2304: Cannot find name 'X'. diff --git a/tests/baselines/reference/parserForInStatement7.errors.txt b/tests/baselines/reference/parserForInStatement7.errors.txt index b351afc8ec5..2371b3453c3 100644 --- a/tests/baselines/reference/parserForInStatement7.errors.txt +++ b/tests/baselines/reference/parserForInStatement7.errors.txt @@ -1,11 +1,11 @@ -tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement7.ts(1,43): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. +tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement7.ts(1,25): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement7.ts(1,10): error TS2404: The left-hand side of a 'for...in' statement cannot use a type annotation. tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement7.ts(1,43): error TS2304: Cannot find name 'X'. ==== tests/cases/conformance/parser/ecmascript5/Statements/parserForInStatement7.ts (3 errors) ==== for (var a: number = 1, b: string = "" in X) { - ~ + ~ !!! error TS1091: Only a single variable declaration is allowed in a 'for...in' statement. ~ !!! error TS2404: The left-hand side of a 'for...in' statement cannot use a type annotation. diff --git a/tests/baselines/reference/parserVariableDeclaration6.errors.txt b/tests/baselines/reference/parserVariableDeclaration6.errors.txt index 1dee8ef6820..699f4188c7f 100644 --- a/tests/baselines/reference/parserVariableDeclaration6.errors.txt +++ b/tests/baselines/reference/parserVariableDeclaration6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration6.ts(1,1): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration6.ts(1,4): error TS1123: Variable declaration list cannot be empty. ==== tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration6.ts (1 errors) ==== var - ~~~ + !!! error TS1123: Variable declaration list cannot be empty. \ No newline at end of file diff --git a/tests/baselines/reference/parserVariableDeclaration8.errors.txt b/tests/baselines/reference/parserVariableDeclaration8.errors.txt index 77350f226c2..7f14785c1ca 100644 --- a/tests/baselines/reference/parserVariableDeclaration8.errors.txt +++ b/tests/baselines/reference/parserVariableDeclaration8.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration8.ts(1,1): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration8.ts(1,4): error TS1123: Variable declaration list cannot be empty. ==== tests/cases/conformance/parser/ecmascript5/VariableDeclarations/parserVariableDeclaration8.ts (1 errors) ==== var ; - ~~~~~ + !!! error TS1123: Variable declaration list cannot be empty. \ No newline at end of file From 90cc44bb2f298cb8f16ec54a7ed0e9ce7777500b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 02:30:16 -0800 Subject: [PATCH 072/178] Move type argument tests to the grammar checker. --- src/compiler/parser.ts | 23 +++++++++++++------ .../instantiateTypeParameter.errors.txt | 5 +--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0b4ac1b5cae..9ec45f91d12 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2457,18 +2457,12 @@ module ts { } function parseTypeArguments(): NodeArray { - var typeArgumentListStart = scanner.getTokenPos(); - var errorCountBeforeTypeParameterList = file._parserDiagnostics.length; // We pass parseSingleTypeArgument instead of parseType as the element parser // because parseSingleTypeArgument knows how to parse a missing type argument. // This is useful for signature help. parseType has the disadvantage that when // it sees a missing type, it changes the LookAheadMode to Error, and the result // is a broken binary expression, which breaks signature help. - var result = parseBracketedList(ParsingContext.TypeArguments, parseSingleTypeArgument, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); - if (!result.length && file._parserDiagnostics.length === errorCountBeforeTypeParameterList) { - grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, Diagnostics.Type_argument_list_cannot_be_empty); - } - return result; + return parseBracketedList(ParsingContext.TypeArguments, parseSingleTypeArgument, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } function parseSingleTypeArgument(): TypeNode { @@ -4047,6 +4041,7 @@ module ts { case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); case SyntaxKind.TupleType: return visitTupleType(node); + case SyntaxKind.TypeReference: return visitTypeReference(node); case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); case SyntaxKind.VariableStatement: return visitVariableStatement(node); } @@ -4091,9 +4086,18 @@ module ts { function visitCallExpression(node: CallExpression) { checkForTrailingComma(node.typeArguments) || + checkForAtLeastOneTypeArgument(node.typeArguments) || checkForTrailingComma(node.arguments); } + function checkForAtLeastOneTypeArgument(typeArguments: NodeArray) { + if (typeArguments && typeArguments.length === 0) { + var start = typeArguments.pos - "<".length; + var end = typeArguments.end + ">".length; + return grammarErrorAtPos(start, end - start, Diagnostics.Type_argument_list_cannot_be_empty); + } + } + function checkForTrailingComma(list: NodeArray): boolean { if (list && list.hasTrailingComma) { var start = list.end - ",".length; @@ -4307,6 +4311,7 @@ module ts { function visitNewExpression(node: NewExpression): void { checkForTrailingComma(node.typeArguments) || + checkForAtLeastOneTypeArgument(node.typeArguments) || checkForTrailingComma(node.arguments); } @@ -4520,6 +4525,10 @@ module ts { checkForTrailingComma(node.elementTypes); } + function visitTypeReference(node: TypeReferenceNode) { + checkForAtLeastOneTypeArgument(node.typeArguments); + } + function visitVariableDeclaration(node: VariableDeclaration) { if (inAmbientContext && node.initializer) { var equalsPos = node.type ? skipTrivia(sourceText, node.type.end) : skipTrivia(sourceText, node.name.end); diff --git a/tests/baselines/reference/instantiateTypeParameter.errors.txt b/tests/baselines/reference/instantiateTypeParameter.errors.txt index 40967ba586f..f56f8a761dd 100644 --- a/tests/baselines/reference/instantiateTypeParameter.errors.txt +++ b/tests/baselines/reference/instantiateTypeParameter.errors.txt @@ -1,16 +1,13 @@ tests/cases/compiler/instantiateTypeParameter.ts(2,5): error TS1131: Property or signature expected. -tests/cases/compiler/instantiateTypeParameter.ts(2,13): error TS1099: Type argument list cannot be empty. tests/cases/compiler/instantiateTypeParameter.ts(3,1): error TS1128: Declaration or statement expected. tests/cases/compiler/instantiateTypeParameter.ts(2,12): error TS2304: Cannot find name 'T'. -==== tests/cases/compiler/instantiateTypeParameter.ts (4 errors) ==== +==== tests/cases/compiler/instantiateTypeParameter.ts (3 errors) ==== interface Foo { var x: T<>; ~~~ !!! error TS1131: Property or signature expected. - ~~ -!!! error TS1099: Type argument list cannot be empty. ~~~ !!! error TS2304: Cannot find name 'T'. } From b98f6b46887a2b3b21cf2ad36260479eb44d21af Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Nov 2014 11:55:05 -0800 Subject: [PATCH 073/178] Paramter -> Parameter --- tests/cases/fourslash/fourslash.ts | 4 ++-- tests/cases/fourslash/genericParameterHelp.ts | 2 +- .../signatureHelpAnonymousFunction.ts | 2 +- tests/cases/fourslash/signatureHelpAtEOF.ts | 2 +- .../signatureHelpBeforeSemicolon1.ts | 2 +- .../fourslash/signatureHelpCallExpression.ts | 2 +- .../signatureHelpConstructExpression.ts | 2 +- .../signatureHelpConstructorInheritance.ts | 2 +- .../signatureHelpConstructorOverload.ts | 4 ++-- .../cases/fourslash/signatureHelpEmptyList.ts | 2 +- .../signatureHelpFunctionOverload.ts | 4 ++-- .../signatureHelpFunctionParameter.ts | 2 +- .../signatureHelpImplicitConstructor.ts | 2 +- .../fourslash/signatureHelpIncompleteCalls.ts | 6 ++--- .../fourslash/signatureHelpObjectLiteral.ts | 24 +++++++++---------- ...signatureHelpOnOverloadsDifferentArity3.ts | 6 ++--- .../signatureHelpSuperConstructorOverload.ts | 4 ++-- .../signatureHelpTaggedTemplates1.ts | 2 +- .../signatureHelpTaggedTemplates2.ts | 2 +- .../signatureHelpTaggedTemplates3.ts | 2 +- .../signatureHelpTaggedTemplates4.ts | 2 +- .../signatureHelpTaggedTemplates5.ts | 2 +- .../signatureHelpTaggedTemplates6.ts | 2 +- .../signatureHelpTaggedTemplates7.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete1.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete2.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete3.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete4.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete5.ts | 2 +- ...signatureHelpTaggedTemplatesIncomplete6.ts | 2 +- .../signatureHelpTaggedTemplatesNested1.ts | 2 +- .../signatureHelpTaggedTemplatesNested2.ts | 3 +-- ...eHelpTaggedTemplatesWithOverloadedTags1.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags2.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags3.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags4.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags5.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags6.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags7.ts | 2 +- ...eHelpTaggedTemplatesWithOverloadedTags8.ts | 2 +- 40 files changed, 59 insertions(+), 60 deletions(-) diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index c71f8987bdf..c0372d46063 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -301,11 +301,11 @@ module FourSlashInterface { FourSlash.currentTestState.verifySignatureHelpArgumentCount(expected); } - public currentSignatureParamterCountIs(expected: number) { + public currentSignatureParameterCountIs(expected: number) { FourSlash.currentTestState.verifyCurrentSignatureHelpParameterCount(expected); } - public currentSignatureTypeParamterCountIs(expected: number) { + public currentSignatureTypeParameterCountIs(expected: number) { FourSlash.currentTestState.verifyCurrentSignatureHelpTypeParameterCount(expected); } diff --git a/tests/cases/fourslash/genericParameterHelp.ts b/tests/cases/fourslash/genericParameterHelp.ts index 17882485fd7..6bbb957f0f9 100644 --- a/tests/cases/fourslash/genericParameterHelp.ts +++ b/tests/cases/fourslash/genericParameterHelp.ts @@ -14,7 +14,7 @@ ////testFunction<, ,/*5*/>(null, null, null); // goTo.marker("1"); -// verify.currentSignatureParamterCountIs(3); +// verify.currentSignatureParameterCountIs(3); // verify.currentSignatureHelpIs("testFunction(a: T, b: U, c: M): M"); // verify.currentParameterHelpArgumentNameIs("T"); diff --git a/tests/cases/fourslash/signatureHelpAnonymousFunction.ts b/tests/cases/fourslash/signatureHelpAnonymousFunction.ts index cc723c713d6..ba812a2f8d3 100644 --- a/tests/cases/fourslash/signatureHelpAnonymousFunction.ts +++ b/tests/cases/fourslash/signatureHelpAnonymousFunction.ts @@ -7,7 +7,7 @@ goTo.marker('anonymousFunction1'); verify.signatureHelpCountIs(1); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('(a: number, b: string): string'); verify.currentParameterHelpArgumentNameIs("a"); verify.currentParameterSpanIs("a: number"); diff --git a/tests/cases/fourslash/signatureHelpAtEOF.ts b/tests/cases/fourslash/signatureHelpAtEOF.ts index 64c4aaeeb2c..d2e1fa0418d 100644 --- a/tests/cases/fourslash/signatureHelpAtEOF.ts +++ b/tests/cases/fourslash/signatureHelpAtEOF.ts @@ -10,6 +10,6 @@ verify.signatureHelpPresent(); verify.signatureHelpCountIs(1); verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentParameterHelpArgumentNameIs("arg1"); verify.currentParameterSpanIs("arg1: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts b/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts index 2b0b07056bf..d3bdd42ef1a 100644 --- a/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts +++ b/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts @@ -10,6 +10,6 @@ verify.signatureHelpPresent(); verify.signatureHelpCountIs(1); verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentParameterHelpArgumentNameIs("arg1"); verify.currentParameterSpanIs("arg1: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpCallExpression.ts b/tests/cases/fourslash/signatureHelpCallExpression.ts index 50d89aaae4e..fd9758cfa54 100644 --- a/tests/cases/fourslash/signatureHelpCallExpression.ts +++ b/tests/cases/fourslash/signatureHelpCallExpression.ts @@ -5,7 +5,7 @@ goTo.marker('1'); verify.signatureHelpCountIs(1); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('fnTest(str: string, num: number): void'); verify.currentParameterHelpArgumentNameIs('str'); diff --git a/tests/cases/fourslash/signatureHelpConstructExpression.ts b/tests/cases/fourslash/signatureHelpConstructExpression.ts index a88cb3fce68..00efee0a479 100644 --- a/tests/cases/fourslash/signatureHelpConstructExpression.ts +++ b/tests/cases/fourslash/signatureHelpConstructExpression.ts @@ -6,7 +6,7 @@ goTo.marker('1'); verify.signatureHelpCountIs(1); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('sampleCls(str: string, num: number): sampleCls'); verify.currentParameterHelpArgumentNameIs('str'); diff --git a/tests/cases/fourslash/signatureHelpConstructorInheritance.ts b/tests/cases/fourslash/signatureHelpConstructorInheritance.ts index b066eab3fd4..a2e683d69bb 100644 --- a/tests/cases/fourslash/signatureHelpConstructorInheritance.ts +++ b/tests/cases/fourslash/signatureHelpConstructorInheritance.ts @@ -16,7 +16,7 @@ goTo.marker('indirectSuperCall'); verify.signatureHelpCountIs(2); -verify.currentSignatureParamterCountIs(1); +verify.currentSignatureParameterCountIs(1); verify.currentSignatureHelpIs('B2(n: number): B2'); verify.currentParameterHelpArgumentNameIs("n"); verify.currentParameterSpanIs("n: number"); diff --git a/tests/cases/fourslash/signatureHelpConstructorOverload.ts b/tests/cases/fourslash/signatureHelpConstructorOverload.ts index ce276e09d8f..9aab48f71ae 100644 --- a/tests/cases/fourslash/signatureHelpConstructorOverload.ts +++ b/tests/cases/fourslash/signatureHelpConstructorOverload.ts @@ -6,11 +6,11 @@ goTo.marker('1'); verify.signatureHelpCountIs(2); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); verify.currentSignatureHelpIs('clsOverload(): clsOverload'); goTo.marker('2'); -verify.currentSignatureParamterCountIs(1); +verify.currentSignatureParameterCountIs(1); verify.currentSignatureHelpIs('clsOverload(test: string): clsOverload'); verify.currentParameterHelpArgumentNameIs('test'); verify.currentParameterSpanIs("test: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpEmptyList.ts b/tests/cases/fourslash/signatureHelpEmptyList.ts index 6ea70159dcc..b6318656f4f 100644 --- a/tests/cases/fourslash/signatureHelpEmptyList.ts +++ b/tests/cases/fourslash/signatureHelpEmptyList.ts @@ -12,7 +12,7 @@ verify.signatureHelpPresent(); verify.signatureHelpCountIs(1); verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentParameterHelpArgumentNameIs("arg1"); verify.currentParameterSpanIs("arg1: string"); diff --git a/tests/cases/fourslash/signatureHelpFunctionOverload.ts b/tests/cases/fourslash/signatureHelpFunctionOverload.ts index 2c1cdb51291..cc02ba12570 100644 --- a/tests/cases/fourslash/signatureHelpFunctionOverload.ts +++ b/tests/cases/fourslash/signatureHelpFunctionOverload.ts @@ -8,11 +8,11 @@ goTo.marker('functionOverload1'); verify.signatureHelpCountIs(2); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); verify.currentSignatureHelpIs('functionOverload(): any'); goTo.marker('functionOverload2'); -verify.currentSignatureParamterCountIs(1); +verify.currentSignatureParameterCountIs(1); verify.currentSignatureHelpIs('functionOverload(test: string): any'); verify.currentParameterHelpArgumentNameIs("test"); verify.currentParameterSpanIs("test: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpFunctionParameter.ts b/tests/cases/fourslash/signatureHelpFunctionParameter.ts index cb2264f2c42..b61e56dedcb 100644 --- a/tests/cases/fourslash/signatureHelpFunctionParameter.ts +++ b/tests/cases/fourslash/signatureHelpFunctionParameter.ts @@ -6,7 +6,7 @@ goTo.marker('parameterFunction1'); verify.signatureHelpCountIs(1); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('callback(a: number, b: string): void'); verify.currentParameterHelpArgumentNameIs("a"); verify.currentParameterSpanIs("a: number"); diff --git a/tests/cases/fourslash/signatureHelpImplicitConstructor.ts b/tests/cases/fourslash/signatureHelpImplicitConstructor.ts index 9e42d25dbe9..4324767d00a 100644 --- a/tests/cases/fourslash/signatureHelpImplicitConstructor.ts +++ b/tests/cases/fourslash/signatureHelpImplicitConstructor.ts @@ -7,4 +7,4 @@ goTo.marker(); verify.signatureHelpCountIs(1); verify.currentSignatureHelpIs("ImplicitConstructor(): ImplicitConstructor"); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); diff --git a/tests/cases/fourslash/signatureHelpIncompleteCalls.ts b/tests/cases/fourslash/signatureHelpIncompleteCalls.ts index e73217b1d8c..ec4fcccc0fe 100644 --- a/tests/cases/fourslash/signatureHelpIncompleteCalls.ts +++ b/tests/cases/fourslash/signatureHelpIncompleteCalls.ts @@ -17,13 +17,13 @@ goTo.marker('incompleteCalls1'); verify.currentSignatureHelpIs("f1(): void"); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); goTo.marker('incompleteCalls2'); -verify.currentSignatureParamterCountIs(1); +verify.currentSignatureParameterCountIs(1); verify.currentSignatureHelpIs("f2(n: number): number"); goTo.marker('incompleteCalls3'); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs("f3(n: number, s: string): string"); verify.currentParameterHelpArgumentNameIs("s"); diff --git a/tests/cases/fourslash/signatureHelpObjectLiteral.ts b/tests/cases/fourslash/signatureHelpObjectLiteral.ts index cbc5df697b9..6853c3fee36 100644 --- a/tests/cases/fourslash/signatureHelpObjectLiteral.ts +++ b/tests/cases/fourslash/signatureHelpObjectLiteral.ts @@ -1,17 +1,17 @@ /// ////var objectLiteral = { n: 5, s: "", f: (a: number, b: string) => "" }; -////objectLiteral.f(/*objectLiteral1*/4, /*objectLiteral2*/""); - -goTo.marker('objectLiteral1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParamterCountIs(2); -verify.currentSignatureHelpIs('f(a: number, b: string): string'); - -verify.currentParameterHelpArgumentNameIs("a"); -verify.currentParameterSpanIs("a: number"); - -goTo.marker('objectLiteral2'); -verify.currentSignatureHelpIs('f(a: number, b: string): string'); +////objectLiteral.f(/*objectLiteral1*/4, /*objectLiteral2*/""); + +goTo.marker('objectLiteral1'); +verify.signatureHelpCountIs(1); +verify.currentSignatureParameterCountIs(2); +verify.currentSignatureHelpIs('f(a: number, b: string): string'); + +verify.currentParameterHelpArgumentNameIs("a"); +verify.currentParameterSpanIs("a: number"); + +goTo.marker('objectLiteral2'); +verify.currentSignatureHelpIs('f(a: number, b: string): string'); verify.currentParameterHelpArgumentNameIs("b"); verify.currentParameterSpanIs("b: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts index c217a12ef58..f9754c7d1fd 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts @@ -10,17 +10,17 @@ goTo.marker(); verify.signatureHelpCountIs(4); verify.currentSignatureHelpIs("f(): any"); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); verify.signatureHelpArgumentCountIs(0); edit.insert(", "); verify.signatureHelpCountIs(4); verify.currentSignatureHelpIs("f(s: string, b: boolean): any"); -verify.currentSignatureParamterCountIs(2); +verify.currentSignatureParameterCountIs(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 +verify.currentSignatureParameterCountIs(2); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts b/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts index 1be8c3202a1..aa2e3e4856c 100644 --- a/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts +++ b/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts @@ -20,9 +20,9 @@ goTo.marker('superOverload1'); verify.signatureHelpCountIs(2); verify.currentSignatureHelpIs("SuperOverloadlBase(): SuperOverloadlBase"); -verify.currentSignatureParamterCountIs(0); +verify.currentSignatureParameterCountIs(0); goTo.marker('superOverload2'); -verify.currentSignatureParamterCountIs(1); +verify.currentSignatureParameterCountIs(1); verify.currentSignatureHelpIs("SuperOverloadlBase(test: string): SuperOverloadlBase"); verify.currentParameterHelpArgumentNameIs("test"); verify.currentParameterSpanIs("test: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts index 78b4b586a0c..39644ba8c24 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts index c4b75657be5..123a6cc4c2c 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts index 2616a0797be..f203468ca04 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("x"); verify.currentParameterSpanIs("x: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts index 995eddf3f65..13ee47a3309 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); verify.currentParameterSpanIs("y: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts index 01bd606cbf5..7cd2affd675 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("z"); verify.currentParameterSpanIs("z: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts index 71b85b1821b..7671666bb54 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(1); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts index ddb120b4089..35bed336f39 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(1); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts index edc6b932e5f..1da96ea5c1b 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(2); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts index 51ca619c4be..68ff7202f01 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(2); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("x"); verify.currentParameterSpanIs("x: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts index 05aaef5bc50..8165da7f67b 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(2); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts index e615f0156c0..8c970b60c77 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); verify.currentParameterSpanIs("y: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts index 531ce46b3c8..f93da36ce5c 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts index fcfd569daff..10d81eb80f4 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts @@ -11,7 +11,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); verify.currentParameterHelpArgumentNameIs("y"); verify.currentParameterSpanIs("y: any"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts index a20e43b20bc..a3c9f7ccce4 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts @@ -10,6 +10,6 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(1); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); }); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts index 488209dfac7..d72fa74d985 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts @@ -4,13 +4,12 @@ //// function g(templateStrings, x, y, z) { return ""; } //// //// f `/*1*/a $/*2*/{ /*3*/g /*4*/`alpha ${ 123 } beta ${ 456 } gamma`/*5*/ }/*6*/ b $/*7*/{ /*8*/g /*9*/`txt`/*10*/ } /*11*/c ${ /*12*/g /*13*/`aleph ${ 123 } beit`/*14*/ } d/*15*/`; -debugger; test.markers().forEach(m => { goTo.position(m.position); verify.signatureHelpCountIs(1); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); }); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts index 608af7dbb96..6850b1bc54f 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(2); - verify.currentSignatureParamterCountIs(2); + verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); verify.currentParameterHelpArgumentNameIs("templateStrings"); verify.currentParameterSpanIs("templateStrings: string[]"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts index c7908bdb52a..8466c6b05f2 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(2); - verify.currentSignatureParamterCountIs(2); + verify.currentSignatureParameterCountIs(2); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); verify.currentParameterHelpArgumentNameIs("p1_o1"); verify.currentParameterSpanIs("p1_o1: string"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts index 22256db1f0e..3843ed34b16 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); verify.currentParameterHelpArgumentNameIs("p1_o3"); verify.currentParameterSpanIs("p1_o3: string"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts index 700cc2194bf..a1072366a98 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); verify.currentParameterHelpArgumentNameIs("p1_o2"); verify.currentParameterSpanIs("p1_o2: number"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts index 20701c0e98d..2646e70b39c 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); verify.currentParameterHelpArgumentNameIs("p2_o2"); verify.currentParameterSpanIs("p2_o2: number"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts index 7bfd17c254a..62410a5fda3 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); verify.currentParameterHelpArgumentNameIs("p2_o2"); verify.currentParameterSpanIs("p2_o2: number"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts index 4f747d3d8eb..9a24aacf86b 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(3); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); verify.currentParameterHelpArgumentNameIs("p2_o3"); verify.currentParameterSpanIs("p2_o3: boolean"); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts index f97c2569730..8000f15d3c6 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts @@ -13,7 +13,7 @@ test.markers().forEach(m => { verify.signatureHelpCountIs(3); verify.signatureHelpArgumentCountIs(4); - verify.currentSignatureParamterCountIs(4); + verify.currentSignatureParameterCountIs(4); verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); verify.currentParameterHelpArgumentNameIs("p3_o2"); verify.currentParameterSpanIs("p3_o2: number"); From db69ec1da607b26467fa89c14a60c6ef8df87139 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Nov 2014 11:57:01 -0800 Subject: [PATCH 074/178] getCallLikeInvoker -> getInvokedExpression --- src/compiler/parser.ts | 2 +- src/services/signatureHelp.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index addc7f40c93..f7c9635eb04 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -475,7 +475,7 @@ module ts { } } - export function getCallLikeInvoker(node: CallLikeExpression): Expression { + export function getInvokedExpression(node: CallLikeExpression): Expression { if (node.kind === SyntaxKind.TaggedTemplateExpression) { return (node).tag; } diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 10c036dc38d..541e289037b 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -456,7 +456,7 @@ module ts.SignatureHelp { var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var invocation = argumentListInfo.invocation; - var invokerNode = getCallLikeInvoker(invocation) + var invokerNode = getInvokedExpression(invocation) var invokerSymbol = typeInfoResolver.getSymbolInfo(invokerNode); var invokerDisplayParts = invokerSymbol && symbolToDisplayParts(typeInfoResolver, invokerSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); var items: SignatureHelpItem[] = map(candidates, candidateSignature => { From e5e707709d8b6ff6df136600f53b0ad30cb58892 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 12:26:55 -0800 Subject: [PATCH 075/178] Proper spans for empty type arg/param lists. --- src/compiler/parser.ts | 4 ++-- .../reference/parserConstructorDeclaration12.errors.txt | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9ec45f91d12..b27366c953c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4093,7 +4093,7 @@ module ts { function checkForAtLeastOneTypeArgument(typeArguments: NodeArray) { if (typeArguments && typeArguments.length === 0) { var start = typeArguments.pos - "<".length; - var end = typeArguments.end + ">".length; + var end = skipTrivia(sourceText, typeArguments.end) + ">".length; return grammarErrorAtPos(start, end - start, Diagnostics.Type_argument_list_cannot_be_empty); } } @@ -4402,7 +4402,7 @@ module ts { if (typeParameters && typeParameters.length === 0) { var start = typeParameters.pos - "<".length; - var end = typeParameters.end + ">".length; + var end = skipTrivia(sourceText, typeParameters.end) + ">".length; return grammarErrorAtPos(start, end - start, Diagnostics.Type_parameter_list_cannot_be_empty); } } diff --git a/tests/baselines/reference/parserConstructorDeclaration12.errors.txt b/tests/baselines/reference/parserConstructorDeclaration12.errors.txt index 1af651d6ca9..949098e91da 100644 --- a/tests/baselines/reference/parserConstructorDeclaration12.errors.txt +++ b/tests/baselines/reference/parserConstructorDeclaration12.errors.txt @@ -39,22 +39,22 @@ tests/cases/compiler/parserConstructorDeclaration12.ts(9,3): error TS2392: Multi ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor< >() { } - ~~ + ~~~ !!! error TS1098: Type parameter list cannot be empty. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor< > () { } - ~~ + ~~~ !!! error TS1098: Type parameter list cannot be empty. ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor < >() { } - ~~ + ~~~ !!! error TS1098: Type parameter list cannot be empty. ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor < > () { } - ~~ + ~~~ !!! error TS1098: Type parameter list cannot be empty. ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. From abbd89aa2b11a99a79e2c1440dda24b927bef9d8 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 12:43:19 -0800 Subject: [PATCH 076/178] MOve switch checks to the grammar checker. --- src/compiler/parser.ts | 30 ++++++++++++------- ...hStatementsWithMultipleDefaults.errors.txt | 26 +--------------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b27366c953c..4b3443334fd 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2947,16 +2947,6 @@ module ts { inSwitchStatement = saveInSwitchStatement; parseExpected(SyntaxKind.CloseBraceToken); - - // Error on duplicate 'default' clauses. - var defaultClauses: CaseOrDefaultClause[] = filter(node.clauses, clause => clause.kind === SyntaxKind.DefaultClause); - for (var i = 1, n = defaultClauses.length; i < n; i++) { - var clause = defaultClauses[i]; - var start = skipTrivia(file.text, clause.pos); - var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; - grammarErrorAtPos(start, end - start, Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); - } - return finishNode(node); } @@ -4039,6 +4029,7 @@ module ts { case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); + case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); case SyntaxKind.TupleType: return visitTupleType(node); case SyntaxKind.TypeReference: return visitTypeReference(node); @@ -4515,6 +4506,25 @@ module ts { } } + function visitSwitchStatement(node: SwitchStatement) { + var firstDefaultClause: CaseOrDefaultClause; + + // Error on duplicate 'default' clauses. + for (var i = 0, n = node.clauses.length; i < n; i++) { + var clause = node.clauses[i]; + if (clause.kind === SyntaxKind.DefaultClause) { + if (firstDefaultClause === undefined) { + firstDefaultClause = clause; + } + else { + var start = skipTrivia(file.text, clause.pos); + var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; + grammarErrorAtPos(start, end - start, Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + } + } + } + } + function visitTaggedTemplateExpression(node: TaggedTemplateExpression) { if (languageVersion < ScriptTarget.ES6) { grammarErrorOnNode(node, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt index 28c86a7f0f2..cd892f5faa2 100644 --- a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt @@ -1,15 +1,7 @@ -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(9,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(10,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(21,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(25,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(26,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,22): error TS1108: A 'return' statement can only be used within a function body. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (9 errors) ==== +==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (1 errors) ==== var x = 10; @@ -19,11 +11,7 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS111 default: // No issues. break; default: // Error; second 'default' clause. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: // Error; third 'default' clause. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. case 3: x *= x; } @@ -35,27 +23,15 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS111 switch (x * x) { default: // No issues. default: // Error; second 'default' clause. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. break; case 10000: x /= x; default: // Error, third 'default' clause - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. def\u0061ult: // Error, fourth 'default' clause. - ~~~~~~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. // Errors on fifth-seventh default: return; - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. ~~~~~~ !!! error TS1108: A 'return' statement can only be used within a function body. default: default: - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. } } \ No newline at end of file From 25abab83e0a428b1d84843523ed1c1741501b108 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 19 Nov 2014 12:58:22 -0800 Subject: [PATCH 077/178] Fixed the api for resolving script reference and getting source file as per review feedback --- src/compiler/parser.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index df557cef591..6d6c2d4db62 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -635,12 +635,11 @@ module ts { } export function tryResolveScriptReference(program: Program, sourceFile: SourceFile, reference: FileReference) { - var referenceFileName = isRootedDiskPath(reference.filename) ? reference.filename : combinePaths(getDirectoryPath(sourceFile.filename), reference.filename); - referenceFileName = normalizePath(referenceFileName); if (!program.getCompilerOptions().noResolve) { + var referenceFileName = isRootedDiskPath(reference.filename) ? reference.filename : combinePaths(getDirectoryPath(sourceFile.filename), reference.filename); referenceFileName = getNormalizedAbsolutePath(referenceFileName, program.getCompilerHost().getCurrentDirectory()); + return program.getSourceFile(referenceFileName); } - return program.getSourceFile(referenceFileName); } export function getAncestor(node: Node, kind: SyntaxKind): Node { From e5b004899cf8846a0f3fadc531d240ac26db3528 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 19 Nov 2014 13:06:07 -0800 Subject: [PATCH 078/178] Renamed the tests files to more generic names --- src/harness/projectsRunner.ts | 6 ------ .../amd/FieldManager.d.ts | 3 --- .../amd/FieldManager.js | 6 ------ .../amd/diskFile0.js | 10 +++++----- .../amd/diskFile1.d.ts | 4 ++-- .../amd/foo.d.ts | 3 +++ .../amd/foo.js | 6 ++++++ .../amd/referenceResolutionRelativePaths.json | 18 +++++++++--------- .../node/FieldManager.d.ts | 3 --- .../node/FieldManager.js | 6 ------ .../node/diskFile0.js | 10 +++++----- .../node/diskFile1.d.ts | 4 ++-- .../node/foo.d.ts | 3 +++ .../node/foo.js | 6 ++++++ .../node/referenceResolutionRelativePaths.json | 18 +++++++++--------- .../amd/bar/bar.d.ts | 3 +++ .../amd/bar/bar.js | 7 +++++++ ...solutionRelativePathsFromRootDirectory.json | 16 ++++++++-------- .../amd/src/ts/Manager/FieldManager.d.ts | 3 --- .../amd/src/ts/Manager/FieldManager.js | 6 ------ .../amd/src/ts/foo/foo.d.ts | 3 +++ .../amd/src/ts/foo/foo.js | 6 ++++++ .../amd/typings/tsd.d.ts | 3 --- .../amd/typings/tsd.js | 7 ------- .../node/bar/bar.d.ts | 3 +++ .../node/bar/bar.js | 7 +++++++ ...solutionRelativePathsFromRootDirectory.json | 16 ++++++++-------- .../node/src/ts/Manager/FieldManager.d.ts | 3 --- .../node/src/ts/Manager/FieldManager.js | 6 ------ .../node/src/ts/foo/foo.d.ts | 3 +++ .../node/src/ts/foo/foo.js | 6 ++++++ .../node/typings/tsd.d.ts | 3 --- .../node/typings/tsd.js | 7 ------- ...erenceResolutionRelativePathsNoResolve.json | 16 ++++++++-------- ...erenceResolutionRelativePathsNoResolve.json | 16 ++++++++-------- .../amd/FieldManager.d.ts | 3 --- .../amd/FieldManager.js | 6 ------ .../amd/diskFile0.js | 10 +++++----- .../amd/diskFile1.d.ts | 4 ++-- .../amd/foo.d.ts | 3 +++ .../amd/foo.js | 6 ++++++ ...onRelativePathsRelativeToRootDirectory.json | 18 +++++++++--------- .../node/FieldManager.d.ts | 3 --- .../node/FieldManager.js | 6 ------ .../node/diskFile0.js | 10 +++++----- .../node/diskFile1.d.ts | 4 ++-- .../node/foo.d.ts | 3 +++ .../node/foo.js | 6 ++++++ ...onRelativePathsRelativeToRootDirectory.json | 18 +++++++++--------- .../referenceResolutionRelativePaths.json | 6 +++--- ...solutionRelativePathsFromRootDirectory.json | 4 ++-- ...erenceResolutionRelativePathsNoResolve.json | 8 ++++---- ...onRelativePathsRelativeToRootDirectory.json | 6 +++--- .../projects/ReferenceResolution/bar/bar.ts | 4 ++++ .../src/ts/Manager/FieldManager.ts | 4 ---- .../ReferenceResolution/src/ts/foo/foo.ts | 4 ++++ .../ReferenceResolution/typings/tsd.ts | 4 ---- 57 files changed, 190 insertions(+), 196 deletions(-) delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.js delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts delete mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.js create mode 100644 tests/cases/projects/ReferenceResolution/bar/bar.ts delete mode 100644 tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts create mode 100644 tests/cases/projects/ReferenceResolution/src/ts/foo/foo.ts delete mode 100644 tests/cases/projects/ReferenceResolution/typings/tsd.ts diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 35f71ccd5a0..292e945107d 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -303,11 +303,6 @@ class ProjectRunner extends RunnerBase { } }); - console.log("inputFiles"); - ts.forEach(allInputFiles, inputFile => { - console.log(inputFile.emittedFileName); - }); - return compileProjectFiles(compilerResult.moduleKind,getInputFiles, getSourceFileText, writeFile); function findOutpuDtsFile(fileName: string) { @@ -317,7 +312,6 @@ class ProjectRunner extends RunnerBase { return ts.map(allInputFiles, outputFile => outputFile.emittedFileName); } function getSourceFileText(filename: string): string { - console.log("Reading: " + filename + ": " + (ts.forEach(allInputFiles, inputFile => inputFile.emittedFileName === filename ? inputFile.code : undefined) !== undefined)); return ts.forEach(allInputFiles, inputFile => inputFile.emittedFileName === filename ? inputFile.code : undefined); } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js index 3d740c6159a..ae9742b492f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile0.js @@ -1,7 +1,7 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { +/// +// This is bar.ts +var bar = (function () { + function bar() { } - return tsd; + return bar; })(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts index d2cfdf658ef..a21b762e1fc 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/diskFile1.d.ts @@ -1,3 +1,3 @@ -/// -declare class tsd { +/// +declare class bar { } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json index c757106757b..fe07bb38b92 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/amd/referenceResolutionRelativePaths.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts" + "foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../typings/tsd.ts", - "FieldManager.ts" + "../../../bar/bar.ts", + "foo.ts" ], "emittedFiles": [ - "../../../typings/tsd.js", - "../../../typings/tsd.d.ts", - "FieldManager.js", - "FieldManager.d.ts" + "../../../bar/bar.js", + "../../../bar/bar.d.ts", + "foo.js", + "foo.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js index 3d740c6159a..ae9742b492f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile0.js @@ -1,7 +1,7 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { +/// +// This is bar.ts +var bar = (function () { + function bar() { } - return tsd; + return bar; })(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts index d2cfdf658ef..a21b762e1fc 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/diskFile1.d.ts @@ -1,3 +1,3 @@ -/// -declare class tsd { +/// +declare class bar { } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json index c757106757b..fe07bb38b92 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePaths/node/referenceResolutionRelativePaths.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts" + "foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../typings/tsd.ts", - "FieldManager.ts" + "../../../bar/bar.ts", + "foo.ts" ], "emittedFiles": [ - "../../../typings/tsd.js", - "../../../typings/tsd.d.ts", - "FieldManager.js", - "FieldManager.d.ts" + "../../../bar/bar.js", + "../../../bar/bar.d.ts", + "foo.js", + "foo.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.d.ts new file mode 100644 index 00000000000..a21b762e1fc --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.d.ts @@ -0,0 +1,3 @@ +/// +declare class bar { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.js new file mode 100644 index 00000000000..ae9742b492f --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/bar/bar.js @@ -0,0 +1,7 @@ +/// +// This is bar.ts +var bar = (function () { + function bar() { + } + return bar; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json index 328d1ae7cc8..b24993bcf8f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/referenceResolutionRelativePathsFromRootDirectory.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "scenario": "referenceResolution1_FromRootDirectory", "projectRoot": "tests/cases/projects/ReferenceResolution", "inputFiles": [ - "src/ts/Manager/FieldManager.ts" + "src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "typings/tsd.ts", - "src/ts/Manager/FieldManager.ts" + "bar/bar.ts", + "src/ts/foo/foo.ts" ], "emittedFiles": [ - "typings/tsd.js", - "typings/tsd.d.ts", - "src/ts/Manager/FieldManager.js", - "src/ts/Manager/FieldManager.d.ts" + "bar/bar.js", + "bar/bar.d.ts", + "src/ts/foo/foo.js", + "src/ts/foo/foo.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/Manager/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/src/ts/foo/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts deleted file mode 100644 index d2cfdf658ef..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class tsd { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js deleted file mode 100644 index 3d740c6159a..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/amd/typings/tsd.js +++ /dev/null @@ -1,7 +0,0 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { - } - return tsd; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.d.ts new file mode 100644 index 00000000000..a21b762e1fc --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.d.ts @@ -0,0 +1,3 @@ +/// +declare class bar { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.js new file mode 100644 index 00000000000..ae9742b492f --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/bar/bar.js @@ -0,0 +1,7 @@ +/// +// This is bar.ts +var bar = (function () { + function bar() { + } + return bar; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json index 328d1ae7cc8..b24993bcf8f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/referenceResolutionRelativePathsFromRootDirectory.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "scenario": "referenceResolution1_FromRootDirectory", "projectRoot": "tests/cases/projects/ReferenceResolution", "inputFiles": [ - "src/ts/Manager/FieldManager.ts" + "src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "typings/tsd.ts", - "src/ts/Manager/FieldManager.ts" + "bar/bar.ts", + "src/ts/foo/foo.ts" ], "emittedFiles": [ - "typings/tsd.js", - "typings/tsd.d.ts", - "src/ts/Manager/FieldManager.js", - "src/ts/Manager/FieldManager.d.ts" + "bar/bar.js", + "bar/bar.d.ts", + "src/ts/foo/foo.js", + "src/ts/foo/foo.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/Manager/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/src/ts/foo/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts deleted file mode 100644 index d2cfdf658ef..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class tsd { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js b/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js deleted file mode 100644 index 3d740c6159a..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsFromRootDirectory/node/typings/tsd.js +++ /dev/null @@ -1,7 +0,0 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { - } - return tsd; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json index ff05ee05b57..db63a7fd0b7 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json @@ -1,17 +1,17 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts", - "../../../typings/tsd.ts" + "foo.ts", + "../../../bar/bar.ts" ], "resolvedInputFiles": [ "lib.d.ts", - "FieldManager.ts", - "../../../typings/tsd.ts" + "foo.ts", + "../../../bar/bar.ts" ], "emittedFiles": [ - "FieldManager.js", - "../../../typings/tsd.js" + "foo.js", + "../../../bar/bar.js" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json index ff05ee05b57..db63a7fd0b7 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json @@ -1,17 +1,17 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts", - "../../../typings/tsd.ts" + "foo.ts", + "../../../bar/bar.ts" ], "resolvedInputFiles": [ "lib.d.ts", - "FieldManager.ts", - "../../../typings/tsd.ts" + "foo.ts", + "../../../bar/bar.ts" ], "emittedFiles": [ - "FieldManager.js", - "../../../typings/tsd.js" + "foo.js", + "../../../bar/bar.js" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js index 3d740c6159a..ae9742b492f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile0.js @@ -1,7 +1,7 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { +/// +// This is bar.ts +var bar = (function () { + function bar() { } - return tsd; + return bar; })(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts index d2cfdf658ef..a21b762e1fc 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/diskFile1.d.ts @@ -1,3 +1,3 @@ -/// -declare class tsd { +/// +declare class bar { } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json index 8e07c4a02e9..79b73ec775b 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/amd/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_RelativepathToFoo", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "../../../src/ts/Manager/FieldManager.ts" + "../../../src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../typings/tsd.ts", - "../../../src/ts/Manager/FieldManager.ts" + "../../../bar/bar.ts", + "../../../src/ts/foo/foo.ts" ], "emittedFiles": [ - "../../../typings/tsd.js", - "../../../typings/tsd.d.ts", - "../../../src/ts/Manager/FieldManager.js", - "../../../src/ts/Manager/FieldManager.d.ts" + "../../../bar/bar.js", + "../../../bar/bar.d.ts", + "../../../src/ts/foo/foo.js", + "../../../src/ts/foo/foo.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts deleted file mode 100644 index aee3544dd2b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -declare class FieldManager { -} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js deleted file mode 100644 index 91cbe5f761b..00000000000 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/FieldManager.js +++ /dev/null @@ -1,6 +0,0 @@ -/// -var FieldManager = (function () { - function FieldManager() { - } - return FieldManager; -})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js index 3d740c6159a..ae9742b492f 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile0.js @@ -1,7 +1,7 @@ -/// -// This is tsd.ts -var tsd = (function () { - function tsd() { +/// +// This is bar.ts +var bar = (function () { + function bar() { } - return tsd; + return bar; })(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts index d2cfdf658ef..a21b762e1fc 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/diskFile1.d.ts @@ -1,3 +1,3 @@ -/// -declare class tsd { +/// +declare class bar { } diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.d.ts new file mode 100644 index 00000000000..7f80d14325a --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.d.ts @@ -0,0 +1,3 @@ +/// +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json index 8e07c4a02e9..79b73ec775b 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsRelativeToRootDirectory/node/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -1,20 +1,20 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_RelativepathToFoo", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "../../../src/ts/Manager/FieldManager.ts" + "../../../src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", - "../../../typings/tsd.ts", - "../../../src/ts/Manager/FieldManager.ts" + "../../../bar/bar.ts", + "../../../src/ts/foo/foo.ts" ], "emittedFiles": [ - "../../../typings/tsd.js", - "../../../typings/tsd.d.ts", - "../../../src/ts/Manager/FieldManager.js", - "../../../src/ts/Manager/FieldManager.d.ts" + "../../../bar/bar.js", + "../../../bar/bar.d.ts", + "../../../src/ts/foo/foo.js", + "../../../src/ts/foo/foo.d.ts" ] } \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePaths.json b/tests/cases/project/referenceResolutionRelativePaths.json index 2b6539ce48f..f49fd03b224 100644 --- a/tests/cases/project/referenceResolutionRelativePaths.json +++ b/tests/cases/project/referenceResolutionRelativePaths.json @@ -1,8 +1,8 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts" + "foo.ts" ], "declaration": true, "baselineCheck": true diff --git a/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json b/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json index faf4a23b917..392d34a67ad 100644 --- a/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json +++ b/tests/cases/project/referenceResolutionRelativePathsFromRootDirectory.json @@ -1,8 +1,8 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_FromRootDirectory", + "scenario": "referenceResolution1_FromRootDirectory", "projectRoot": "tests/cases/projects/ReferenceResolution", "inputFiles": [ - "src/ts/Manager/FieldManager.ts" + "src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true diff --git a/tests/cases/project/referenceResolutionRelativePathsNoResolve.json b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json index f9ba5b047f9..022a9103830 100644 --- a/tests/cases/project/referenceResolutionRelativePathsNoResolve.json +++ b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json @@ -1,9 +1,9 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_NoResolve", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "FieldManager.ts", - "../../../typings/tsd.ts" + "foo.ts", + "../../../bar/bar.ts" ], "noResolve": true } \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json b/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json index a522596e816..ba8f2da83e3 100644 --- a/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json +++ b/tests/cases/project/referenceResolutionRelativePathsRelativeToRootDirectory.json @@ -1,8 +1,8 @@ { - "scenario": "referenceResolution1_FromFieldManagerFolder_RelativepathToFieldManager", - "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/Manager", + "scenario": "referenceResolution1_FromFooFolder_RelativepathToFoo", + "projectRoot": "tests/cases/projects/ReferenceResolution/src/ts/foo", "inputFiles": [ - "../../../src/ts/Manager/FieldManager.ts" + "../../../src/ts/foo/foo.ts" ], "declaration": true, "baselineCheck": true diff --git a/tests/cases/projects/ReferenceResolution/bar/bar.ts b/tests/cases/projects/ReferenceResolution/bar/bar.ts new file mode 100644 index 00000000000..9fd38a32d64 --- /dev/null +++ b/tests/cases/projects/ReferenceResolution/bar/bar.ts @@ -0,0 +1,4 @@ +/// +// This is bar.ts +class bar { +} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts b/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts deleted file mode 100644 index c45efd43c88..00000000000 --- a/tests/cases/projects/ReferenceResolution/src/ts/Manager/FieldManager.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// - -class FieldManager { -} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/src/ts/foo/foo.ts b/tests/cases/projects/ReferenceResolution/src/ts/foo/foo.ts new file mode 100644 index 00000000000..2ea78e70fa4 --- /dev/null +++ b/tests/cases/projects/ReferenceResolution/src/ts/foo/foo.ts @@ -0,0 +1,4 @@ +/// + +class foo { +} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/typings/tsd.ts b/tests/cases/projects/ReferenceResolution/typings/tsd.ts deleted file mode 100644 index 2d9e3be13c7..00000000000 --- a/tests/cases/projects/ReferenceResolution/typings/tsd.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -// This is tsd.ts -class tsd { -} \ No newline at end of file From 6d4e670c185fb371eaa10c2bcccd6b1c1bdfb20b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 19 Nov 2014 13:08:57 -0800 Subject: [PATCH 079/178] Enable baseline check and declaration emit for --noResolve case of files --- .../amd/diskFile0.js | 7 +++++++ .../amd/diskFile1.d.ts | 2 ++ .../referenceResolutionRelativePathsNoResolve/amd/foo.d.ts | 2 ++ .../referenceResolutionRelativePathsNoResolve/amd/foo.js | 6 ++++++ .../amd/referenceResolutionRelativePathsNoResolve.json | 6 +++++- .../node/diskFile0.js | 7 +++++++ .../node/diskFile1.d.ts | 2 ++ .../node/foo.d.ts | 2 ++ .../referenceResolutionRelativePathsNoResolve/node/foo.js | 6 ++++++ .../node/referenceResolutionRelativePathsNoResolve.json | 6 +++++- .../project/referenceResolutionRelativePathsNoResolve.json | 4 +++- 11 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.js diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile0.js new file mode 100644 index 00000000000..ae9742b492f --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is bar.ts +var bar = (function () { + function bar() { + } + return bar; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile1.d.ts new file mode 100644 index 00000000000..1e341d97853 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class bar { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.d.ts new file mode 100644 index 00000000000..0e91525d82e --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.d.ts @@ -0,0 +1,2 @@ +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json index db63a7fd0b7..16831b328e9 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/amd/referenceResolutionRelativePathsNoResolve.json @@ -5,6 +5,8 @@ "foo.ts", "../../../bar/bar.ts" ], + "declaration": true, + "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", "foo.ts", @@ -12,6 +14,8 @@ ], "emittedFiles": [ "foo.js", - "../../../bar/bar.js" + "foo.d.ts", + "../../../bar/bar.js", + "../../../bar/bar.d.ts" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile0.js new file mode 100644 index 00000000000..ae9742b492f --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile0.js @@ -0,0 +1,7 @@ +/// +// This is bar.ts +var bar = (function () { + function bar() { + } + return bar; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile1.d.ts new file mode 100644 index 00000000000..1e341d97853 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class bar { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.d.ts b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.d.ts new file mode 100644 index 00000000000..0e91525d82e --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.d.ts @@ -0,0 +1,2 @@ +declare class foo { +} diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.js b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.js new file mode 100644 index 00000000000..20440d5c62b --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/foo.js @@ -0,0 +1,6 @@ +/// +var foo = (function () { + function foo() { + } + return foo; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json index db63a7fd0b7..16831b328e9 100644 --- a/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json +++ b/tests/baselines/reference/project/referenceResolutionRelativePathsNoResolve/node/referenceResolutionRelativePathsNoResolve.json @@ -5,6 +5,8 @@ "foo.ts", "../../../bar/bar.ts" ], + "declaration": true, + "baselineCheck": true, "resolvedInputFiles": [ "lib.d.ts", "foo.ts", @@ -12,6 +14,8 @@ ], "emittedFiles": [ "foo.js", - "../../../bar/bar.js" + "foo.d.ts", + "../../../bar/bar.js", + "../../../bar/bar.d.ts" ] } \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionRelativePathsNoResolve.json b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json index 022a9103830..962f9d1a098 100644 --- a/tests/cases/project/referenceResolutionRelativePathsNoResolve.json +++ b/tests/cases/project/referenceResolutionRelativePathsNoResolve.json @@ -5,5 +5,7 @@ "foo.ts", "../../../bar/bar.ts" ], - "noResolve": true + "noResolve": true, + "declaration": true, + "baselineCheck": true } \ No newline at end of file From 8b832a57137f3feb435f46d4f5233395c7163eef Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 13:26:15 -0800 Subject: [PATCH 080/178] Move ambient statement checks to the grammar checker. --- src/compiler/parser.ts | 85 +++++++++++++------ .../accessorsInAmbientContext.errors.txt | 24 +++--- .../reference/ambientGetters.errors.txt | 6 +- .../reference/ambientStatement1.errors.txt | 14 +++ tests/baselines/reference/giant.errors.txt | 35 +------- .../initializersInDeclarations.errors.txt | 5 +- .../reference/parserAccessors5.errors.txt | 6 +- ...StatementsWithMultipleDefaults1.errors.txt | 21 +++++ tests/cases/compiler/ambientStatement1.ts | 5 ++ .../switchStatementsWithMultipleDefaults1.ts | 12 +++ 10 files changed, 133 insertions(+), 80 deletions(-) create mode 100644 tests/baselines/reference/ambientStatement1.errors.txt create mode 100644 tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt create mode 100644 tests/cases/compiler/ambientStatement1.ts create mode 100644 tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4b3443334fd..cbe589f5f04 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3810,20 +3810,9 @@ module ts { } function parseSourceElementOrModuleElement(modifierContext: ModifierContext): Statement { - if (isDeclarationStart()) { - return parseDeclaration(modifierContext); - } - - var statementStart = scanner.getTokenPos(); - var statementFirstTokenLength = scanner.getTextPos() - statementStart; - var errorCountBeforeStatement = file._parserDiagnostics.length; - var statement = parseStatement(); - - if (inAmbientContext && file._parserDiagnostics.length === errorCountBeforeStatement) { - grammarErrorAtPos(statementStart, statementFirstTokenLength, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); - } - - return statement; + return isDeclarationStart() + ? parseDeclaration(modifierContext) + : parseStatement(); } function processReferenceComments(): ReferenceComments { @@ -3970,6 +3959,7 @@ module ts { function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { var syntacticDiagnostics = file._syntacticDiagnostics; + var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText); // We're automatically in an ambient context if this is a .d.ts file. var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); @@ -3977,31 +3967,44 @@ module ts { visitNode(file); function visitNode(node: Node): void { + // Store and restore our recursive state here. var savedParent = parent; node.parent = parent; parent = node; - // First recurse and perform all grammar checks on the children of this node. var savedInAmbientContext = inAmbientContext if (node.flags & NodeFlags.Ambient) { inAmbientContext = true; } - var diagnosticCount = syntacticDiagnostics.length; - forEachChild(node, visitNode); - - // If any children had an grammar error, then skip reporting errors for this node or - // anything higher. - if (diagnosticCount === syntacticDiagnostics.length) { - checkNode(node); - } + checkNode(node); inAmbientContext = savedInAmbientContext; parent = savedParent; } function checkNode(node: Node) { - // No grammar errors on any of our children. Check this node for grammar errors. + // First, check if you have a statement in a place where it is not allowed. We want + // to do this before recursing, because we'd prefer to report these errors at the top + // level instead of at some nested level. + if (checkForStatementInAmbientContext(node)) { + return; + } + + // Now recurse and perform all grammar checks on the children of this node. + var diagnosticCount = syntacticDiagnostics.length; + forEachChild(node, visitNode); + + // if we got any errors, just stop performing any more checks on this node or higher. + if (diagnosticCount !== syntacticDiagnostics.length) { + return; + } + + // Now do node specific checks. + dispatch(node); + } + + function dispatch(node: Node) { switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); @@ -4038,6 +4041,15 @@ module ts { } } + function grammarErrorOnFirstToken(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { + var start = skipTrivia(sourceText, node.pos); + scanner.setTextPos(start); + scanner.scan(); + var end = scanner.getTextPos(); + file._syntacticDiagnostics.push(createFileDiagnostic(file, start, end - start, message, arg0, arg1, arg2)); + return true; + } + function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { var span = getErrorSpanForNode(node); var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; @@ -4058,6 +4070,31 @@ module ts { return grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } + function checkForStatementInAmbientContext(node: Node): boolean { + if (inAmbientContext) { + switch (node.kind) { + case SyntaxKind.Block: + case SyntaxKind.EmptyStatement: + case SyntaxKind.IfStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.ContinueStatement: + case SyntaxKind.BreakStatement: + case SyntaxKind.ReturnStatement: + case SyntaxKind.WithStatement: + case SyntaxKind.SwitchStatement: + case SyntaxKind.ThrowStatement: + case SyntaxKind.TryStatement: + case SyntaxKind.DebuggerStatement: + case SyntaxKind.LabeledStatement: + case SyntaxKind.ExpressionStatement: + return grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); + } + } + } + function visitArrowFunction(node: FunctionExpression) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); diff --git a/tests/baselines/reference/accessorsInAmbientContext.errors.txt b/tests/baselines/reference/accessorsInAmbientContext.errors.txt index ada59f21f65..6028dc898f6 100644 --- a/tests/baselines/reference/accessorsInAmbientContext.errors.txt +++ b/tests/baselines/reference/accessorsInAmbientContext.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/accessorsInAmbientContext.ts(4,13): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/compiler/accessorsInAmbientContext.ts(4,19): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/accessorsInAmbientContext.ts(5,13): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(7,20): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/compiler/accessorsInAmbientContext.ts(7,26): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/accessorsInAmbientContext.ts(8,20): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(13,9): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/compiler/accessorsInAmbientContext.ts(13,15): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/accessorsInAmbientContext.ts(14,9): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(16,16): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/compiler/accessorsInAmbientContext.ts(16,22): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An accessor cannot be declared in an ambient context. @@ -13,15 +13,15 @@ tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An acces declare module M { class C { get X() { return 1; } - ~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. set X(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. static get Y() { return 1; } - ~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. static set Y(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. @@ -30,15 +30,15 @@ tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An acces declare class C { get X() { return 1; } - ~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. set X(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. static get Y() { return 1; } - ~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. static set Y(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. diff --git a/tests/baselines/reference/ambientGetters.errors.txt b/tests/baselines/reference/ambientGetters.errors.txt index a56020c41fb..085b30b758e 100644 --- a/tests/baselines/reference/ambientGetters.errors.txt +++ b/tests/baselines/reference/ambientGetters.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/ambientGetters.ts(3,9): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/ambientGetters.ts(7,9): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/compiler/ambientGetters.ts(7,20): error TS1036: Statements are not allowed in ambient contexts. ==== tests/cases/compiler/ambientGetters.ts (2 errors) ==== @@ -12,6 +12,6 @@ tests/cases/compiler/ambientGetters.ts(7,9): error TS1086: An accessor cannot be declare class B { get length() { return 0; } - ~~~~~~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. } \ No newline at end of file diff --git a/tests/baselines/reference/ambientStatement1.errors.txt b/tests/baselines/reference/ambientStatement1.errors.txt new file mode 100644 index 00000000000..be7c7bb750c --- /dev/null +++ b/tests/baselines/reference/ambientStatement1.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/ambientStatement1.ts(2,6): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/ambientStatement1.ts(4,20): error TS1039: Initializers are not allowed in ambient contexts. + + +==== tests/cases/compiler/ambientStatement1.ts (2 errors) ==== + declare module M1 { + while(true); + ~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. + + export var v1 = () => false; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. + } \ No newline at end of file diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 0aa14ee0cd3..e7785cb0cda 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -30,9 +30,7 @@ tests/cases/compiler/giant.ts(254,21): error TS1037: A function implementation c tests/cases/compiler/giant.ts(255,31): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(257,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(262,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(262,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(267,30): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(267,33): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(283,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(285,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(287,5): error TS1005: '{' expected. @@ -65,9 +63,7 @@ tests/cases/compiler/giant.ts(512,21): error TS1037: A function implementation c tests/cases/compiler/giant.ts(513,31): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(515,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(520,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(520,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(525,30): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(525,33): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(532,31): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(534,20): error TS1111: A constructor implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(537,17): error TS1037: A function implementation cannot be declared in an ambient context. @@ -80,29 +76,22 @@ tests/cases/compiler/giant.ts(548,17): error TS1037: A function implementation c tests/cases/compiler/giant.ts(549,27): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(551,18): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(556,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(556,21): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(558,24): error TS1111: A constructor implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(561,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(563,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(606,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(606,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(611,30): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(611,33): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(615,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(616,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(616,39): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(616,42): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(617,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(618,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(621,26): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(621,29): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(623,24): error TS1111: A constructor implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(626,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(628,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(672,22): error TS1037: A function implementation cannot be declared in an ambient context. -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. @@ -239,7 +228,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (239 errors) ==== +==== tests/cases/compiler/giant.ts (228 errors) ==== /* Prefixes @@ -686,8 +675,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all function F() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } @@ -695,8 +682,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export function eF() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } @@ -1134,8 +1119,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all function F() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } @@ -1143,8 +1126,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export function eF() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } @@ -1224,8 +1205,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all function F() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. class C { constructor () { } ~ @@ -1286,8 +1265,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all function F() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } @@ -1295,8 +1272,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export function eF() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } @@ -1308,8 +1283,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export declare class eaC { } ~~~~~~~ !!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. @@ -1321,8 +1294,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export function eF() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { constructor () { } ~ @@ -1384,16 +1355,12 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all function F() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. class C { } module M { } export var eV; export function eF() { }; ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. - ~ -!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } diff --git a/tests/baselines/reference/initializersInDeclarations.errors.txt b/tests/baselines/reference/initializersInDeclarations.errors.txt index 49a06cf9a29..f91220c91a1 100644 --- a/tests/baselines/reference/initializersInDeclarations.errors.txt +++ b/tests/baselines/reference/initializersInDeclarations.errors.txt @@ -1,10 +1,9 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,7): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,14): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(7,16): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(16,2): error TS1036: Statements are not allowed in ambient contexts. -==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (4 errors) ==== +==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (3 errors) ==== // Errors: Initializers & statements in declaration file @@ -27,8 +26,6 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(16,2): err declare module M1 { while(true); - ~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. export var v1 = () => false; } \ No newline at end of file diff --git a/tests/baselines/reference/parserAccessors5.errors.txt b/tests/baselines/reference/parserAccessors5.errors.txt index b7dcd8ef923..f2e3d8c8d37 100644 --- a/tests/baselines/reference/parserAccessors5.errors.txt +++ b/tests/baselines/reference/parserAccessors5.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts(2,7): error TS1086: An accessor cannot be declared in an ambient context. +tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts(2,15): error TS1036: Statements are not allowed in ambient contexts. ==== tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts (1 errors) ==== declare class C { get foo() { return 0; } - ~~~ -!!! error TS1086: An accessor cannot be declared in an ambient context. + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. } \ No newline at end of file diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt new file mode 100644 index 00000000000..80b0560445a --- /dev/null +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt @@ -0,0 +1,21 @@ +tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts(8,9): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts(9,9): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. + + +==== tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts (2 errors) ==== + var x = 10; + + switch (x) { + case 1: + case 2: + default: // No issues. + break; + default: // Error; second 'default' clause. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. + default: // Error; third 'default' clause. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. + case 3: + x *= x; + } \ No newline at end of file diff --git a/tests/cases/compiler/ambientStatement1.ts b/tests/cases/compiler/ambientStatement1.ts new file mode 100644 index 00000000000..b2d1bb9d499 --- /dev/null +++ b/tests/cases/compiler/ambientStatement1.ts @@ -0,0 +1,5 @@ + declare module M1 { + while(true); + + export var v1 = () => false; + } \ No newline at end of file diff --git a/tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts b/tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts new file mode 100644 index 00000000000..f449cf9beb7 --- /dev/null +++ b/tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts @@ -0,0 +1,12 @@ + var x = 10; + + switch (x) { + case 1: + case 2: + default: // No issues. + break; + default: // Error; second 'default' clause. + default: // Error; third 'default' clause. + case 3: + x *= x; + } \ No newline at end of file From 65918be5e154cdf5afb42261056990871122baee Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 13:36:13 -0800 Subject: [PATCH 081/178] Move heritage checks to the grammar checker. --- src/compiler/parser.ts | 28 ++++++++----------- ...very_ExtendsOrImplementsClause4.errors.txt | 4 +-- ...very_ExtendsOrImplementsClause6.errors.txt | 4 +-- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index cbe589f5f04..54f7a806f3d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3533,16 +3533,13 @@ module ts { function parseClassDeclaration(pos: number, flags: NodeFlags): ClassDeclaration { var node = createNode(SyntaxKind.ClassDeclaration, pos); node.flags = flags; - var errorCountBeforeClassDeclaration = file._parserDiagnostics.length; parseExpected(SyntaxKind.ClassKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); // TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates + node.baseType = parseOptional(SyntaxKind.ExtendsKeyword) ? parseTypeReference() : undefined; - var implementsKeywordStart = scanner.getTokenPos(); - var implementsKeywordLength: number; if (parseOptional(SyntaxKind.ImplementsKeyword)) { - implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } var errorCountBeforeClassBody = file._parserDiagnostics.length; @@ -3553,31 +3550,20 @@ module ts { else { node.members = createMissingList(); } - if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { - grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, Diagnostics._0_list_cannot_be_empty, "implements"); - } return finishNode(node); } function parseInterfaceDeclaration(pos: number, flags: NodeFlags): InterfaceDeclaration { var node = createNode(SyntaxKind.InterfaceDeclaration, pos); node.flags = flags; - var errorCountBeforeInterfaceDeclaration = file._parserDiagnostics.length; parseExpected(SyntaxKind.InterfaceKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); // TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates - var extendsKeywordStart = scanner.getTokenPos(); - var extendsKeywordLength: number; if (parseOptional(SyntaxKind.ExtendsKeyword)) { - extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; node.baseTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } - var errorCountBeforeInterfaceBody = file._parserDiagnostics.length; node.members = parseTypeLiteral().members; - if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { - grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, Diagnostics._0_list_cannot_be_empty, "extends"); - } return finishNode(node); } @@ -4152,7 +4138,14 @@ module ts { } function visitClassDeclaration(node: ClassDeclaration) { - checkForTrailingComma(node.implementedTypes); + checkForTrailingComma(node.implementedTypes) || + checkForAtLeastOneHeritageClause(node.implementedTypes, "implements"); + } + + function checkForAtLeastOneHeritageClause(types: NodeArray, listType: string): boolean { + if (types && types.length === 0) { + return grammarErrorAtPos(types.pos, 0, Diagnostics._0_list_cannot_be_empty, listType) + } } function visitConstructor(node: ConstructorDeclaration) { @@ -4315,7 +4308,8 @@ module ts { } function visitInterfaceDeclaration(node: InterfaceDeclaration) { - checkForTrailingComma(node.baseTypes); + checkForTrailingComma(node.baseTypes) || + checkForAtLeastOneHeritageClause(node.baseTypes, "extends"); } function visitMethod(node: MethodDeclaration) { diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.errors.txt b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.errors.txt index 6ec231b9336..6d637831c45 100644 --- a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause4.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause4.ts(1,19): error TS1097: 'implements' list cannot be empty. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause4.ts(1,29): error TS1097: 'implements' list cannot be empty. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause4.ts(1,17): error TS2304: Cannot find name 'A'. ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause4.ts (2 errors) ==== class C extends A implements { - ~~~~~~~~~~ + !!! error TS1097: 'implements' list cannot be empty. ~ !!! error TS2304: Cannot find name 'A'. diff --git a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.errors.txt b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.errors.txt index 1f235691df8..2f7ca3d99ae 100644 --- a/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ExtendsOrImplementsClause6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause6.ts(1,13): error TS1097: 'extends' list cannot be empty. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause6.ts(1,20): error TS1097: 'extends' list cannot be empty. ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ExtendsOrImplementsClauses/parserErrorRecovery_ExtendsOrImplementsClause6.ts (1 errors) ==== interface I extends { } - ~~~~~~~ + !!! error TS1097: 'extends' list cannot be empty. \ No newline at end of file From 67afd6d570b5f7fabd93ed7517e60e66e4672dd8 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 14:01:03 -0800 Subject: [PATCH 082/178] Move ambient function block checks to the grammar checker. --- src/compiler/parser.ts | 37 ++-- .../reference/ambientErrors.errors.txt | 17 +- .../reference/exportDeclareClass1.errors.txt | 8 +- tests/baselines/reference/giant.errors.txt | 164 +----------------- .../initializersInDeclarations.errors.txt | 5 +- .../parserFunctionDeclaration2.d.errors.txt | 5 +- 6 files changed, 27 insertions(+), 209 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 54f7a806f3d..610288da1a7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3156,21 +3156,16 @@ module ts { } } - function parseAndCheckFunctionBody(isConstructor: boolean): Block { - var initialPosition = scanner.getTokenPos(); - var errorCountBeforeBody = file._parserDiagnostics.length; + function parseFunctionBlockOrSemicolon(): Block { if (token === SyntaxKind.OpenBraceToken) { - var body = parseBody(/* ignoreMissingOpenBrace */ false); - if (body && inAmbientContext && file._parserDiagnostics.length === errorCountBeforeBody) { - var diagnostic = isConstructor ? Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; - grammarErrorAtPos(initialPosition, 1, diagnostic); - } - return body; + return parseBody(/* ignoreMissingOpenBrace */ false); } + if (canParseSemicolon()) { parseSemicolon(); return undefined; } + error(Diagnostics.Block_or_expected); // block or ';' expected } @@ -3225,7 +3220,7 @@ module ts { node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(/*isConstructor*/ false); + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } @@ -3237,7 +3232,7 @@ module ts { node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(/*isConstructor*/ true); + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } @@ -3258,7 +3253,7 @@ module ts { method.typeParameters = sig.typeParameters; method.parameters = sig.parameters; method.type = sig.type; - method.body = parseAndCheckFunctionBody(/*isConstructor*/ false); + method.body = parseFunctionBlockOrSemicolon(); return finishNode(method); } else { @@ -4152,7 +4147,8 @@ module ts { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || checkConstructorTypeParameters(node) || - checkConstructorTypeAnnotation(node); + checkConstructorTypeAnnotation(node) || + checkForBodyInAmbientContext(node.body, /*isConstructor:*/ true); } function checkConstructorTypeParameters(node: ConstructorDeclaration) { @@ -4242,7 +4238,8 @@ module ts { function visitFunctionDeclaration(node: FunctionLikeDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || - checkFunctionName(node.name); + checkFunctionName(node.name) || + checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false); } function visitFunctionExpression(node: FunctionExpression) { @@ -4314,7 +4311,17 @@ module ts { function visitMethod(node: MethodDeclaration) { checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParameterList(node.parameters) || + checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false); + } + + function checkForBodyInAmbientContext(body: Block | Expression, isConstructor: boolean): boolean { + if (inAmbientContext && body && body.kind === SyntaxKind.FunctionBlock) { + var diagnostic = isConstructor + ? Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context + : Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; + return grammarErrorOnFirstToken(body, diagnostic); + } } function visitModuleDeclaration(node: ModuleDeclaration): void { diff --git a/tests/baselines/reference/ambientErrors.errors.txt b/tests/baselines/reference/ambientErrors.errors.txt index e89586275a3..a1e85be7401 100644 --- a/tests/baselines/reference/ambientErrors.errors.txt +++ b/tests/baselines/reference/ambientErrors.errors.txt @@ -1,10 +1,5 @@ -tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/ambient/ambientErrors.ts(37,18): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/ambient/ambientErrors.ts(38,11): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/ambient/ambientErrors.ts(39,23): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/conformance/ambient/ambientErrors.ts(40,14): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/conformance/ambient/ambientErrors.ts(41,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/ambient/ambientErrors.ts(6,1): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/ambient/ambientErrors.ts(17,22): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. tests/cases/conformance/ambient/ambientErrors.ts(47,20): error TS2435: Ambient external modules cannot be nested in other modules. @@ -12,7 +7,7 @@ tests/cases/conformance/ambient/ambientErrors.ts(51,16): error TS2436: Ambient e tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export assignment cannot be used in a module with other exported elements. -==== tests/cases/conformance/ambient/ambientErrors.ts (12 errors) ==== +==== tests/cases/conformance/ambient/ambientErrors.ts (7 errors) ==== // Ambient variable with an initializer declare var x = 4; @@ -37,8 +32,6 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export // Ambient function with function body declare function fn4() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. // Ambient enum with non - integer literal constant member declare enum E1 { @@ -54,8 +47,6 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export declare module M1 { var x = 3; function fn() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { static x = 3; ~ @@ -64,14 +55,8 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export ~ !!! error TS1039: Initializers are not allowed in ambient contexts. constructor() { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. fn() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. static sfn() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. } } diff --git a/tests/baselines/reference/exportDeclareClass1.errors.txt b/tests/baselines/reference/exportDeclareClass1.errors.txt index 36103269f83..c93dc5d0b01 100644 --- a/tests/baselines/reference/exportDeclareClass1.errors.txt +++ b/tests/baselines/reference/exportDeclareClass1.errors.txt @@ -1,19 +1,13 @@ -tests/cases/compiler/exportDeclareClass1.ts(2,21): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/exportDeclareClass1.ts(2,24): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/compiler/exportDeclareClass1.ts(3,31): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/exportDeclareClass1.ts(3,34): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -==== tests/cases/compiler/exportDeclareClass1.ts (4 errors) ==== +==== tests/cases/compiler/exportDeclareClass1.ts (2 errors) ==== export declare class eaC { static tF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~ !!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. static tsF(param:any) { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~ !!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. }; diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index e7785cb0cda..d70ac7013dd 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -10,27 +10,12 @@ tests/cases/compiler/giant.ts(93,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(95,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(99,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(101,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(154,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(168,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(170,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(172,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(174,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(178,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(180,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(233,39): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(238,35): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(240,24): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(243,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(244,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(245,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(247,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(249,23): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(251,32): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(254,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(255,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(257,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(262,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(267,30): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(283,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(285,5): error TS1005: '{' expected. tests/cases/compiler/giant.ts(287,5): error TS1005: '{' expected. @@ -43,55 +28,16 @@ tests/cases/compiler/giant.ts(351,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(353,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(357,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(359,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(412,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(426,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(428,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(430,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(432,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(436,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(438,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(491,39): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(496,35): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(498,24): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(501,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(502,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(503,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(505,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(507,23): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(509,32): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(512,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(513,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(515,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(520,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(525,30): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(532,31): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(534,20): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(537,17): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(538,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(539,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(541,27): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(543,19): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(545,28): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(548,17): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(549,27): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(551,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(556,18): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(558,24): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(561,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(563,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(606,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(611,30): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(615,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(616,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/giant.ts(616,39): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(617,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/giant.ts(618,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/giant.ts(621,26): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(623,24): error TS1111: A constructor implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(626,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(628,21): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(672,22): error TS1037: A function implementation cannot be declared in an ambient context. -tests/cases/compiler/giant.ts(676,30): error TS1037: A function implementation cannot be declared in an ambient context. 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. @@ -228,7 +174,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (228 errors) ==== +==== tests/cases/compiler/giant.ts (174 errors) ==== /* Prefixes @@ -471,8 +417,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } @@ -596,54 +540,36 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) @@ -651,19 +577,13 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. 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 TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() @@ -673,15 +593,11 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export declare module eaM { var V; function F() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { } interface I { } module M { } export var eV; export function eF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export class eC { } export interface eI { } export module eM { } @@ -915,8 +831,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } @@ -1040,54 +954,36 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) @@ -1095,19 +991,13 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. 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 TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() @@ -1117,15 +1007,11 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export declare module eaM { var V; function F() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { } interface I { } module M { } export var eV; export function eF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export class eC { } export interface eI { } export module eM { } @@ -1133,47 +1019,31 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all } export declare var eaV; export declare function eaF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) @@ -1181,19 +1051,13 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. 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 TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() @@ -1203,21 +1067,13 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export declare module eaM { var V; function F() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { constructor () { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. static tV; static tF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. } interface I { //Call Signature @@ -1263,15 +1119,11 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all module M { var V; function F() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { } interface I { } module M { } export var eV; export function eF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export class eC { } export interface eI { } export module eM { } @@ -1281,8 +1133,6 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export declare function eaF() { }; ~~~~~~~ !!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { } ~~~~~~~ !!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. @@ -1292,21 +1142,13 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all } export var eV; export function eF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export class eC { constructor () { } - ~ -!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. static tV static tF() { } - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. } export interface eI { //Call Signature @@ -1353,14 +1195,10 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { var V; function F() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. class C { } module M { } export var eV; export function eF() { }; - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. export class eC { } export interface eI { } export module eM { } diff --git a/tests/baselines/reference/initializersInDeclarations.errors.txt b/tests/baselines/reference/initializersInDeclarations.errors.txt index f91220c91a1..9e02a1cd747 100644 --- a/tests/baselines/reference/initializersInDeclarations.errors.txt +++ b/tests/baselines/reference/initializersInDeclarations.errors.txt @@ -1,9 +1,8 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,7): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,14): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(7,16): error TS1037: A function implementation cannot be declared in an ambient context. -==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (3 errors) ==== +==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (2 errors) ==== // Errors: Initializers & statements in declaration file @@ -15,8 +14,6 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(7,16): err ~ !!! error TS1039: Initializers are not allowed in ambient contexts. fn(): boolean { - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. return false; } } diff --git a/tests/baselines/reference/parserFunctionDeclaration2.d.errors.txt b/tests/baselines/reference/parserFunctionDeclaration2.d.errors.txt index 76d47a0a9d4..f623642e827 100644 --- a/tests/baselines/reference/parserFunctionDeclaration2.d.errors.txt +++ b/tests/baselines/reference/parserFunctionDeclaration2.d.errors.txt @@ -1,11 +1,8 @@ tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration2.d.ts(1,1): error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. -tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration2.d.ts(1,14): error TS1037: A function implementation cannot be declared in an ambient context. -==== tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration2.d.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/FunctionDeclarations/parserFunctionDeclaration2.d.ts (1 errors) ==== function F() { ~~~~~~~~ !!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. - ~ -!!! error TS1037: A function implementation cannot be declared in an ambient context. } \ No newline at end of file From 9ca17f9b2940e21a4172a81e28b0facd4963b162 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 14:07:25 -0800 Subject: [PATCH 083/178] Move with checks to the grammar checker. --- src/compiler/parser.ts | 27 ++++++++++--------- .../methodInAmbientClass1.errors.txt | 13 +++++++++ tests/cases/compiler/methodInAmbientClass1.ts | 4 +++ 3 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 tests/baselines/reference/methodInAmbientClass1.errors.txt create mode 100644 tests/cases/compiler/methodInAmbientClass1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 610288da1a7..b20c8959307 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2896,20 +2896,12 @@ module ts { function parseWithStatement(): WithStatement { var node = createNode(SyntaxKind.WithStatement); - var startPos = scanner.getTokenPos(); parseExpected(SyntaxKind.WithKeyword); - var endPos = scanner.getStartPos(); parseExpected(SyntaxKind.OpenParenToken); node.expression = parseExpression(); parseExpected(SyntaxKind.CloseParenToken); node.statement = parseStatement(); - node = finishNode(node); - if (isInStrictMode) { - // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such - // a context is an - grammarErrorAtPos(startPos, endPos - startPos, Diagnostics.with_statements_are_not_allowed_in_strict_mode); - } - return node; + return finishNode(node); } function parseCaseClause(): CaseOrDefaultClause { @@ -4019,6 +4011,7 @@ module ts { case SyntaxKind.TypeReference: return visitTypeReference(node); case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); case SyntaxKind.VariableStatement: return visitVariableStatement(node); + case SyntaxKind.WithStatement: return visitWithStatement(node); } } @@ -4630,8 +4623,8 @@ module ts { } } - function allowLetAndConstDeclarations(node: Node): boolean { - switch (node.kind) { + function allowLetAndConstDeclarations(parent: Node): boolean { + switch (parent.kind) { case SyntaxKind.IfStatement: case SyntaxKind.DoStatement: case SyntaxKind.WhileStatement: @@ -4640,11 +4633,19 @@ module ts { case SyntaxKind.ForInStatement: return false; case SyntaxKind.LabeledStatement: - return allowLetAndConstDeclarations(node.parent); + return allowLetAndConstDeclarations(parent.parent); } return true; - } + } + + function visitWithStatement(node: WithStatement): void { + if (node.flags & NodeFlags.ParsedInStrictMode) { + // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such + // a context is an + grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } } export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { diff --git a/tests/baselines/reference/methodInAmbientClass1.errors.txt b/tests/baselines/reference/methodInAmbientClass1.errors.txt new file mode 100644 index 00000000000..3bf8f8af12a --- /dev/null +++ b/tests/baselines/reference/methodInAmbientClass1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/methodInAmbientClass1.ts(2,20): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/methodInAmbientClass1.ts(2,12): 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/methodInAmbientClass1.ts (2 errors) ==== + declare class Foo { + fn(): boolean { + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~~~~~ +!!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. + } + } \ No newline at end of file diff --git a/tests/cases/compiler/methodInAmbientClass1.ts b/tests/cases/compiler/methodInAmbientClass1.ts new file mode 100644 index 00000000000..8590977f89b --- /dev/null +++ b/tests/cases/compiler/methodInAmbientClass1.ts @@ -0,0 +1,4 @@ + declare class Foo { + fn(): boolean { + } + } \ No newline at end of file From 4ba3bf5784af5ca139dc0dbc31ef572d3de26b24 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Wed, 19 Nov 2014 14:19:59 -0800 Subject: [PATCH 084/178] move break\continue checks out of parser --- src/compiler/parser.ts | 326 +++++------------- .../reference/parserPublicBreak1.errors.txt | 5 +- .../reference/standaloneBreak.errors.txt | 7 + tests/cases/compiler/standaloneBreak.ts | 1 + 4 files changed, 103 insertions(+), 236 deletions(-) create mode 100644 tests/baselines/reference/standaloneBreak.errors.txt create mode 100644 tests/cases/compiler/standaloneBreak.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9ec45f91d12..25f470d5919 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -739,22 +739,6 @@ module ts { Parameters, // Parameters in parameter list } - // Tracks whether we nested (directly or indirectly) in a certain control block. - // Used for validating break and continue statements. - const enum ControlBlockContext { - NotNested, - Nested, - CrossingFunctionBoundary - } - - interface LabelledStatementInfo { - addLabel(label: Identifier): void; - pushCurrentLabelSet(isIterationStatement: boolean): void; - pushFunctionBoundary(): void; - pop(): void; - nodeIsNestedInLabel(label: Identifier, requireIterationStatement: boolean, stopAtFunctionBoundary: boolean): ControlBlockContext; - } - export interface ReferencePathMatchResult { fileReference?: FileReference diagnostic?: DiagnosticMessage @@ -856,112 +840,6 @@ module ts { var lookAheadMode = LookAheadMode.NotLookingAhead; var inAmbientContext = false; var inFunctionBody = false; - var inSwitchStatement = ControlBlockContext.NotNested; - var inIterationStatement = ControlBlockContext.NotNested; - - // The following is a state machine that tracks what labels are in our current parsing - // context. So if we are parsing a node that is nested (arbitrarily deeply) in a label, - // it will be tracked in this data structure. It is used for checking break/continue - // statements, and checking for duplicate labels. - var labelledStatementInfo: LabelledStatementInfo = (() => { - // These are initialized on demand because labels are rare, so it is usually - // not even necessary to allocate these. - var functionBoundarySentinel: StringSet; - var currentLabelSet: StringSet; - var labelSetStack: StringSet[]; - var isIterationStack: boolean[]; - - function addLabel(label: Identifier): void { - if (!currentLabelSet) { - currentLabelSet = {}; - } - currentLabelSet[label.text] = true; - } - - function pushCurrentLabelSet(isIterationStatement: boolean): void { - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - Debug.assert(currentLabelSet !== undefined); - labelSetStack.push(currentLabelSet); - isIterationStack.push(isIterationStatement); - currentLabelSet = undefined; - } - - function pushFunctionBoundary(): void { - if (!functionBoundarySentinel) { - functionBoundarySentinel = {}; - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - } - Debug.assert(currentLabelSet === undefined); - labelSetStack.push(functionBoundarySentinel); - - // It does not matter what we push here, since we will never ask if a function boundary - // is an iteration statement - isIterationStack.push(false); - } - - function pop(): void { - // Assert that we are in a "pushed" state - Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); - labelSetStack.pop(); - isIterationStack.pop(); - } - - function nodeIsNestedInLabel(label: Identifier, requireIterationStatement: boolean, stopAtFunctionBoundary: boolean): ControlBlockContext { - if (!requireIterationStatement && currentLabelSet && hasProperty(currentLabelSet, label.text)) { - return ControlBlockContext.Nested; - } - - if (!labelSetStack) { - return ControlBlockContext.NotNested; - } - - // We want to start searching for the label at the lowest point in the tree, - // and climb up from there. So we start at the end of the labelSetStack array. - var crossedFunctionBoundary = false; - for (var i = labelSetStack.length - 1; i >= 0; i--) { - var labelSet = labelSetStack[i]; - // Not allowed to cross function boundaries, so stop if we encounter one - if (labelSet === functionBoundarySentinel) { - if (stopAtFunctionBoundary) { - break; - } - else { - crossedFunctionBoundary = true; - continue; - } - } - - // If we require an iteration statement, only search in the current - // statement if it is an iteration statement - if (requireIterationStatement && isIterationStack[i] === false) { - continue; - } - - if (hasProperty(labelSet, label.text)) { - return crossedFunctionBoundary ? ControlBlockContext.CrossingFunctionBoundary : ControlBlockContext.Nested; - } - } - - // This is a bit of a misnomer. If the caller passed true for stopAtFunctionBoundary, - // there actually may be an enclosing label across a function boundary, but we will - // just return NotNested - return ControlBlockContext.NotNested; - } - - return { - addLabel: addLabel, - pushCurrentLabelSet: pushCurrentLabelSet, - pushFunctionBoundary: pushFunctionBoundary, - pop: pop, - nodeIsNestedInLabel: nodeIsNestedInLabel, - }; - })(); function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); @@ -2660,25 +2538,11 @@ module ts { function parseBody(ignoreMissingOpenBrace: boolean): Block { var saveInFunctionBody = inFunctionBody; - var saveInSwitchStatement = inSwitchStatement; - var saveInIterationStatement = inIterationStatement; inFunctionBody = true; - if (inSwitchStatement === ControlBlockContext.Nested) { - inSwitchStatement = ControlBlockContext.CrossingFunctionBoundary; - } - if (inIterationStatement === ControlBlockContext.Nested) { - inIterationStatement = ControlBlockContext.CrossingFunctionBoundary; - } - labelledStatementInfo.pushFunctionBoundary(); - var block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true); block.kind = SyntaxKind.FunctionBlock; - - labelledStatementInfo.pop(); inFunctionBody = saveInFunctionBody; - inSwitchStatement = saveInSwitchStatement; - inIterationStatement = saveInIterationStatement; return block; } @@ -2704,10 +2568,7 @@ module ts { var node = createNode(SyntaxKind.DoStatement); parseExpected(SyntaxKind.DoKeyword); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = ControlBlockContext.Nested; node.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; parseExpected(SyntaxKind.WhileKeyword); parseExpected(SyntaxKind.OpenParenToken); @@ -2729,10 +2590,7 @@ module ts { node.expression = parseExpression(); parseExpected(SyntaxKind.CloseParenToken); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = ControlBlockContext.Nested; node.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; return finishNode(node); } @@ -2789,10 +2647,7 @@ module ts { forOrForInStatement = forStatement; } - var saveInIterationStatement = inIterationStatement; - inIterationStatement = ControlBlockContext.Nested; forOrForInStatement.statement = parseStatement(); - inIterationStatement = saveInIterationStatement; return finishNode(forOrForInStatement); } @@ -2805,78 +2660,9 @@ module ts { parseSemicolon(); finishNode(node); - // In an ambient context, we will already give an error for having a statement. - if (!inAmbientContext && errorCountBeforeStatement === file._parserDiagnostics.length) { - if (node.label) { - checkBreakOrContinueStatementWithLabel(node); - } - else { - checkBareBreakOrContinueStatement(node); - } - } return node; } - function checkBareBreakOrContinueStatement(node: BreakOrContinueStatement): void { - if (node.kind === SyntaxKind.BreakStatement) { - if (inIterationStatement === ControlBlockContext.Nested - || inSwitchStatement === ControlBlockContext.Nested) { - return; - } - else if (inIterationStatement === ControlBlockContext.NotNested - && inSwitchStatement === ControlBlockContext.NotNested) { - grammarErrorOnNode(node, Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); - return; - } - // Fall through - } - else if (node.kind === SyntaxKind.ContinueStatement) { - if (inIterationStatement === ControlBlockContext.Nested) { - return; - } - else if (inIterationStatement === ControlBlockContext.NotNested) { - grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); - return; - } - // Fall through - } - else { - Debug.fail("checkAnonymousBreakOrContinueStatement"); - } - - Debug.assert(inIterationStatement === ControlBlockContext.CrossingFunctionBoundary - || inSwitchStatement === ControlBlockContext.CrossingFunctionBoundary); - grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); - } - - function checkBreakOrContinueStatementWithLabel(node: BreakOrContinueStatement): void { - // For error specificity, if the label is not found, we want to distinguish whether it is because - // it crossed a function boundary or it was simply not found. To do this, we pass false for - // stopAtFunctionBoundary. - var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, - /*requireIterationStatement*/ node.kind === SyntaxKind.ContinueStatement, - /*stopAtFunctionBoundary*/ false); - if (nodeIsNestedInLabel === ControlBlockContext.Nested) { - return; - } - - if (nodeIsNestedInLabel === ControlBlockContext.CrossingFunctionBoundary) { - grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); - return; - } - - // It is NotNested - if (node.kind === SyntaxKind.ContinueStatement) { - grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); - } - else if (node.kind === SyntaxKind.BreakStatement) { - grammarErrorOnNode(node, Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); - } - else { - Debug.fail("checkBreakOrContinueStatementWithLabel"); - } - } - function parseReturnStatement(): ReturnStatement { var node = createNode(SyntaxKind.ReturnStatement); var errorCountBeforeReturnStatement = file._parserDiagnostics.length; @@ -2941,10 +2727,7 @@ module ts { parseExpected(SyntaxKind.CloseParenToken); parseExpected(SyntaxKind.OpenBraceToken); - var saveInSwitchStatement = inSwitchStatement; - inSwitchStatement = ControlBlockContext.Nested; node.clauses = parseList(ParsingContext.SwitchClauses, /*checkForStrictMode*/ false, parseCaseOrDefaultClause); - inSwitchStatement = saveInSwitchStatement; parseExpected(SyntaxKind.CloseBraceToken); @@ -3023,13 +2806,6 @@ module ts { return token === SyntaxKind.WhileKeyword || token === SyntaxKind.DoKeyword || token === SyntaxKind.ForKeyword; } - function parseStatementWithLabelSet(): Statement { - labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); - var statement = parseStatement(); - labelledStatementInfo.pop(); - return statement; - } - function isLabel(): boolean { return isIdentifier() && lookAhead(() => nextToken() === SyntaxKind.ColonToken); } @@ -3039,14 +2815,7 @@ module ts { node.label = parseIdentifier(); parseExpected(SyntaxKind.ColonToken); - if (labelledStatementInfo.nodeIsNestedInLabel(node.label, /*requireIterationStatement*/ false, /*stopAtFunctionBoundary*/ true)) { - grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); - } - labelledStatementInfo.addLabel(node.label); - - // We only want to call parseStatementWithLabelSet when the label set is complete - // Therefore, keep parsing labels until we know we're done. - node.statement = isLabel() ? parseLabeledStatement() : parseStatementWithLabelSet(); + node.statement = isLabel() ? parseLabeledStatement() : parseStatement(); return finishNode(node); } @@ -4015,6 +3784,7 @@ module ts { switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); + case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); case SyntaxKind.CallExpression: return visitCallExpression(node); case SyntaxKind.CallSignature: return visitCallSignature(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); @@ -4022,6 +3792,7 @@ module ts { case SyntaxKind.Constructor: return visitConstructor(node); case SyntaxKind.ConstructorType: return visitConstructorType(node); case SyntaxKind.ConstructSignature: return visitConstructSignature(node); + case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); case SyntaxKind.ForInStatement: return visitForInStatement(node); case SyntaxKind.ForStatement: return visitForStatement(node); @@ -4031,6 +3802,7 @@ module ts { case SyntaxKind.GetAccessor: return visitGetAccessor(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); + case SyntaxKind.LabeledStatement: return visitLabeledStatement(node); case SyntaxKind.Method: return visitMethod(node); case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); case SyntaxKind.NewExpression: return visitNewExpression(node); @@ -4084,6 +3856,96 @@ module ts { } } + function visitBreakOrContinueStatement(node: BreakOrContinueStatement): void { + checkBreakOrContinueStatement(node); + } + + function visitLabeledStatement(node: LabeledStatement): void { + checkLabeledStatement(node); + } + + function isIterationStatement(node: Node, lookInLabeledStatements: boolean): boolean { + switch (node.kind) { + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + return true; + case SyntaxKind.LabeledStatement: + return lookInLabeledStatements && isIterationStatement((node).statement, lookInLabeledStatements); + } + + return false; + } + + function checkLabeledStatement(node: LabeledStatement): boolean { + // ensure that label is unique + var current = node.parent; + while (current) { + if (isAnyFunction(current)) { + break; + } + if (current.kind === SyntaxKind.LabeledStatement && (current).label.text === node.label.text) { + return grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); + } + current = current.parent; + } + } + + function checkBreakOrContinueStatement(node: BreakOrContinueStatement): boolean { + var current = node; + while (current) { + if (isAnyFunction(current)) { + return grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); + } + + switch (current.kind) { + case SyntaxKind.LabeledStatement: + if (node.label && (current).label.text === node.label.text) { + // found matching label - verify that label usage is correct + // continue can only target labels that are on iteration statements + var isMisplacedContinueLabel = node.kind === SyntaxKind.ContinueStatement + && !isIterationStatement((current).statement, /*lookInLabeledStatement*/ true); + + if (isMisplacedContinueLabel) { + return grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + + return false; + } + break; + case SyntaxKind.SwitchStatement: + if (node.kind === SyntaxKind.BreakStatement && !node.label) { + // unlabeled break within switch statement - ok + return false; + } + break; + default: + if (isIterationStatement(current, /*lookInLabeledStatement*/ false) && !node.label) { + // unlabeled break or continue within iteration statement - ok + return false; + } + break; + } + + current = current.parent; + } + + if (node.label) { + var message = node.kind === SyntaxKind.BreakStatement + ? Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement + : Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement; + + return grammarErrorOnNode(node, message) + } + else { + var message = node.kind === SyntaxKind.BreakStatement + ? Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement + : Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message) + } + } + function visitCallExpression(node: CallExpression) { checkForTrailingComma(node.typeArguments) || checkForAtLeastOneTypeArgument(node.typeArguments) || diff --git a/tests/baselines/reference/parserPublicBreak1.errors.txt b/tests/baselines/reference/parserPublicBreak1.errors.txt index b96046d8e21..429a63ace4b 100644 --- a/tests/baselines/reference/parserPublicBreak1.errors.txt +++ b/tests/baselines/reference/parserPublicBreak1.errors.txt @@ -1,11 +1,8 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserPublicBreak1.ts(1,1): error TS1128: Declaration or statement expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserPublicBreak1.ts(1,8): error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserPublicBreak1.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserPublicBreak1.ts (1 errors) ==== public break; ~~~~~~ !!! error TS1128: Declaration or statement expected. - ~~~~~~ -!!! error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/baselines/reference/standaloneBreak.errors.txt b/tests/baselines/reference/standaloneBreak.errors.txt new file mode 100644 index 00000000000..86e5d719a94 --- /dev/null +++ b/tests/baselines/reference/standaloneBreak.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/standaloneBreak.ts(1,1): error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement. + + +==== tests/cases/compiler/standaloneBreak.ts (1 errors) ==== + break; + ~~~~~~ +!!! error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement. \ No newline at end of file diff --git a/tests/cases/compiler/standaloneBreak.ts b/tests/cases/compiler/standaloneBreak.ts new file mode 100644 index 00000000000..8cb76cf02d7 --- /dev/null +++ b/tests/cases/compiler/standaloneBreak.ts @@ -0,0 +1 @@ +break; \ No newline at end of file From f634bc19d867fed057cc8fa7ebee6da7382a31b7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 14:29:20 -0800 Subject: [PATCH 085/178] Expose parse errors and grammar errors off the source file. --- src/compiler/parser.ts | 70 +++++++++++++++++++--------------------- src/compiler/types.ts | 9 ++++++ src/services/services.ts | 2 ++ 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b20c8959307..073feeaa493 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -832,10 +832,6 @@ module ts { } interface SourceFileInternal extends SourceFile { - // Diagnostics produced only by the parser. Does not include any diagnostics produced by - // doing grammar checks. - _parserDiagnostics: Diagnostic[]; - // All diagnostics for the source file. Should not be accessed directly. Lazily created // when getSyntacticDiagnostics is called. _syntacticDiagnostics: Diagnostic[]; @@ -996,21 +992,21 @@ module ts { var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; var length = span.end - start; - file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + file.parseDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - file._parserDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + file.parseDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } function errorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - var lastErrorPos = file._parserDiagnostics.length - ? file._parserDiagnostics[file._parserDiagnostics.length - 1].start + var lastErrorPos = file.parseDiagnostics.length + ? file.parseDiagnostics[file.parseDiagnostics.length - 1].start : -1; if (start !== lastErrorPos) { var diagnostic = createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); diagnostic.isParseError = true; - file._parserDiagnostics.push(diagnostic); + file.parseDiagnostics.push(diagnostic); } if (lookAheadMode === LookAheadMode.NoErrorYet) { @@ -1059,7 +1055,7 @@ module ts { // Keep track of the state we'll need to rollback to if lookahead fails (or if the // caller asked us to always reset our state). var saveToken = token; - var saveSyntacticErrorsLength = file._parserDiagnostics.length; + var saveSyntacticErrorsLength = file.parseDiagnostics.length; // Keep track of the current look ahead mode (this matters if we have nested // speculative parsing). @@ -1081,7 +1077,7 @@ module ts { lookAheadMode = saveLookAheadMode; if (!result || alwaysResetState) { token = saveToken; - file._parserDiagnostics.length = saveSyntacticErrorsLength; + file.parseDiagnostics.length = saveSyntacticErrorsLength; } return result; @@ -1766,9 +1762,9 @@ module ts { function parseTupleType(): TupleTypeNode { var node = createNode(SyntaxKind.TupleType); var startTokenPos = scanner.getTokenPos(); - var startErrorCount = file._parserDiagnostics.length; + var startErrorCount = file.parseDiagnostics.length; node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); - if (!node.elementTypes.length && file._parserDiagnostics.length === startErrorCount) { + if (!node.elementTypes.length && file.parseDiagnostics.length === startErrorCount) { grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, Diagnostics.A_tuple_type_element_list_cannot_be_empty); } return finishNode(node); @@ -2799,14 +2795,14 @@ module ts { function parseBreakOrContinueStatement(kind: SyntaxKind): BreakOrContinueStatement { var node = createNode(kind); - var errorCountBeforeStatement = file._parserDiagnostics.length; + var errorCountBeforeStatement = file.parseDiagnostics.length; parseExpected(kind === SyntaxKind.BreakStatement ? SyntaxKind.BreakKeyword : SyntaxKind.ContinueKeyword); if (!canParseSemicolon()) node.label = parseIdentifier(); parseSemicolon(); finishNode(node); // In an ambient context, we will already give an error for having a statement. - if (!inAmbientContext && errorCountBeforeStatement === file._parserDiagnostics.length) { + if (!inAmbientContext && errorCountBeforeStatement === file.parseDiagnostics.length) { if (node.label) { checkBreakOrContinueStatementWithLabel(node); } @@ -2879,7 +2875,7 @@ module ts { function parseReturnStatement(): ReturnStatement { var node = createNode(SyntaxKind.ReturnStatement); - var errorCountBeforeReturnStatement = file._parserDiagnostics.length; + var errorCountBeforeReturnStatement = file.parseDiagnostics.length; var returnTokenStart = scanner.getTokenPos(); var returnTokenLength = scanner.getTextPos() - returnTokenStart; @@ -2888,7 +2884,7 @@ module ts { parseSemicolon(); // In an ambient context, we will already give an error for having a statement. - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file._parserDiagnostics.length) { + if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.parseDiagnostics.length) { grammarErrorAtPos(returnTokenStart, returnTokenLength, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); } return finishNode(node); @@ -3229,7 +3225,7 @@ module ts { } function parsePropertyMemberDeclaration(pos: number, flags: NodeFlags): Declaration { - var errorCountBeforePropertyDeclaration = file._parserDiagnostics.length; + var errorCountBeforePropertyDeclaration = file.parseDiagnostics.length; var name = parsePropertyName(); var questionStart = scanner.getTokenPos(); @@ -3259,7 +3255,7 @@ module ts { property.initializer = parseInitializer(/*inParameter*/ false); parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file._parserDiagnostics.length) { + if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.parseDiagnostics.length) { grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } return finishNode(property); @@ -3529,7 +3525,7 @@ module ts { if (parseOptional(SyntaxKind.ImplementsKeyword)) { node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } - var errorCountBeforeClassBody = file._parserDiagnostics.length; + var errorCountBeforeClassBody = file.parseDiagnostics.length; if (parseExpected(SyntaxKind.OpenBraceToken)) { node.members = parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration); parseExpected(SyntaxKind.CloseBraceToken); @@ -3626,10 +3622,10 @@ module ts { node.flags = flags; node.name = parseStringLiteral(); if (!inAmbientContext) { - var errorCount = file._parserDiagnostics.length; + var errorCount = file.parseDiagnostics.length; // Only report this error if we have not already errored about a missing declare modifier, // which would have been at or after pos - if (!errorCount || file._parserDiagnostics[errorCount - 1].start < getTokenPos(pos)) { + if (!errorCount || file.parseDiagnostics[errorCount - 1].start < getTokenPos(pos)) { grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); } } @@ -3705,7 +3701,7 @@ module ts { function parseDeclaration(modifierContext: ModifierContext): Statement { var pos = getNodePos(); - var errorCountBeforeModifiers = file._parserDiagnostics.length; + var errorCountBeforeModifiers = file.parseDiagnostics.length; var flags = parseAndCheckModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { @@ -3713,7 +3709,7 @@ module ts { nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file._parserDiagnostics.length) { + if (flags !== 0 && errorCountBeforeModifiers === file.parseDiagnostics.length) { var modifiersStart = skipTrivia(sourceText, pos); grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, Diagnostics.An_export_assignment_cannot_have_modifiers); } @@ -3846,20 +3842,19 @@ module ts { function getSyntacticDiagnostics() { if (file._syntacticDiagnostics === undefined) { - if (file._parserDiagnostics.length > 0) { + if (file.parseDiagnostics.length > 0) { // Don't bother doing any grammar checks if there are already parser errors. // Otherwise we may end up with too many cascading errors. - file._syntacticDiagnostics = file._parserDiagnostics; + file._syntacticDiagnostics = file.parseDiagnostics; } else { - // No parser errors were reported. Perform our stricted grammar checks. - file._syntacticDiagnostics = []; + // No parser errors were reported. Perform our stricter grammar checks. + file._syntacticDiagnostics = file.grammarDiagnostics; checkGrammar(sourceText, languageVersion, file); } - - file._parserDiagnostics = undefined; } + Debug.assert(file._syntacticDiagnostics !== undefined); return file._syntacticDiagnostics } @@ -3876,7 +3871,8 @@ module ts { file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.getLineStarts = getLineStarts; file.getSyntacticDiagnostics = getSyntacticDiagnostics; - file._parserDiagnostics = []; + file.parseDiagnostics = []; + file.grammarDiagnostics = []; file.semanticDiagnostics = []; var referenceComments = processReferenceComments(); file.referencedFiles = referenceComments.referencedFiles; @@ -3931,7 +3927,7 @@ module ts { } function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { - var syntacticDiagnostics = file._syntacticDiagnostics; + var grammarDiagnostics = file.grammarDiagnostics; var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText); // We're automatically in an ambient context if this is a .d.ts file. @@ -3965,11 +3961,11 @@ module ts { } // Now recurse and perform all grammar checks on the children of this node. - var diagnosticCount = syntacticDiagnostics.length; + var diagnosticCount = grammarDiagnostics.length; forEachChild(node, visitNode); // if we got any errors, just stop performing any more checks on this node or higher. - if (diagnosticCount !== syntacticDiagnostics.length) { + if (diagnosticCount !== grammarDiagnostics.length) { return; } @@ -4020,7 +4016,7 @@ module ts { scanner.setTextPos(start); scanner.scan(); var end = scanner.getTextPos(); - file._syntacticDiagnostics.push(createFileDiagnostic(file, start, end - start, message, arg0, arg1, arg2)); + grammarDiagnostics.push(createFileDiagnostic(file, start, end - start, message, arg0, arg1, arg2)); return true; } @@ -4029,12 +4025,12 @@ module ts { var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; var length = span.end - start; - file._syntacticDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + grammarDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); return true; } function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { - file._syntacticDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + grammarDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); return true; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 17ee1ce6134..7865a4f2463 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -650,6 +650,15 @@ module ts { amdModuleName: string; referencedFiles: FileReference[]; semanticDiagnostics: Diagnostic[]; + + // Parse errors refer specifically to things the parser could not understand at all (like + // missing tokens, or tokens it didn't know how to deal with). Grammar errors are for + // things the parser understood, but either the ES6 or TS grammars do not allow (like + // putting an 'public' modifier on a 'class declaration'). + parseDiagnostics: Diagnostic[]; + grammarDiagnostics: Diagnostic[]; + + // Returns all getSyntacticDiagnostics(): Diagnostic[]; hasNoDefaultLib: boolean; externalModuleIndicator: Node; // The first node that causes this file to be an external module diff --git a/src/services/services.ts b/src/services/services.ts index 287ad437362..f05f9dd77b8 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -725,6 +725,8 @@ module ts { public amdDependencies: string[]; public amdModuleName: string; public referencedFiles: FileReference[]; + public parseDiagnostics: Diagnostic[]; + public grammarDiagnostics: Diagnostic[]; public semanticDiagnostics: Diagnostic[]; public hasNoDefaultLib: boolean; public externalModuleIndicator: Node; // The first node that causes this file to be an external module From 90b7a1c40aee5381b30af0d5c4e7637d8a4d51fa Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 14:38:53 -0800 Subject: [PATCH 086/178] Move tuple checks to the grammar checker. --- src/compiler/parser.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index fcea7adcfff..6a25699f0b9 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1639,12 +1639,7 @@ module ts { function parseTupleType(): TupleTypeNode { var node = createNode(SyntaxKind.TupleType); - var startTokenPos = scanner.getTokenPos(); - var startErrorCount = file.parseDiagnostics.length; node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); - if (!node.elementTypes.length && file.parseDiagnostics.length === startErrorCount) { - grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, Diagnostics.A_tuple_type_element_list_cannot_be_empty); - } return finishNode(node); } @@ -4422,7 +4417,14 @@ module ts { } function visitTupleType(node: TupleTypeNode) { - checkForTrailingComma(node.elementTypes); + checkForTrailingComma(node.elementTypes) || + checkForAtLeastOneType(node); + } + + function checkForAtLeastOneType(node: TupleTypeNode): boolean { + if (node.elementTypes.length === 0) { + return grammarErrorOnNode(node, Diagnostics.A_tuple_type_element_list_cannot_be_empty) + } } function visitTypeReference(node: TypeReferenceNode) { From cd75243d83a67490d9b71180e84c2dd419307ee9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 15:00:45 -0800 Subject: [PATCH 087/178] Move optional property checking to the grammar checker. --- .../diagnosticInformationMap.generated.ts | 2 +- src/compiler/diagnosticMessages.json | 11 +- src/compiler/parser.ts | 100 +++++++++++------- ...objectTypeWithOptionalProperty1.errors.txt | 9 ++ ...jectTypesWithOptionalProperties.errors.txt | 5 +- .../objectTypeWithOptionalProperty1.ts | 3 + 6 files changed, 79 insertions(+), 51 deletions(-) create mode 100644 tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt create mode 100644 tests/cases/compiler/objectTypeWithOptionalProperty1.ts diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 213661fdd60..a87b1f8cc28 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -124,7 +124,7 @@ module ts { Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: DiagnosticCategory.Error, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, Unterminated_template_literal: { code: 1160, category: DiagnosticCategory.Error, key: "Unterminated template literal." }, Unterminated_regular_expression_literal: { code: 1161, category: DiagnosticCategory.Error, key: "Unterminated regular expression literal." }, - A_object_member_cannot_be_declared_optional: { code: 1160, category: DiagnosticCategory.Error, key: "A object member cannot be declared optional." }, + An_object_member_cannot_be_declared_optional: { code: 1160, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional." }, Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index cd2e209e3eb..c05770bdd8e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -479,18 +479,17 @@ "category": "Error", "code": 1159 }, - "Unterminated template literal.": { + "An object member cannot be declared optional.": { "category": "Error", - "code": 1160 + "code": 1160 }, - "Unterminated regular expression literal.": { + "Unterminated template literal.": { "category": "Error", "code": 1161 }, - - "A object member cannot be declared optional.": { + "Unterminated regular expression literal.": { "category": "Error", - "code": 1160 + "code": 1162 }, "Duplicate identifier '{0}'.": { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6a25699f0b9..5818929d6e8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2264,7 +2264,6 @@ module ts { } if (parseOptional(SyntaxKind.OpenBracketToken)) { - var indexedAccess = createNode(SyntaxKind.IndexedAccess, expr.pos); indexedAccess.object = expr; @@ -2441,10 +2440,12 @@ module ts { (node).initializer = makeFunctionExpression(SyntaxKind.FunctionExpression, node.pos, undefined, sig, body); return finishNode(node); } - // Disallow optional property assignment + + var flags: NodeFlags = 0; + + // Disallowing of optional property assignments happens in the grammar checker. if (token === SyntaxKind.QuestionToken) { - var questionStart = scanner.getTokenPos(); - grammarErrorAtPos(questionStart, scanner.getStartPos() - questionStart, Diagnostics.A_object_member_cannot_be_declared_optional); + flags |= NodeFlags.QuestionMark; nextToken(); } @@ -2459,6 +2460,8 @@ module ts { parseExpected(SyntaxKind.ColonToken); (node).initializer = parseAssignmentExpression(false); } + + node.flags = flags; return finishNode(node); } @@ -3740,42 +3743,44 @@ module ts { function dispatch(node: Node) { switch (node.kind) { - case SyntaxKind.ArrowFunction: return visitArrowFunction(node); - case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); - case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); - case SyntaxKind.CallExpression: return visitCallExpression(node); - case SyntaxKind.CallSignature: return visitCallSignature(node); - case SyntaxKind.CatchBlock: return visitCatchBlock(node); - case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); - case SyntaxKind.Constructor: return visitConstructor(node); - case SyntaxKind.ConstructorType: return visitConstructorType(node); - case SyntaxKind.ConstructSignature: return visitConstructSignature(node); - case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); - case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); - case SyntaxKind.ForInStatement: return visitForInStatement(node); - case SyntaxKind.ForStatement: return visitForStatement(node); - case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); - case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); - case SyntaxKind.FunctionType: return visitFunctionType(node); - case SyntaxKind.GetAccessor: return visitGetAccessor(node); - case SyntaxKind.IndexSignature: return visitIndexSignature(node); - case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); - case SyntaxKind.LabeledStatement: return visitLabeledStatement(node); - case SyntaxKind.Method: return visitMethod(node); - case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); - case SyntaxKind.NewExpression: return visitNewExpression(node); - case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); - case SyntaxKind.Parameter: return visitParameter(node); - case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); - case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); - case SyntaxKind.SetAccessor: return visitSetAccessor(node); - case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); - case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); - case SyntaxKind.TupleType: return visitTupleType(node); - case SyntaxKind.TypeReference: return visitTypeReference(node); - case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); - case SyntaxKind.VariableStatement: return visitVariableStatement(node); - case SyntaxKind.WithStatement: return visitWithStatement(node); + case SyntaxKind.ArrowFunction: return visitArrowFunction(node); + case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); + case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); + case SyntaxKind.CallExpression: return visitCallExpression(node); + case SyntaxKind.CallSignature: return visitCallSignature(node); + case SyntaxKind.CatchBlock: return visitCatchBlock(node); + case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); + case SyntaxKind.Constructor: return visitConstructor(node); + case SyntaxKind.ConstructorType: return visitConstructorType(node); + case SyntaxKind.ConstructSignature: return visitConstructSignature(node); + case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); + case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); + case SyntaxKind.ForInStatement: return visitForInStatement(node); + case SyntaxKind.ForStatement: return visitForStatement(node); + case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); + case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); + case SyntaxKind.FunctionType: return visitFunctionType(node); + case SyntaxKind.GetAccessor: return visitGetAccessor(node); + case SyntaxKind.IndexSignature: return visitIndexSignature(node); + case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); + case SyntaxKind.LabeledStatement: return visitLabeledStatement(node); + case SyntaxKind.Method: return visitMethod(node); + case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); + case SyntaxKind.NewExpression: return visitNewExpression(node); + case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); + case SyntaxKind.Parameter: return visitParameter(node); + case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); + case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); + case SyntaxKind.PropertyAssignment: return visitPropertyAssignment(node); + case SyntaxKind.SetAccessor: return visitSetAccessor(node); + case SyntaxKind.ShorthandPropertyAssignment: return visitShorthandPropertyAssignment(node); + case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); + case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); + case SyntaxKind.TupleType: return visitTupleType(node); + case SyntaxKind.TypeReference: return visitTypeReference(node); + case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); + case SyntaxKind.VariableStatement: return visitVariableStatement(node); + case SyntaxKind.WithStatement: return visitWithStatement(node); } } @@ -4346,6 +4351,17 @@ module ts { } } + function visitPropertyAssignment(node: PropertyDeclaration) { + checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); + } + + function checkForInvalidQuestionMark(node: Declaration, message: DiagnosticMessage) { + if (node.flags & NodeFlags.QuestionMark) { + var pos = skipTrivia(sourceText, node.name.end); + return grammarErrorAtPos(pos, "?".length, message); + } + } + function visitSetAccessor(node: MethodDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || @@ -4391,6 +4407,10 @@ module ts { } } + function visitShorthandPropertyAssignment(node: ShortHandPropertyDeclaration): void { + checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); + } + function visitSwitchStatement(node: SwitchStatement) { var firstDefaultClause: CaseOrDefaultClause; diff --git a/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt b/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt new file mode 100644 index 00000000000..7e17563873a --- /dev/null +++ b/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/objectTypeWithOptionalProperty1.ts(2,10): error TS1160: An object member cannot be declared optional. + + +==== tests/cases/compiler/objectTypeWithOptionalProperty1.ts (1 errors) ==== + var b = { + x?: 1 // error + ~ +!!! error TS1160: An object member cannot be declared optional. + } \ No newline at end of file diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt index e73e8adc930..669fbfb595b 100644 --- a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt @@ -1,9 +1,8 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(12,6): error TS1112: A class member cannot be declared optional. tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(20,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(24,6): error TS1160: A object member cannot be declared optional. -==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (3 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (2 errors) ==== // Basic uses of optional properties var a: { @@ -32,6 +31,4 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWith var b = { x?: 1 // error - -!!! error TS1160: A object member cannot be declared optional. } \ No newline at end of file diff --git a/tests/cases/compiler/objectTypeWithOptionalProperty1.ts b/tests/cases/compiler/objectTypeWithOptionalProperty1.ts new file mode 100644 index 00000000000..69f6e1f51ec --- /dev/null +++ b/tests/cases/compiler/objectTypeWithOptionalProperty1.ts @@ -0,0 +1,3 @@ + var b = { + x?: 1 // error + } \ No newline at end of file From b9353086a4ed3dbbd0b8f958a8a7f391b0f666bb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 15:30:35 -0800 Subject: [PATCH 088/178] Move return checks to the grammar checker. --- src/compiler/parser.ts | 87 ++++++++++--------- ...torWithIncompleteTypeAnnotation.errors.txt | 17 +--- .../interfaceExtendingClass2.errors.txt | 5 +- ...overloadOnConstAsTypeAnnotation.errors.txt | 5 +- ...serErrorRecovery_ModuleElement1.errors.txt | 8 +- ...rserErrorRecovery_VariableList1.errors.txt | 5 +- .../reference/propertyWrappedInTry.errors.txt | 5 +- ...hStatementsWithMultipleDefaults.errors.txt | 8 +- 8 files changed, 61 insertions(+), 79 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 5818929d6e8..b6455304cdc 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -835,7 +835,6 @@ module ts { var lookAheadMode = LookAheadMode.NotLookingAhead; var inAmbientContext = false; - var inFunctionBody = false; function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); @@ -2062,7 +2061,7 @@ module ts { var body: Node; if (token === SyntaxKind.OpenBraceToken) { - body = parseBody(/* ignoreMissingOpenBrace */ false); + body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); } else if (isStatement(/* inErrorRecovery */ true) && !isStartOfExpressionStatement() && token !== SyntaxKind.FunctionKeyword) { // Check if we got a plain statement (i.e. no expression-statements, no functions expressions/declarations) @@ -2079,7 +2078,7 @@ module ts { // up preemptively closing the containing construct. // // Note: even when 'ignoreMissingOpenBrace' is passed as true, parseBody will still error. - body = parseBody(/* ignoreMissingOpenBrace */ true); + body = parseFunctionBlock(/* ignoreMissingOpenBrace */ true); } else { body = parseAssignmentExpression(noIn); @@ -2431,7 +2430,7 @@ module ts { node = createNode(SyntaxKind.PropertyAssignment, nodePos); node.name = propertyName; var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - var body = parseBody(/* ignoreMissingOpenBrace */ false); + var body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); // do not propagate property name as name for function expression // for scenarios like // var x = 1; @@ -2492,7 +2491,7 @@ module ts { parseExpected(SyntaxKind.FunctionKeyword); var name = isIdentifier() ? parseIdentifier() : undefined; var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - var body = parseBody(/* ignoreMissingOpenBrace */ false); + var body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body); } @@ -2530,13 +2529,9 @@ module ts { return finishNode(node); } - function parseBody(ignoreMissingOpenBrace: boolean): Block { - var saveInFunctionBody = inFunctionBody; - - inFunctionBody = true; + function parseFunctionBlock(ignoreMissingOpenBrace: boolean): Block { var block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true); block.kind = SyntaxKind.FunctionBlock; - inFunctionBody = saveInFunctionBody; return block; } @@ -2660,18 +2655,15 @@ module ts { function parseReturnStatement(): ReturnStatement { var node = createNode(SyntaxKind.ReturnStatement); - var errorCountBeforeReturnStatement = file.parseDiagnostics.length; var returnTokenStart = scanner.getTokenPos(); var returnTokenLength = scanner.getTextPos() - returnTokenStart; parseExpected(SyntaxKind.ReturnKeyword); - if (!canParseSemicolon()) node.expression = parseExpression(); - parseSemicolon(); - - // In an ambient context, we will already give an error for having a statement. - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.parseDiagnostics.length) { - grammarErrorAtPos(returnTokenStart, returnTokenLength, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + if (!canParseSemicolon()) { + node.expression = parseExpression(); } + + parseSemicolon(); return finishNode(node); } @@ -2914,7 +2906,7 @@ module ts { function parseFunctionBlockOrSemicolon(): Block { if (token === SyntaxKind.OpenBraceToken) { - return parseBody(/* ignoreMissingOpenBrace */ false); + return parseFunctionBlock(/* ignoreMissingOpenBrace */ false); } if (canParseSemicolon()) { @@ -3045,7 +3037,7 @@ module ts { node.body = createMissingNode(); } else { - node.body = parseBody(/* ignoreMissingOpenBrace */ false); + node.body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); } return finishNode(node); @@ -3293,7 +3285,6 @@ module ts { if (parseOptional(SyntaxKind.ImplementsKeyword)) { node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } - var errorCountBeforeClassBody = file.parseDiagnostics.length; if (parseExpected(SyntaxKind.OpenBraceToken)) { node.members = parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration); parseExpected(SyntaxKind.CloseBraceToken); @@ -3700,6 +3691,7 @@ module ts { // We're automatically in an ambient context if this is a .d.ts file. var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); + var inFunctionBlock = false; var parent: Node; visitNode(file); @@ -3709,6 +3701,11 @@ module ts { node.parent = parent; parent = node; + var savedInFunctionBlock = inFunctionBlock; + if (node.kind === SyntaxKind.FunctionBlock) { + inFunctionBlock = true; + } + var savedInAmbientContext = inAmbientContext if (node.flags & NodeFlags.Ambient) { inAmbientContext = true; @@ -3717,6 +3714,7 @@ module ts { checkNode(node); inAmbientContext = savedInAmbientContext; + inFunctionBlock = savedInFunctionBlock; parent = savedParent; } @@ -3724,7 +3722,7 @@ module ts { // First, check if you have a statement in a place where it is not allowed. We want // to do this before recursing, because we'd prefer to report these errors at the top // level instead of at some nested level. - if (checkForStatementInAmbientContext(node)) { + if (inAmbientContext && checkForStatementInAmbientContext(node)) { return; } @@ -3772,6 +3770,7 @@ module ts { case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.PropertyAssignment: return visitPropertyAssignment(node); + case SyntaxKind.ReturnStatement: return visitReturnStatement(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); case SyntaxKind.ShorthandPropertyAssignment: return visitShorthandPropertyAssignment(node); case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); @@ -3814,27 +3813,25 @@ module ts { } function checkForStatementInAmbientContext(node: Node): boolean { - if (inAmbientContext) { - switch (node.kind) { - case SyntaxKind.Block: - case SyntaxKind.EmptyStatement: - case SyntaxKind.IfStatement: - case SyntaxKind.DoStatement: - case SyntaxKind.WhileStatement: - case SyntaxKind.ForStatement: - case SyntaxKind.ForInStatement: - case SyntaxKind.ContinueStatement: - case SyntaxKind.BreakStatement: - case SyntaxKind.ReturnStatement: - case SyntaxKind.WithStatement: - case SyntaxKind.SwitchStatement: - case SyntaxKind.ThrowStatement: - case SyntaxKind.TryStatement: - case SyntaxKind.DebuggerStatement: - case SyntaxKind.LabeledStatement: - case SyntaxKind.ExpressionStatement: - return grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); - } + switch (node.kind) { + case SyntaxKind.Block: + case SyntaxKind.EmptyStatement: + case SyntaxKind.IfStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.ContinueStatement: + case SyntaxKind.BreakStatement: + case SyntaxKind.ReturnStatement: + case SyntaxKind.WithStatement: + case SyntaxKind.SwitchStatement: + case SyntaxKind.ThrowStatement: + case SyntaxKind.TryStatement: + case SyntaxKind.DebuggerStatement: + case SyntaxKind.LabeledStatement: + case SyntaxKind.ExpressionStatement: + return grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); } } @@ -4362,6 +4359,12 @@ module ts { } } + function visitReturnStatement(node: ReturnStatement) { + if (!inFunctionBlock) { + grammarErrorOnFirstToken(node, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + } + } + function visitSetAccessor(node: MethodDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index c18dfb8e354..53d24b3d0f8 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -7,14 +7,11 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(28,30): error TS tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(28,33): error TS1138: Parameter declaration expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(28,34): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(28,36): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(30,21): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(31,18): error TS1129: Statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(38,17): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(40,41): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(40,45): error TS1002: Unterminated string literal. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(43,21): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(46,13): error TS1005: 'try' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(55,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(58,5): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(69,13): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(72,37): error TS1127: Invalid character. @@ -35,10 +32,8 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(234,14): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,9): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,27): error TS1005: ',' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,36): error TS1005: ';' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(236,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,9): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,26): error TS1005: ';' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(239,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(241,5): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,69): error TS1110: Type expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,9): error TS1128: Declaration or statement expected. @@ -93,7 +88,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2304: Cannot find name 'string'. -==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (93 errors) ==== +==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (88 errors) ==== declare module "fs" { export class File { constructor(filename: string); @@ -153,8 +148,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T !!! error TS2391: Function implementation is missing or not immediately following the declaration. return 1; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. ^ ~ !!! error TS1129: Statement expected. @@ -188,8 +181,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T !!! error TS2304: Cannot find name 'retValue'. return 1; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } } catch (e) { @@ -208,8 +199,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T !!! error TS2304: Cannot find name 'console'. return 0; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } } @@ -453,8 +442,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T ~~~~~~ !!! error TS2304: Cannot find name 'number'. return val; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } public method2() { ~~~~~~ @@ -464,8 +451,6 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T ~~~~~~~ !!! error TS2304: Cannot find name 'method2'. return 2 * this.method1(2); - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } } ~ diff --git a/tests/baselines/reference/interfaceExtendingClass2.errors.txt b/tests/baselines/reference/interfaceExtendingClass2.errors.txt index 83cd97c72c0..1e07199686b 100644 --- a/tests/baselines/reference/interfaceExtendingClass2.errors.txt +++ b/tests/baselines/reference/interfaceExtendingClass2.errors.txt @@ -1,11 +1,10 @@ -tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(13,13): error TS1108: A 'return' statement can only be used within a function body. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(13,13): error TS1131: Property or signature expected. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(14,9): error TS1128: Declaration or statement expected. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(15,5): error TS1128: Declaration or statement expected. tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts(11,5): error TS2411: Property 'a' of type '{ toString: () => {}; }' is not assignable to string index type 'Object'. -==== tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts (5 errors) ==== +==== tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtendingClass2.ts (4 errors) ==== class Foo { x: string; y() { } @@ -23,8 +22,6 @@ tests/cases/conformance/interfaces/interfacesExtendingClasses/interfaceExtending !!! error TS2411: Property 'a' of type '{ toString: () => {}; }' is not assignable to string index type 'Object'. return 1; ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. - ~~~~~~ !!! error TS1131: Property or signature expected. }; ~ diff --git a/tests/baselines/reference/overloadOnConstAsTypeAnnotation.errors.txt b/tests/baselines/reference/overloadOnConstAsTypeAnnotation.errors.txt index 0d4cd775c56..70530d409b3 100644 --- a/tests/baselines/reference/overloadOnConstAsTypeAnnotation.errors.txt +++ b/tests/baselines/reference/overloadOnConstAsTypeAnnotation.errors.txt @@ -1,13 +1,10 @@ tests/cases/compiler/overloadOnConstAsTypeAnnotation.ts(1,37): error TS1005: ';' expected. -tests/cases/compiler/overloadOnConstAsTypeAnnotation.ts(1,42): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/overloadOnConstAsTypeAnnotation.ts(1,8): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. -==== tests/cases/compiler/overloadOnConstAsTypeAnnotation.ts (3 errors) ==== +==== tests/cases/compiler/overloadOnConstAsTypeAnnotation.ts (2 errors) ==== var f: (x: 'hi') => number = ('hi') => { return 1; }; ~~ !!! error TS1005: ';' expected. - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. ~~~~~~~~~~~~~~~~~~~ !!! error TS2382: Specialized overload signature is not assignable to any non-specialized signature. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ModuleElement1.errors.txt b/tests/baselines/reference/parserErrorRecovery_ModuleElement1.errors.txt index ad23c21ec1b..4b8be3e17ad 100644 --- a/tests/baselines/reference/parserErrorRecovery_ModuleElement1.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement1.errors.txt @@ -1,19 +1,13 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts(1,1): error TS1108: A 'return' statement can only be used within a function body. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts(2,1): error TS1128: Declaration or statement expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts(3,1): error TS1108: A 'return' statement can only be used within a function body. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts(4,1): error TS1128: Declaration or statement expected. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts (4 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement1.ts (2 errors) ==== return foo; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } ~ !!! error TS1128: Declaration or statement expected. return bar; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } ~ !!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt b/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt index a42ffcdd474..b69cab688f0 100644 --- a/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_VariableList1.errors.txt @@ -1,8 +1,11 @@ +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts(1,6): error TS1009: Trailing comma not allowed. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts(2,1): error TS1108: A 'return' statement can only be used within a function body. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/VariableLists/parserErrorRecovery_VariableList1.ts (2 errors) ==== var a, + ~ +!!! error TS1009: Trailing comma not allowed. return; ~~~~~~ !!! error TS1108: A 'return' statement can only be used within a function body. \ No newline at end of file diff --git a/tests/baselines/reference/propertyWrappedInTry.errors.txt b/tests/baselines/reference/propertyWrappedInTry.errors.txt index 36608ca7d86..0809067b33b 100644 --- a/tests/baselines/reference/propertyWrappedInTry.errors.txt +++ b/tests/baselines/reference/propertyWrappedInTry.errors.txt @@ -2,14 +2,13 @@ tests/cases/compiler/propertyWrappedInTry.ts(3,5): error TS1068: Unexpected toke tests/cases/compiler/propertyWrappedInTry.ts(5,9): error TS1129: Statement expected. tests/cases/compiler/propertyWrappedInTry.ts(11,5): error TS1128: Declaration or statement expected. tests/cases/compiler/propertyWrappedInTry.ts(11,18): error TS1005: ';' expected. -tests/cases/compiler/propertyWrappedInTry.ts(13,9): error TS1108: A 'return' statement can only be used within a function body. tests/cases/compiler/propertyWrappedInTry.ts(17,1): error TS1128: Declaration or statement expected. tests/cases/compiler/propertyWrappedInTry.ts(5,16): error TS2304: Cannot find name 'bar'. tests/cases/compiler/propertyWrappedInTry.ts(5,22): error TS2304: Cannot find name 'someInitThatMightFail'. tests/cases/compiler/propertyWrappedInTry.ts(11,12): error TS2304: Cannot find name 'baz'. -==== tests/cases/compiler/propertyWrappedInTry.ts (9 errors) ==== +==== tests/cases/compiler/propertyWrappedInTry.ts (8 errors) ==== class Foo { try { @@ -37,8 +36,6 @@ tests/cases/compiler/propertyWrappedInTry.ts(11,12): error TS2304: Cannot find n !!! error TS2304: Cannot find name 'baz'. return this.bar; // doesn't get rewritten to Foo.bar. - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. } diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt index cd892f5faa2..9c46389e906 100644 --- a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt @@ -1,7 +1,9 @@ +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(9,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(10,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,22): error TS1108: A 'return' statement can only be used within a function body. -==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (1 errors) ==== +==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (3 errors) ==== var x = 10; @@ -11,7 +13,11 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,22): error TS110 default: // No issues. break; default: // Error; second 'default' clause. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: // Error; third 'default' clause. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. case 3: x *= x; } From 385fdd5eb2d03b7bc13c32771eb848516081684e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 16:10:27 -0800 Subject: [PATCH 089/178] Move export assignment checks to the grammar checker. --- src/compiler/parser.ts | 20 +++++++++++-------- ...ntWithDeclareAndExportModifiers.errors.txt | 9 +++------ ...rtAssignmentWithDeclareModifier.errors.txt | 7 ++----- ...ortAssignmentWithExportModifier.errors.txt | 7 ++----- ...AssignmentWithDeclareAndExportModifiers.ts | 3 ++- .../exportAssignmentWithDeclareModifier.ts | 3 ++- .../exportAssignmentWithExportModifier.ts | 3 ++- 7 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b6455304cdc..871e5d60ea7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3421,8 +3421,11 @@ module ts { return finishNode(node); } - function parseExportAssignmentTail(pos: number): ExportAssignment { + function parseExportAssignmentTail(pos: number, flags: NodeFlags): ExportAssignment { var node = createNode(SyntaxKind.ExportAssignment, pos); + if (flags) { + node.flags = flags; + } node.exportName = parseIdentifier(); parseSemicolon(); return finishNode(node); @@ -3460,19 +3463,13 @@ module ts { function parseDeclaration(modifierContext: ModifierContext): Statement { var pos = getNodePos(); - var errorCountBeforeModifiers = file.parseDiagnostics.length; var flags = parseAndCheckModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { var modifiersEnd = scanner.getStartPos(); nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { - var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.parseDiagnostics.length) { - var modifiersStart = skipTrivia(sourceText, pos); - grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, Diagnostics.An_export_assignment_cannot_have_modifiers); - } - return exportAssignmentTail; + return parseExportAssignmentTail(pos, flags); } } @@ -3753,6 +3750,7 @@ module ts { case SyntaxKind.ConstructSignature: return visitConstructSignature(node); case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); + case SyntaxKind.ExportAssignment: return visitExportAssignment(node); case SyntaxKind.ForInStatement: return visitForInStatement(node); case SyntaxKind.ForStatement: return visitForStatement(node); case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); @@ -4069,6 +4067,12 @@ module ts { return false; } + function visitExportAssignment(node: ExportAssignment) { + if (node.flags & NodeFlags.Modifier) { + grammarErrorOnFirstToken(node, Diagnostics.An_export_assignment_cannot_have_modifiers); + } + } + function visitForInStatement(node: ForInStatement) { checkVariableDeclarations(node.declarations) || checkForMoreThanOneDeclaration(node.declarations); diff --git a/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.errors.txt b/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.errors.txt index 20355aec05c..f8dc0114593 100644 --- a/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.errors.txt +++ b/tests/baselines/reference/exportAssignmentWithDeclareAndExportModifiers.errors.txt @@ -1,11 +1,8 @@ tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts(2,1): error TS1120: An export assignment cannot have modifiers. -tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts(2,1): error TS1148: Cannot compile external modules unless the '--module' flag is provided. -==== tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts (2 errors) ==== +==== tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts (1 errors) ==== var x; export declare export = x; - ~~~~~~~~~~~~~~ -!!! error TS1120: An export assignment cannot have modifiers. - ~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. \ No newline at end of file + ~~~~~~ +!!! error TS1120: An export assignment cannot have modifiers. \ No newline at end of file diff --git a/tests/baselines/reference/exportAssignmentWithDeclareModifier.errors.txt b/tests/baselines/reference/exportAssignmentWithDeclareModifier.errors.txt index 1d2f2e265d3..2f9d8d801af 100644 --- a/tests/baselines/reference/exportAssignmentWithDeclareModifier.errors.txt +++ b/tests/baselines/reference/exportAssignmentWithDeclareModifier.errors.txt @@ -1,11 +1,8 @@ tests/cases/compiler/exportAssignmentWithDeclareModifier.ts(2,1): error TS1120: An export assignment cannot have modifiers. -tests/cases/compiler/exportAssignmentWithDeclareModifier.ts(2,1): error TS1148: Cannot compile external modules unless the '--module' flag is provided. -==== tests/cases/compiler/exportAssignmentWithDeclareModifier.ts (2 errors) ==== +==== tests/cases/compiler/exportAssignmentWithDeclareModifier.ts (1 errors) ==== var x; declare export = x; ~~~~~~~ -!!! error TS1120: An export assignment cannot have modifiers. - ~~~~~~~~~~~~~~~~~~~ -!!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. \ No newline at end of file +!!! error TS1120: An export assignment cannot have modifiers. \ No newline at end of file diff --git a/tests/baselines/reference/exportAssignmentWithExportModifier.errors.txt b/tests/baselines/reference/exportAssignmentWithExportModifier.errors.txt index e19ce5bc856..275f4b0ba1f 100644 --- a/tests/baselines/reference/exportAssignmentWithExportModifier.errors.txt +++ b/tests/baselines/reference/exportAssignmentWithExportModifier.errors.txt @@ -1,11 +1,8 @@ tests/cases/compiler/exportAssignmentWithExportModifier.ts(2,1): error TS1120: An export assignment cannot have modifiers. -tests/cases/compiler/exportAssignmentWithExportModifier.ts(2,1): error TS1148: Cannot compile external modules unless the '--module' flag is provided. -==== tests/cases/compiler/exportAssignmentWithExportModifier.ts (2 errors) ==== +==== tests/cases/compiler/exportAssignmentWithExportModifier.ts (1 errors) ==== var x; export export = x; ~~~~~~ -!!! error TS1120: An export assignment cannot have modifiers. - ~~~~~~~~~~~~~~~~~~ -!!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. \ No newline at end of file +!!! error TS1120: An export assignment cannot have modifiers. \ No newline at end of file diff --git a/tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts b/tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts index 02e40fd3645..c3295440986 100644 --- a/tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts +++ b/tests/cases/compiler/exportAssignmentWithDeclareAndExportModifiers.ts @@ -1,2 +1,3 @@ -var x; +// @module: commonjs +var x; export declare export = x; \ No newline at end of file diff --git a/tests/cases/compiler/exportAssignmentWithDeclareModifier.ts b/tests/cases/compiler/exportAssignmentWithDeclareModifier.ts index e38f7fa8d38..0cd0625e120 100644 --- a/tests/cases/compiler/exportAssignmentWithDeclareModifier.ts +++ b/tests/cases/compiler/exportAssignmentWithDeclareModifier.ts @@ -1,2 +1,3 @@ -var x; +// @module: commonjs +var x; declare export = x; \ No newline at end of file diff --git a/tests/cases/compiler/exportAssignmentWithExportModifier.ts b/tests/cases/compiler/exportAssignmentWithExportModifier.ts index c6b543caeec..9d940eb2789 100644 --- a/tests/cases/compiler/exportAssignmentWithExportModifier.ts +++ b/tests/cases/compiler/exportAssignmentWithExportModifier.ts @@ -1,2 +1,3 @@ -var x; +// @module: commonjs +var x; export export = x; \ No newline at end of file From 75977add21be4bdd4d59d64c1795aa25997f6dbe Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 16:32:27 -0800 Subject: [PATCH 090/178] Move octal checks to the grammar checker. --- src/compiler/parser.ts | 25 +++++---- src/compiler/types.ts | 1 + .../reference/objectLiteralErrors.errors.txt | 53 ++++++++++++++++++- .../scannerNumericLiteral3.errors.txt | 5 +- .../scannerNumericLiteral9.errors.txt | 5 +- 5 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 871e5d60ea7..96a1534e77f 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1403,16 +1403,11 @@ module ts { // never get a token like this. Instead, we would get 00 and 9 as two separate tokens. // We also do not need to check for negatives because any prefix operator would be part of a // parent unary expression. - if (node.kind === SyntaxKind.NumericLiteral - && sourceText.charCodeAt(tokenPos) === CharacterCodes._0 - && isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { + if (node.kind === SyntaxKind.NumericLiteral && + sourceText.charCodeAt(tokenPos) === CharacterCodes._0 && + isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { - if (isInStrictMode) { - grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); - } - else if (languageVersion >= ScriptTarget.ES5) { - grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); - } + node.flags |= NodeFlags.OctalLiteral; } return node; @@ -3764,6 +3759,7 @@ module ts { case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); case SyntaxKind.NewExpression: return visitNewExpression(node); case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); + case SyntaxKind.NumericLiteral: return visitNumericLiteral(node); case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); @@ -4262,6 +4258,17 @@ module ts { }); } + function visitNumericLiteral(node: LiteralExpression): void { + if (node.flags & NodeFlags.OctalLiteral) { + if (node.flags & NodeFlags.ParsedInStrictMode) { + grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); + } + else if (languageVersion >= ScriptTarget.ES5) { + grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); + } + } + } + function visitParameter(node: ParameterDeclaration): void { checkParameterName(node); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 7865a4f2463..81e2375780d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -273,6 +273,7 @@ module ts { // Set if this node was parsed in strict mode. Used for grammar error checks, as well as // checking if the node can be reused in incremental settings. ParsedInStrictMode = 0x00002000, + OctalLiteral = 0x00004000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index 8a1774c4525..d27823a30a3 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -1,5 +1,22 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(17,19): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,22): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,23): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,22): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,25): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,23): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,22): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,24): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,24): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,24): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,25): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. +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'. @@ -79,7 +96,7 @@ 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 (79 errors) ==== +==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (96 errors) ==== // Multiple properties with the same name var e1 = { a: 0, a: 0 }; @@ -177,71 +194,99 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) // Accessor and property with the same name var f1 = { a: 0, get a() { return 0; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f2 = { a: '', get a() { return ''; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f3 = { a: 0, get a() { return ''; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f4 = { a: true, get a() { return false; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f5 = { a: {}, get a() { return {}; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~ !!! error TS2300: Duplicate identifier 'a'. var f6 = { a: 0, get 'a'() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f7 = { 'a': 0, get a() { return 0; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~ !!! error TS2300: Duplicate identifier 'a'. var f8 = { 'a': 0, get "a"() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~~~ !!! error TS2300: Duplicate identifier '"a"'. var f9 = { 'a': 0, get 'a'() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f10 = { "a": 0, get 'a'() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '"a"'. ~~~ !!! error TS2300: Duplicate identifier ''a''. var f11 = { 1.0: 0, get '1'() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '1.0'. ~~~ !!! error TS2300: Duplicate identifier ''1''. var f12 = { 0: 0, get 0() { return 0; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~ !!! error TS2300: Duplicate identifier '0'. var f13 = { 0: 0, get 0() { return 0; } }; + ~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~ !!! error TS2300: Duplicate identifier '0'. var f14 = { 0: 0, get 0x0() { return 0; } }; + ~~~ +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~~~ @@ -254,16 +299,22 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) ~~~ !!! 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'. ~ diff --git a/tests/baselines/reference/scannerNumericLiteral3.errors.txt b/tests/baselines/reference/scannerNumericLiteral3.errors.txt index 4bfbbd3b42a..894eb391f60 100644 --- a/tests/baselines/reference/scannerNumericLiteral3.errors.txt +++ b/tests/baselines/reference/scannerNumericLiteral3.errors.txt @@ -1,10 +1,7 @@ -tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts(1,1): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts(1,3): error TS1005: ';' expected. -==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts (2 errors) ==== +==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral3.ts (1 errors) ==== 01.0 - ~~ -!!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. ~~ !!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/scannerNumericLiteral9.errors.txt b/tests/baselines/reference/scannerNumericLiteral9.errors.txt index 3bcf3a34d80..7f53ca111d9 100644 --- a/tests/baselines/reference/scannerNumericLiteral9.errors.txt +++ b/tests/baselines/reference/scannerNumericLiteral9.errors.txt @@ -1,10 +1,7 @@ -tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts(1,1): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts(1,3): error TS1005: ';' expected. -==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts (2 errors) ==== +==== tests/cases/conformance/scanner/ecmascript5/scannerNumericLiteral9.ts (1 errors) ==== 009 - ~~ -!!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. ~ !!! error TS1005: ';' expected. \ No newline at end of file From b2112f863affbe556d587208bea45df13701b969 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 16:47:43 -0800 Subject: [PATCH 091/178] Move module name checks to the grammar checker. Make some errors shorter. --- src/compiler/parser.ts | 42 ++++--- ...DeclarationInModuleDeclaration1.errors.txt | 2 +- .../reference/importInsideModule.errors.txt | 2 +- .../parserExportAssignment5.errors.txt | 2 +- .../amd/intReferencingExtAndInt.errors.txt | 2 +- .../node/intReferencingExtAndInt.errors.txt | 2 +- .../nestedLocalModuleSimpleCase.errors.txt | 2 +- .../nestedLocalModuleSimpleCase.errors.txt | 2 +- ...calModuleWithRecursiveTypecheck.errors.txt | 2 +- ...calModuleWithRecursiveTypecheck.errors.txt | 2 +- ...dModuleDeclarationsInsideModule.errors.txt | 7 +- ...dModuleDeclarationsInsideModule.errors.txt | 7 +- ...arationsInsideNonExportedModule.errors.txt | 7 +- ...arationsInsideNonExportedModule.errors.txt | 7 +- ...leImportStatementInParentModule.errors.txt | 7 +- ...leImportStatementInParentModule.errors.txt | 7 +- ...ateStringsTypeArgumentInference.errors.txt | 112 +++++++++--------- ...tringsWithIncompatibleTypedTags.errors.txt | 36 +++--- ...ithManyCallAndMemberExpressions.errors.txt | 4 +- ...eStringsWithOverloadResolution1.errors.txt | 24 ++-- ...eStringsWithOverloadResolution2.errors.txt | 8 +- ...eStringsWithOverloadResolution3.errors.txt | 88 +++++++------- ...mplateStringsWithTagsTypedAsAny.errors.txt | 40 +++---- ...gedTemplateStringsWithTypedTags.errors.txt | 32 ++--- ...tringsArrayTypeDefinedInES5Mode.errors.txt | 4 +- ...ringsArrayTypeNotDefinedES5Mode.errors.txt | 4 +- 26 files changed, 221 insertions(+), 233 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 96a1534e77f..696b3986c54 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3375,14 +3375,6 @@ module ts { var node = createNode(SyntaxKind.ModuleDeclaration, pos); node.flags = flags; node.name = parseStringLiteral(); - if (!inAmbientContext) { - var errorCount = file.parseDiagnostics.length; - // Only report this error if we have not already errored about a missing declare modifier, - // which would have been at or after pos - if (!errorCount || file.parseDiagnostics[errorCount - 1].start < getTokenPos(pos)) { - grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); - } - } // For error recovery, just in case the user forgot the declare modifier on this ambient // external module, treat it as ambient anyway. @@ -4080,7 +4072,7 @@ module ts { function checkForMoreThanOneDeclaration(declarations: NodeArray) { if (declarations && declarations.length > 1) { - return grammarErrorOnNode(declarations[1], Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + return grammarErrorOnFirstToken(declarations[1], Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); } } @@ -4174,16 +4166,30 @@ module ts { } function visitModuleDeclaration(node: ModuleDeclaration): void { + checkModuleDeclarationName(node) || + checkModuleDeclarationStatements(node); + } + + function checkModuleDeclarationName(node: ModuleDeclaration) { + if (!inAmbientContext && node.name.kind === SyntaxKind.StringLiteral) { + return grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + + function checkModuleDeclarationStatements(node: ModuleDeclaration): boolean { if (node.name.kind === SyntaxKind.Identifier && node.body.kind === SyntaxKind.ModuleBlock) { - forEach((node.body).statements, s => { - if (s.kind === SyntaxKind.ExportAssignment) { + var statements = (node.body).statements; + for (var i = 0, n = statements.length; i < n; i++) { + var statement = statements[i]; + + if (statement.kind === SyntaxKind.ExportAssignment) { // Export assignments are not allowed in an internal module - grammarErrorOnNode(s, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + return grammarErrorOnFirstToken(statement, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); } - else if (s.kind === SyntaxKind.ImportDeclaration && (s).externalModuleName) { - grammarErrorOnNode(s, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + else if (statement.kind === SyntaxKind.ImportDeclaration && (statement).externalModuleName) { + return grammarErrorOnFirstToken(statement, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); } - }); + } } } @@ -4446,7 +4452,7 @@ module ts { function visitTaggedTemplateExpression(node: TaggedTemplateExpression) { if (languageVersion < ScriptTarget.ES6) { - grammarErrorOnNode(node, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); + grammarErrorOnFirstToken(node.template, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); } } @@ -4493,10 +4499,10 @@ module ts { var decl = declarations[0]; if (languageVersion < ScriptTarget.ES6) { if (decl.flags & NodeFlags.Let) { - return grammarErrorOnNode(decl, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + return grammarErrorOnFirstToken(decl, Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); } else if (decl.flags & NodeFlags.Const) { - return grammarErrorOnNode(decl, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + return grammarErrorOnFirstToken(decl, Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); } } } diff --git a/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt index 82132947ee5..ba6aae1e361 100644 --- a/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt +++ b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt @@ -4,6 +4,6 @@ tests/cases/compiler/importDeclarationInModuleDeclaration1.ts(2,5): error TS1147 ==== tests/cases/compiler/importDeclarationInModuleDeclaration1.ts (1 errors) ==== module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. } \ No newline at end of file diff --git a/tests/baselines/reference/importInsideModule.errors.txt b/tests/baselines/reference/importInsideModule.errors.txt index dc89bb5e9ca..4a7ab9d5b78 100644 --- a/tests/baselines/reference/importInsideModule.errors.txt +++ b/tests/baselines/reference/importInsideModule.errors.txt @@ -5,7 +5,7 @@ tests/cases/compiler/importInsideModule_file2.ts(2,26): error TS2307: Cannot fin ==== tests/cases/compiler/importInsideModule_file2.ts (2 errors) ==== export module myModule { import foo = require("importInsideModule_file1"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'importInsideModule_file1'. diff --git a/tests/baselines/reference/parserExportAssignment5.errors.txt b/tests/baselines/reference/parserExportAssignment5.errors.txt index b463034f621..16c4188bc08 100644 --- a/tests/baselines/reference/parserExportAssignment5.errors.txt +++ b/tests/baselines/reference/parserExportAssignment5.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignm ==== tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment5.ts (2 errors) ==== module M { export = A; - ~~~~~~~~~~~ + ~~~~~~ !!! error TS1063: An export assignment cannot be used in an internal module. ~~~~~~~~~~~ !!! error TS2304: Cannot find name 'A'. diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt index 29925d22556..59cbb44a3c5 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt +++ b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt @@ -4,7 +4,7 @@ internal2.ts(2,2): error TS1147: Import declarations in an internal module canno ==== internal2.ts (1 errors) ==== module outer { import g = require("external2") - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var a = g.square(5); export var b = "foo"; diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt index 29925d22556..59cbb44a3c5 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt +++ b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt @@ -4,7 +4,7 @@ internal2.ts(2,2): error TS1147: Import declarations in an internal module canno ==== internal2.ts (1 errors) ==== module outer { import g = require("external2") - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var a = g.square(5); export var b = "foo"; diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt index b2bc48b4543..43f02e4fb9d 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt @@ -4,7 +4,7 @@ test1.ts(2,2): error TS1147: Import declarations in an internal module cannot re ==== test1.ts (1 errors) ==== export module myModule { import foo = require("test2"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); } diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt index b2bc48b4543..43f02e4fb9d 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt @@ -4,7 +4,7 @@ test1.ts(2,2): error TS1147: Import declarations in an internal module cannot re ==== test1.ts (1 errors) ==== export module myModule { import foo = require("test2"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); } diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt index d40bca73971..35c81a722d1 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt @@ -5,7 +5,7 @@ test1.ts(3,2): error TS1147: Import declarations in an internal module cannot re module myModule { import foo = require("test2"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt index d40bca73971..35c81a722d1 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt @@ -5,7 +5,7 @@ test1.ts(3,2): error TS1147: Import declarations in an internal module cannot re module myModule { import foo = require("test2"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index b92bb48308d..09f7aed73fb 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,11 +1,10 @@ testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== testGlo.ts (2 errors) ==== +==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { @@ -26,8 +25,6 @@ testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index b92bb48308d..09f7aed73fb 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,11 +1,10 @@ testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== testGlo.ts (2 errors) ==== +==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { @@ -26,8 +25,6 @@ testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index bbf4831914b..ad44386dcd1 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,14 +1,13 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(24,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m1 { } module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { @@ -29,8 +28,6 @@ test.ts(24,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index bbf4831914b..ad44386dcd1 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,14 +1,13 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(24,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m1 { } module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { @@ -29,8 +28,6 @@ test.ts(24,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index ff9a9f604a3..0d281b950f4 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,11 +1,10 @@ test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(42,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M1 { @@ -47,8 +46,6 @@ test.ts(42,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M3 { export var c3 = new mNonExported.mne.class1; export function f3() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index ff9a9f604a3..0d281b950f4 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,11 +1,10 @@ test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(42,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M1 { @@ -47,8 +46,6 @@ test.ts(42,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M3 { export var c3 = new mNonExported.mne.class1; export function f3() { diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt index c4a34fccd95..ac184e9489f 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt @@ -1,31 +1,31 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(5,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(9,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(13,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(16,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(20,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(23,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(27,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(28,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(29,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(33,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(34,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(35,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(39,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(40,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(41,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(45,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(46,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(47,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(51,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(52,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(53,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(57,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(58,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(64,11): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(77,11): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(81,11): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(86,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(90,11): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(5,10): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(9,17): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(13,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(16,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(20,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(23,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(27,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(28,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(29,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(33,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(34,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(35,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(39,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(40,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(41,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(45,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(46,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(47,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(51,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(52,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(53,15): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(57,23): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(58,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(64,25): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(77,25): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(81,25): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(86,23): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(90,25): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(64,11): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'string' is not a valid type argument because it is not a supertype of candidate 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(77,11): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. @@ -38,104 +38,104 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference // Generic tag with one parameter function noParams(n: T) { } noParams ``; - ~~~~~~~~~~~ + ~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with parameter which does not use type parameter function noGenericParams(n: string[]) { } noGenericParams ``; - ~~~~~~~~~~~~~~~~~~ + ~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with multiple type parameters and only one used in parameter type annotation function someGenerics1a(n: T, m: number) { } someGenerics1a `${3}`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. function someGenerics1b(n: string[], m: U) { } someGenerics1b `${3}`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with argument of function type whose parameter is of type parameter type function someGenerics2a(strs: string[], n: (x: T) => void) { } someGenerics2a `${(n: string) => n}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. function someGenerics2b(strs: string[], n: (x: T, y: U) => void) { } someGenerics2b `${ (n: string, x: number) => n }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter function someGenerics3(strs: string[], producer: () => T) { } someGenerics3 `${() => ''}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics3 `${() => undefined}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics3 `${() => 3}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type function someGenerics4(strs: string[], n: T, f: (x: U) => void) { } someGenerics4 `${4}${ () => null }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics4 `${''}${ () => 3 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics4 `${ null }${ null }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type function someGenerics5(strs: string[], n: T, f: (x: U) => void) { } someGenerics5 `${ 4 } ${ () => null }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics5 `${ '' }${ () => 3 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics5 `${null}${null}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with multiple arguments of function types that each have parameters of the same generic type function someGenerics6(strs: string[], a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) { } someGenerics6 `${ n => n }${ n => n}${ n => n}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics6 `${ n => n }${ n => n}${ n => n}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with multiple arguments of function types that each have parameters of different generic type function someGenerics7(strs: string[], a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) { } someGenerics7 `${ n => n }${ n => n }${ n => n }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics7 `${ n => n }${ n => n }${ n => n }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with argument of generic function type function someGenerics8(strs: string[], n: T): T { return n; } var x = someGenerics8 `${ someGenerics7 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. x `${null}${null}${null}`; - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic tag with multiple parameters of generic type passed arguments with no best common type @@ -143,7 +143,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference return null; } var a9a = someGenerics9 `${ '' }${ 0 }${ [] }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~~~~~~~~ !!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. @@ -161,7 +161,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference } var a9e = someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~~~~~~~~ !!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. @@ -170,20 +170,20 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference // Generic tag with multiple parameters of generic type passed arguments with a single best common type var a9d = someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var a9d: { x: number; }; // Generic tag with multiple parameters of generic type where one argument is of type 'any' var anyVar: any; var a = someGenerics9 `${ 7 }${ anyVar }${ 4 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var a: any; // Generic tag with multiple parameters of generic type where one argument is [] and the other is not 'any' var arr = someGenerics9 `${ [] }${ null }${ undefined }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var arr: any[]; diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt index 7dedca9eb32..6676a6d8a81 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt @@ -1,12 +1,12 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(12,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(14,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(16,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(20,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(12,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(14,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(16,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(20,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(14,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. @@ -28,49 +28,49 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped var f: I; f `abc` - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc`.member - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`.member; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc`["member"]; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"]; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc`[0].member `abc${1}def${2}ghi`; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${ true }def${ true }ghi`["member"].member `abc${ 1 }def${ 2 }ghi`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.errors.txt index f6300855a1c..17c0b330dbb 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMemberExpressions.ts(13,21): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMemberExpressions.ts(13,23): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMemberExpressions.ts (1 errors) ==== @@ -15,7 +15,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMember var f: I; var x = new new new f `abc${ 0 }def`.member("hello")(42) === true; - ~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt index d49ec4b716d..bb5b56578df 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(16,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(17,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(18,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(19,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(20,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(21,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(16,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(17,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(18,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(19,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(20,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(21,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(12,20): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(14,9): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(19,20): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. @@ -31,24 +31,24 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio !!! error TS2346: Supplied parameters do not match any signature of call target. var u = foo ``; // number - ~~~~~~ + ~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var v = foo `${1}`; // string - ~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var w = foo `${1}${2}`; // boolean - ~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var x = foo `${1}${true}`; // boolean (with error) - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~ !!! error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. var y = foo `${1}${"2"}`; // {} - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var z = foo `${1}${2}${3}`; // any (with error) - ~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~~~~~~~~~~~~~ !!! error TS2346: Supplied parameters do not match any signature of call target. diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.errors.txt index fcde15afc27..3bf4af39779 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts(8,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts(17,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts(8,14): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts(17,14): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts (2 errors) ==== @@ -11,7 +11,7 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio } var a = foo1 `${1}`; // string - ~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var b = foo1([], 1); // number @@ -22,6 +22,6 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio } var c = foo2 `${1}`; // number - ~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var d = foo2([], 1); // number \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt index dd943e518f3..3ffe3d5820d 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt @@ -1,25 +1,25 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(7,17): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(10,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(16,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(17,16): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(23,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(34,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(35,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(36,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(40,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(41,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(42,9): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(45,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(54,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(55,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(56,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(57,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(60,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(63,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(64,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(70,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(71,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(7,21): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(10,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(16,20): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(17,20): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(23,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(26,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(34,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(35,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(36,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(40,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(41,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(42,13): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(45,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(54,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(55,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(56,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(57,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(60,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(63,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(64,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(70,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(71,5): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(10,9): error TS2345: Argument of type '{}' is not assignable to parameter of type 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(19,4): error TS2339: Property 'foo' does not exist on type 'Date'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(45,1): error TS2346: Supplied parameters do not match any signature of call target. @@ -36,12 +36,12 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio function fn1() { return null; } var s: string = fn1 `${ undefined }`; - ~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // No candidate overloads found fn1 `${ {} }`; // Error - ~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~ !!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'number'. @@ -51,10 +51,10 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio function fn2() { return undefined; } var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var d2 = fn2 `${ 0 }${ undefined }`; // any - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. d1.foo(); // error @@ -64,12 +64,12 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio // Generic and non-generic overload where generic overload is the only candidate fn2 `${ 0 }${ '' }`; // OK - ~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic and non-generic overload where non-generic overload is the only candidate fn2 `${ '' }${ 0 }`; // OK - ~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic overloads with differing arity @@ -79,30 +79,30 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio function fn3() { return null; } var s = fn3 `${ 3 }`; - ~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var s = fn3 `${'' }${ 3 }${ '' }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var n = fn3 `${ 5 }${ 5 }${ 5 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var n: number; // Generic overloads with differing arity tagging with arguments matching each overload type parameter count var s = fn3 `${ 4 }` - ~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var s = fn3 `${ '' }${ '' }${ '' }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. var n = fn3 `${ '' }${ '' }${ 3 }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic overloads with differing arity tagging with argument count that doesn't match any overload fn3 ``; // Error - ~~~~~~ + ~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~ !!! error TS2346: Supplied parameters do not match any signature of call target. @@ -115,31 +115,31 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio // Generic overloads with constraints tagged with types that satisfy the constraints fn4 `${ '' }${ 3 }`; - ~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. fn4 `${ 3 }${ '' }`; - ~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. fn4 `${ 3 }${ undefined }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. fn4 `${ '' }${ null }`; - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic overloads with constraints called with type arguments that do not satisfy the constraints fn4 `${ null }${ null }`; // Error - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. // Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints fn4 `${ true }${ null }`; - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~ !!! error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'number'. fn4 `${ null }${ true }`; - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~ !!! error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. @@ -149,12 +149,12 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio function fn5(strs: TemplateStringsArray, f: (n: number) => void): number; function fn5() { return undefined; } fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~~ !!! error TS2339: Property 'toFixed' does not exist on type 'string'. fn5 `${ (n) => n.substr(0) }`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt index 8a334a5611b..a50339adf11 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt @@ -1,56 +1,56 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(3,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(5,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(7,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(9,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(11,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(13,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(15,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(17,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(3,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(5,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(7,7): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(9,7): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(11,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(13,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(15,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(17,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts (10 errors) ==== var f: any; f `abc` - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.g.h `abc` - ~~~~~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.g.h `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`.member - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`.member; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`["member"]; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"]; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`["member"].someOtherTag `abc${1}def${2}ghi`; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].someOtherTag `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt index 41f3492317f..02de690a22b 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt @@ -1,11 +1,11 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(12,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(14,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(16,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(18,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(20,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(22,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(12,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(14,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(16,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(18,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(20,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(22,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts (8 errors) ==== @@ -21,35 +21,35 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,1 var f: I; f `abc` - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`.member - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`.member; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`["member"]; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"]; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`[0].member `abc${1}def${2}ghi`; - ~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt index a5e05d986c1..572ddfbd683 100644 --- a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(10,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(10,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. lib.d.ts(502,11): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'. @@ -21,5 +21,5 @@ tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(8,3): error TS2 !!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'. f `abcdef${ 1234 }${ 5678 }ghijkl`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt index 6b2d29139ed..56793bf95ad 100644 --- a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(7,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(7,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(5,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'. Property 'raw' is missing in type '{ [x: number]: undefined; }'. @@ -14,5 +14,5 @@ tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(5,3): error TS !!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'. f `abcdef${ 1234 }${ 5678 }ghijkl`; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. \ No newline at end of file From 1a0f32213f885a55439348d4e89df5961b21f2a8 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 16:55:18 -0800 Subject: [PATCH 092/178] Move type parameter error handling code to the grammar checker. --- src/compiler/parser.ts | 27 ++++++------------- src/compiler/types.ts | 3 +++ .../typeParameterConstraints1.errors.txt | 2 +- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 696b3986c54..34b49c5b07d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -855,23 +855,6 @@ module ts { errorAtPos(start, length, message, arg0, arg1, arg2); } - // This is just like createDiagnosticForNode except that it uses the current file - // being parsed instead of the file containing the node. This is because during - // parse, the nodes do not have parent pointers to get to the file. - // - // It is very intentional that we are not checking or changing the lookAheadMode value - // here. 'grammarErrorOnNode' is called when we are doing extra grammar checks and not - // when we are doing the actual parsing to determine what the user wrote. In other - // words, this function is called once we have already parsed the node, and are just - // applying some stricter checks on that node. - function grammarErrorOnNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - var span = getErrorSpanForNode(node); - var start = span.end > span.pos ? skipTrivia(file.text, span.pos) : span.pos; - var length = span.end - start; - - file.parseDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { file.parseDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); } @@ -1458,8 +1441,7 @@ module ts { // // // We do *not* want to consume the > as we're consuming the expression for "". - var expr = parseUnaryExpression(); - grammarErrorOnNode(expr, Diagnostics.Type_expected); + node.expression = parseUnaryExpression(); } } @@ -3762,6 +3744,7 @@ module ts { case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); case SyntaxKind.TupleType: return visitTupleType(node); + case SyntaxKind.TypeParameter: return visitTypeParameter(node); case SyntaxKind.TypeReference: return visitTypeReference(node); case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); case SyntaxKind.VariableStatement: return visitVariableStatement(node); @@ -4467,6 +4450,12 @@ module ts { } } + function visitTypeParameter(node: TypeParameterDeclaration) { + if (node.expression) { + grammarErrorOnFirstToken(node.expression, Diagnostics.Type_expected); + } + } + function visitTypeReference(node: TypeReferenceNode) { checkForAtLeastOneTypeArgument(node.typeArguments); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 81e2375780d..97db90ea048 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -326,6 +326,9 @@ module ts { export interface TypeParameterDeclaration extends Declaration { name: Identifier; constraint?: TypeNode; + + // For error recovery purposes. + expression?: Expression; } export interface SignatureDeclaration extends Declaration, ParsedSignature { } diff --git a/tests/baselines/reference/typeParameterConstraints1.errors.txt b/tests/baselines/reference/typeParameterConstraints1.errors.txt index e081f3c6ce6..d2e1f505c83 100644 --- a/tests/baselines/reference/typeParameterConstraints1.errors.txt +++ b/tests/baselines/reference/typeParameterConstraints1.errors.txt @@ -23,7 +23,7 @@ tests/cases/compiler/typeParameterConstraints1.ts(12,26): error TS2304: Cannot f ~ !!! error TS1110: Type expected. function foo10 (test: T) { } - ~~~ + ~ !!! error TS1110: Type expected. function foo11 (test: T) { } ~~~~ From f51a42c6de5b64acc49fc0f2e1ef43fb5faa6fe4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Nov 2014 17:04:34 -0800 Subject: [PATCH 093/178] Fixed issue where template expression in call expressions would emit with unnecessary parentheses. Fixes #1205. --- src/compiler/emitter.ts | 32 +++++++++++++------ .../reference/amdModuleName2.errors.txt | 30 ++++++++--------- .../templateStringInCallExpression.errors.txt | 7 ++++ .../templateStringInCallExpression.js | 5 +++ ...mplateStringInCallExpressionES6.errors.txt | 7 ++++ .../templateStringInCallExpressionES6.js | 5 +++ .../templateStringInNewExpression.errors.txt | 7 ++++ .../templateStringInNewExpression.js | 5 +++ ...emplateStringInNewExpressionES6.errors.txt | 7 ++++ .../templateStringInNewExpressionES6.js | 5 +++ .../templateStringInTaggedTemplate.errors.txt | 10 ++++++ ...mplateStringInTaggedTemplateES6.errors.txt | 7 ++++ .../templateStringInTaggedTemplateES6.js | 5 +++ .../templateStringInCallExpression.ts | 1 + .../templateStringInCallExpressionES6.ts | 2 ++ .../templateStringInNewExpression.ts | 1 + .../templateStringInNewExpressionES6.ts | 2 ++ .../templateStringInTaggedTemplate.ts | 1 + .../templateStringInTaggedTemplateES6.ts | 2 ++ 19 files changed, 117 insertions(+), 24 deletions(-) create mode 100644 tests/baselines/reference/templateStringInCallExpression.errors.txt create mode 100644 tests/baselines/reference/templateStringInCallExpression.js create mode 100644 tests/baselines/reference/templateStringInCallExpressionES6.errors.txt create mode 100644 tests/baselines/reference/templateStringInCallExpressionES6.js create mode 100644 tests/baselines/reference/templateStringInNewExpression.errors.txt create mode 100644 tests/baselines/reference/templateStringInNewExpression.js create mode 100644 tests/baselines/reference/templateStringInNewExpressionES6.errors.txt create mode 100644 tests/baselines/reference/templateStringInNewExpressionES6.js create mode 100644 tests/baselines/reference/templateStringInTaggedTemplate.errors.txt create mode 100644 tests/baselines/reference/templateStringInTaggedTemplateES6.errors.txt create mode 100644 tests/baselines/reference/templateStringInTaggedTemplateES6.js create mode 100644 tests/cases/conformance/es6/templates/templateStringInCallExpression.ts create mode 100644 tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts create mode 100644 tests/cases/conformance/es6/templates/templateStringInNewExpression.ts create mode 100644 tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts create mode 100644 tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts create mode 100644 tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index bc74f8304df..06031c9b84a 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -821,11 +821,10 @@ module ts { Debug.assert(node.parent.kind !== SyntaxKind.TaggedTemplateExpression); - var templateNeedsParens = isExpression(node.parent) - && node.parent.kind !== SyntaxKind.ParenExpression - && comparePrecedenceToBinaryPlus(node.parent) !== Comparison.LessThan; + var emitOuterParens = isExpression(node.parent) + && templateNeedsParens(node, node.parent); - if (templateNeedsParens) { + if (emitOuterParens) { write("("); } @@ -834,7 +833,7 @@ module ts { forEach(node.templateSpans, templateSpan => { // Check if the expression has operands and binds its operands less closely than binary '+'. // If it does, we need to wrap the expression in parentheses. Otherwise, something like - // `abc${ 1 << 2}` + // `abc${ 1 << 2 }` // becomes // "abc" + 1 << 2 + "" // which is really @@ -855,18 +854,34 @@ module ts { } // Only emit if the literal is non-empty. - // The binary '+' operator is left-associative, so the first string concatenation will force - // the result up to this point to be a string. Emitting a '+ ""' has no semantic effect. + // The binary '+' operator is left-associative, so the first string concatenation + // with the head will force the result up to this point to be a string. + // Emitting a '+ ""' has no semantic effect for middles and tails. if (templateSpan.literal.text.length !== 0) { write(" + ") emitLiteral(templateSpan.literal); } }); - if (templateNeedsParens) { + if (emitOuterParens) { write(")"); } + function templateNeedsParens(template: TemplateExpression, parent: Expression) { + switch (parent.kind) { + case SyntaxKind.TaggedTemplateExpression: + Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6!"); + //return (parent).tag === template; + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + return (parent).func === template; + case SyntaxKind.ParenExpression: + return false; + default: + return comparePrecedenceToBinaryPlus(parent) !== Comparison.LessThan; + } + } + /** * Returns whether the expression has lesser, greater, * or equal precedence to the binary '+' operator @@ -899,7 +914,6 @@ module ts { return Comparison.GreaterThan; } } - } function emitTemplateSpan(span: TemplateSpan) { diff --git a/tests/baselines/reference/amdModuleName2.errors.txt b/tests/baselines/reference/amdModuleName2.errors.txt index 911f31a1f4b..cf7fb82ae10 100644 --- a/tests/baselines/reference/amdModuleName2.errors.txt +++ b/tests/baselines/reference/amdModuleName2.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments. - - -==== tests/cases/compiler/amdModuleName2.ts (1 errors) ==== - /// - /// - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2458: An AMD module cannot have multiple name assignments. - class Foo { - x: number; - constructor() { - this.x = 5; - } - } - export = Foo; +tests/cases/compiler/amdModuleName2.ts(2,1): error TS2458: An AMD module cannot have multiple name assignments. + + +==== tests/cases/compiler/amdModuleName2.ts (1 errors) ==== + /// + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2458: An AMD module cannot have multiple name assignments. + class Foo { + x: number; + constructor() { + this.x = 5; + } + } + export = Foo; \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInCallExpression.errors.txt b/tests/baselines/reference/templateStringInCallExpression.errors.txt new file mode 100644 index 00000000000..c483fd9d4c0 --- /dev/null +++ b/tests/baselines/reference/templateStringInCallExpression.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/templates/templateStringInCallExpression.ts(1,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. + + +==== tests/cases/conformance/es6/templates/templateStringInCallExpression.ts (1 errors) ==== + `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2349: Cannot invoke an expression whose type lacks a call signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInCallExpression.js b/tests/baselines/reference/templateStringInCallExpression.js new file mode 100644 index 00000000000..aa0671a1862 --- /dev/null +++ b/tests/baselines/reference/templateStringInCallExpression.js @@ -0,0 +1,5 @@ +//// [templateStringInCallExpression.ts] +`abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + +//// [templateStringInCallExpression.js] +("abc" + 0 + "abc")("hello " + 0 + " world", " ", "1" + 2 + "3"); diff --git a/tests/baselines/reference/templateStringInCallExpressionES6.errors.txt b/tests/baselines/reference/templateStringInCallExpressionES6.errors.txt new file mode 100644 index 00000000000..7a391b6afe7 --- /dev/null +++ b/tests/baselines/reference/templateStringInCallExpressionES6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts(1,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. + + +==== tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts (1 errors) ==== + `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2349: Cannot invoke an expression whose type lacks a call signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInCallExpressionES6.js b/tests/baselines/reference/templateStringInCallExpressionES6.js new file mode 100644 index 00000000000..a9f5f9153cd --- /dev/null +++ b/tests/baselines/reference/templateStringInCallExpressionES6.js @@ -0,0 +1,5 @@ +//// [templateStringInCallExpressionES6.ts] +`abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + +//// [templateStringInCallExpressionES6.js] +`abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); diff --git a/tests/baselines/reference/templateStringInNewExpression.errors.txt b/tests/baselines/reference/templateStringInNewExpression.errors.txt new file mode 100644 index 00000000000..00ae3a6e4a2 --- /dev/null +++ b/tests/baselines/reference/templateStringInNewExpression.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/templates/templateStringInNewExpression.ts(1,1): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. + + +==== tests/cases/conformance/es6/templates/templateStringInNewExpression.ts (1 errors) ==== + new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInNewExpression.js b/tests/baselines/reference/templateStringInNewExpression.js new file mode 100644 index 00000000000..1b1770c6197 --- /dev/null +++ b/tests/baselines/reference/templateStringInNewExpression.js @@ -0,0 +1,5 @@ +//// [templateStringInNewExpression.ts] +new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + +//// [templateStringInNewExpression.js] +new ("abc" + 0 + "abc")("hello " + 0 + " world", " ", "1" + 2 + "3"); diff --git a/tests/baselines/reference/templateStringInNewExpressionES6.errors.txt b/tests/baselines/reference/templateStringInNewExpressionES6.errors.txt new file mode 100644 index 00000000000..3170afc98bf --- /dev/null +++ b/tests/baselines/reference/templateStringInNewExpressionES6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts(1,1): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. + + +==== tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts (1 errors) ==== + new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInNewExpressionES6.js b/tests/baselines/reference/templateStringInNewExpressionES6.js new file mode 100644 index 00000000000..f970c11167e --- /dev/null +++ b/tests/baselines/reference/templateStringInNewExpressionES6.js @@ -0,0 +1,5 @@ +//// [templateStringInNewExpressionES6.ts] +new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); + +//// [templateStringInNewExpressionES6.js] +new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); diff --git a/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt b/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt new file mode 100644 index 00000000000..1bad2f0bf5b --- /dev/null +++ b/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt @@ -0,0 +1,10 @@ +tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts(1,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts(1,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. + + +==== tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts (2 errors) ==== + `I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2349: Cannot invoke an expression whose type lacks a call signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInTaggedTemplateES6.errors.txt b/tests/baselines/reference/templateStringInTaggedTemplateES6.errors.txt new file mode 100644 index 00000000000..fd30d7f4074 --- /dev/null +++ b/tests/baselines/reference/templateStringInTaggedTemplateES6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts(1,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. + + +==== tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts (1 errors) ==== + `I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2349: Cannot invoke an expression whose type lacks a call signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInTaggedTemplateES6.js b/tests/baselines/reference/templateStringInTaggedTemplateES6.js new file mode 100644 index 00000000000..419471a052e --- /dev/null +++ b/tests/baselines/reference/templateStringInTaggedTemplateES6.js @@ -0,0 +1,5 @@ +//// [templateStringInTaggedTemplateES6.ts] +`I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` + +//// [templateStringInTaggedTemplateES6.js] +`I AM THE ${`${`TAG`} `} PORTION` `I ${"AM"} THE TEMPLATE PORTION`; diff --git a/tests/cases/conformance/es6/templates/templateStringInCallExpression.ts b/tests/cases/conformance/es6/templates/templateStringInCallExpression.ts new file mode 100644 index 00000000000..04597a4c120 --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInCallExpression.ts @@ -0,0 +1 @@ +`abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts b/tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts new file mode 100644 index 00000000000..d1cf67787e4 --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInCallExpressionES6.ts @@ -0,0 +1,2 @@ +// @target: ES6 +`abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInNewExpression.ts b/tests/cases/conformance/es6/templates/templateStringInNewExpression.ts new file mode 100644 index 00000000000..cac8571553f --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInNewExpression.ts @@ -0,0 +1 @@ +new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts b/tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts new file mode 100644 index 00000000000..6d069f7004e --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInNewExpressionES6.ts @@ -0,0 +1,2 @@ +// @target: ES6 +new `abc${0}abc`(`hello ${0} world`, ` `, `1${2}3`); \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts b/tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts new file mode 100644 index 00000000000..79a0d770bee --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts @@ -0,0 +1 @@ +`I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts b/tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts new file mode 100644 index 00000000000..dfb2de1f4b7 --- /dev/null +++ b/tests/cases/conformance/es6/templates/templateStringInTaggedTemplateES6.ts @@ -0,0 +1,2 @@ +// @target: ES6 +`I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` \ No newline at end of file From cfb74249c895bed48215f7c81bec0ea93fbfe12d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 17:15:25 -0800 Subject: [PATCH 094/178] Don't report a grammar error for a real parse error. --- src/compiler/parser.ts | 24 ++++++++++++------- ...umConflictsWithGlobalIdentifier.errors.txt | 4 ++-- .../reference/enumMemberResolution.errors.txt | 4 ++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 34b49c5b07d..7c6942960ad 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1010,7 +1010,10 @@ module ts { function createNode(kind: SyntaxKind, pos?: number): Node { nodeCount++; var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = objectAllocator.getNodeConstructor(kind)))(); - if (!(pos >= 0)) pos = scanner.getStartPos(); + if (!(pos >= 0)) { + pos = scanner.getStartPos(); + } + node.pos = pos; node.end = pos; return node; @@ -2225,16 +2228,21 @@ module ts { // the code would be implicitly: "name.keyword; identifierNameOrKeyword". // In the first case though, ASI will not take effect because there is not a // line terminator after the keyword. - if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord() && lookAhead(() => scanner.isReservedWord())) { - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, Diagnostics.Identifier_expected); - var id = createMissingNode(); - } - else { - var id = parseIdentifierName(); + var id: Identifier; + if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) { + var matchesPattern = lookAhead(() => { + nextToken(); + return !scanner.hasPrecedingLineBreak() && (scanner.isIdentifier() || scanner.isReservedWord); + }); + + if (matchesPattern) { + errorAtPos(dotOrBracketStart + 1, 0, Diagnostics.Identifier_expected); + id = createMissingNode(); + } } propertyAccess.left = expr; - propertyAccess.right = id; + propertyAccess.right = id || parseIdentifierName(); expr = finishNode(propertyAccess); continue; } diff --git a/tests/baselines/reference/enumConflictsWithGlobalIdentifier.errors.txt b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.errors.txt index 235b665cdc0..e6859558f74 100644 --- a/tests/baselines/reference/enumConflictsWithGlobalIdentifier.errors.txt +++ b/tests/baselines/reference/enumConflictsWithGlobalIdentifier.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/enumConflictsWithGlobalIdentifier.ts(4,28): error TS1003: Identifier expected. +tests/cases/compiler/enumConflictsWithGlobalIdentifier.ts(4,29): error TS1003: Identifier expected. tests/cases/compiler/enumConflictsWithGlobalIdentifier.ts(4,9): error TS2304: Cannot find name 'IgnoreRulesSpecific'. @@ -7,7 +7,7 @@ tests/cases/compiler/enumConflictsWithGlobalIdentifier.ts(4,9): error TS2304: Ca IgnoreRulesSpecific = 0, } var x = IgnoreRulesSpecific. - ~ + !!! error TS1003: Identifier expected. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'IgnoreRulesSpecific'. diff --git a/tests/baselines/reference/enumMemberResolution.errors.txt b/tests/baselines/reference/enumMemberResolution.errors.txt index 5c84c08d984..f446c0d7909 100644 --- a/tests/baselines/reference/enumMemberResolution.errors.txt +++ b/tests/baselines/reference/enumMemberResolution.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/enumMemberResolution.ts(4,28): error TS1003: Identifier expected. +tests/cases/compiler/enumMemberResolution.ts(4,29): error TS1003: Identifier expected. tests/cases/compiler/enumMemberResolution.ts(4,9): error TS2304: Cannot find name 'IgnoreRulesSpecific'. @@ -7,7 +7,7 @@ tests/cases/compiler/enumMemberResolution.ts(4,9): error TS2304: Cannot find nam IgnoreRulesSpecific = 0 } var x = IgnoreRulesSpecific. // error - ~ + !!! error TS1003: Identifier expected. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'IgnoreRulesSpecific'. From 4a76206e0c8cbcdfab9518601f841e6cb9822bf0 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 17:19:03 -0800 Subject: [PATCH 095/178] Move away from a grammar error when a real parse error occurs. --- src/compiler/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7c6942960ad..e1e2cd28a00 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2255,7 +2255,7 @@ module ts { // Check for that common pattern and report a better error message. if (inNewExpression && parseOptional(SyntaxKind.CloseBracketToken)) { indexedAccess.index = createMissingNode(); - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + errorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } else { indexedAccess.index = parseExpression(); From 7a414fc308ba9730c5bce0b2cb64f1b54d63dd5f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 17:43:08 -0800 Subject: [PATCH 096/178] Move parser error to the grammar checker. --- src/compiler/parser.ts | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9e13f50cd88..0b974a35200 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2317,10 +2317,11 @@ module ts { } function parseSingleTypeArgument(): TypeNode { + // Be resilient to something like: Foo<,,>(); + // We want to parse this out as a type argument list (esp. for signature help), and we + // don't want to rollback just because we were missing a type arg. The grammar checker + // will report the actual error later on. if (token === SyntaxKind.CommaToken) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, Diagnostics.Type_expected); return createNode(SyntaxKind.Missing); } @@ -3920,11 +3921,27 @@ module ts { } function visitCallExpression(node: CallExpression) { - checkForTrailingComma(node.typeArguments) || - checkForAtLeastOneTypeArgument(node.typeArguments) || + checkTypeArguments(node.typeArguments) || checkForTrailingComma(node.arguments); } + function checkTypeArguments(typeArguments: NodeArray) { + return checkForTrailingComma(typeArguments) || + checkForAtLeastOneTypeArgument(typeArguments) || + checkForMissingTypeArgument(typeArguments); + } + + function checkForMissingTypeArgument(typeArguments: NodeArray) { + if (typeArguments) { + for (var i = 0, n = typeArguments.length; i < n; i++) { + var arg = typeArguments[i]; + if (arg.kind === SyntaxKind.Missing) { + return grammarErrorAtPos(arg.pos, 0, Diagnostics.Type_expected); + } + } + } + } + function checkForAtLeastOneTypeArgument(typeArguments: NodeArray) { if (typeArguments && typeArguments.length === 0) { var start = typeArguments.pos - "<".length; @@ -4185,8 +4202,7 @@ module ts { } function visitNewExpression(node: NewExpression): void { - checkForTrailingComma(node.typeArguments) || - checkForAtLeastOneTypeArgument(node.typeArguments) || + checkTypeArguments(node.typeArguments) || checkForTrailingComma(node.arguments); } @@ -4465,7 +4481,7 @@ module ts { } function visitTypeReference(node: TypeReferenceNode) { - checkForAtLeastOneTypeArgument(node.typeArguments); + checkTypeArguments(node.typeArguments); } function visitVariableDeclaration(node: VariableDeclaration) { From 76f88392a4d0b7d157747a2799c3f43d2ede498e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 17:57:35 -0800 Subject: [PATCH 097/178] Move missing argument checks to the grammar walker. --- src/compiler/parser.ts | 39 ++++++++++++------- .../reference/missingArgument1.errors.txt | 16 ++++++++ ...rserErrorRecovery_ArgumentList6.errors.txt | 5 +-- ...rserErrorRecovery_ArgumentList7.errors.txt | 5 +-- tests/cases/compiler/missingArgument1.ts | 1 + 5 files changed, 43 insertions(+), 23 deletions(-) create mode 100644 tests/baselines/reference/missingArgument1.errors.txt create mode 100644 tests/cases/compiler/missingArgument1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0b974a35200..2fe60edd4c7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2376,25 +2376,18 @@ module ts { return finishNode(node); } - function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic: DiagnosticMessage): Expression { - if (token === SyntaxKind.CommaToken) { - if (omittedExpressionDiagnostic) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic); - } - return createNode(SyntaxKind.OmittedExpression); - } - - return parseAssignmentExpression(); + function parseAssignmentExpressionOrOmittedExpression(): Expression { + return token === SyntaxKind.CommaToken + ? createNode(SyntaxKind.OmittedExpression) + : parseAssignmentExpression(); } function parseArrayLiteralElement(): Expression { - return parseAssignmentExpressionOrOmittedExpression(/*omittedExpressionDiagnostic*/ undefined); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArgumentExpression(): Expression { - return parseAssignmentExpressionOrOmittedExpression(Diagnostics.Argument_expression_expected); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArrayLiteral(): ArrayLiteral { @@ -3922,7 +3915,12 @@ module ts { function visitCallExpression(node: CallExpression) { checkTypeArguments(node.typeArguments) || - checkForTrailingComma(node.arguments); + checkArguments(node.arguments); + } + + function checkArguments(arguments: NodeArray) { + return checkForTrailingComma(arguments) || + checkForOmittedArgument(arguments); } function checkTypeArguments(typeArguments: NodeArray) { @@ -3931,6 +3929,17 @@ module ts { checkForMissingTypeArgument(typeArguments); } + function checkForOmittedArgument(arguments: NodeArray) { + if (arguments) { + for (var i = 0, n = arguments.length; i < n; i++) { + var arg = arguments[i]; + if (arg.kind === SyntaxKind.OmittedExpression) { + return grammarErrorAtPos(arg.pos, 0, Diagnostics.Argument_expression_expected); + } + } + } + } + function checkForMissingTypeArgument(typeArguments: NodeArray) { if (typeArguments) { for (var i = 0, n = typeArguments.length; i < n; i++) { @@ -4203,7 +4212,7 @@ module ts { function visitNewExpression(node: NewExpression): void { checkTypeArguments(node.typeArguments) || - checkForTrailingComma(node.arguments); + checkArguments(node.arguments); } function visitObjectLiteral(node: ObjectLiteral): void { diff --git a/tests/baselines/reference/missingArgument1.errors.txt b/tests/baselines/reference/missingArgument1.errors.txt new file mode 100644 index 00000000000..02911e3c9b5 --- /dev/null +++ b/tests/baselines/reference/missingArgument1.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/missingArgument1.ts(1,7): error TS1135: Argument expression expected. +tests/cases/compiler/missingArgument1.ts(1,1): error TS2304: Cannot find name 'foo'. +tests/cases/compiler/missingArgument1.ts(1,5): error TS2304: Cannot find name 'a'. +tests/cases/compiler/missingArgument1.ts(1,8): error TS2304: Cannot find name 'b'. + + +==== tests/cases/compiler/missingArgument1.ts (4 errors) ==== + foo(a,,b); + +!!! error TS1135: Argument expression expected. + ~~~ +!!! error TS2304: Cannot find name 'foo'. + ~ +!!! error TS2304: Cannot find name 'a'. + ~ +!!! error TS2304: Cannot find name 'b'. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList6.errors.txt b/tests/baselines/reference/parserErrorRecovery_ArgumentList6.errors.txt index 799c67593e0..cf6f7b10938 100644 --- a/tests/baselines/reference/parserErrorRecovery_ArgumentList6.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList6.errors.txt @@ -1,12 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList6.ts(1,5): error TS1135: Argument expression expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList6.ts(1,6): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList6.ts(1,1): error TS2304: Cannot find name 'Foo'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList6.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList6.ts (2 errors) ==== Foo(, - ~ -!!! error TS1135: Argument expression expected. !!! error TS1005: ')' expected. ~~~ diff --git a/tests/baselines/reference/parserErrorRecovery_ArgumentList7.errors.txt b/tests/baselines/reference/parserErrorRecovery_ArgumentList7.errors.txt index 95f4febf447..67602cb11af 100644 --- a/tests/baselines/reference/parserErrorRecovery_ArgumentList7.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ArgumentList7.errors.txt @@ -1,13 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts(1,7): error TS1135: Argument expression expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts(1,8): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts(1,1): error TS2304: Cannot find name 'Foo'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts(1,5): error TS2304: Cannot find name 'a'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts (4 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArgumentLists/parserErrorRecovery_ArgumentList7.ts (3 errors) ==== Foo(a,, - ~ -!!! error TS1135: Argument expression expected. !!! error TS1005: ')' expected. ~~~ diff --git a/tests/cases/compiler/missingArgument1.ts b/tests/cases/compiler/missingArgument1.ts new file mode 100644 index 00000000000..27408bc2cd8 --- /dev/null +++ b/tests/cases/compiler/missingArgument1.ts @@ -0,0 +1 @@ +foo(a,,b); \ No newline at end of file From 9751dca80962409aadc9c3b9b4a8e8158ca90bdb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 18:06:01 -0800 Subject: [PATCH 098/178] Move property initializer checks to the grammar checker. --- src/compiler/parser.ts | 10 +++-- .../reference/ambientErrors.errors.txt | 45 +++++++++++++++---- .../initializersInDeclarations.errors.txt | 25 ++++++++--- 3 files changed, 63 insertions(+), 17 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 2fe60edd4c7..12712fcf805 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2994,9 +2994,6 @@ module ts { property.initializer = parseInitializer(/*inParameter*/ false); parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.parseDiagnostics.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } return finishNode(property); } } @@ -3739,6 +3736,7 @@ module ts { case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); + case SyntaxKind.Property: return visitProperty(node); case SyntaxKind.PropertyAssignment: return visitPropertyAssignment(node); case SyntaxKind.ReturnStatement: return visitReturnStatement(node); case SyntaxKind.SetAccessor: return visitSetAccessor(node); @@ -4381,6 +4379,12 @@ module ts { } } + function visitProperty(node: PropertyDeclaration) { + if (inAmbientContext && node.initializer) { + grammarErrorOnFirstToken(node.initializer, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + } + function visitPropertyAssignment(node: PropertyDeclaration) { checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); } diff --git a/tests/baselines/reference/ambientErrors.errors.txt b/tests/baselines/reference/ambientErrors.errors.txt index a1e85be7401..6fe7a25dfe9 100644 --- a/tests/baselines/reference/ambientErrors.errors.txt +++ b/tests/baselines/reference/ambientErrors.errors.txt @@ -1,5 +1,14 @@ -tests/cases/conformance/ambient/ambientErrors.ts(37,18): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/ambient/ambientErrors.ts(38,11): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/ambient/ambientErrors.ts(2,15): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/conformance/ambient/ambientErrors.ts(24,5): error TS1066: Ambient enum elements can only have integer literal initializers. +tests/cases/conformance/ambient/ambientErrors.ts(29,5): error TS1066: Ambient enum elements can only have integer literal initializers. +tests/cases/conformance/ambient/ambientErrors.ts(34,11): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/conformance/ambient/ambientErrors.ts(37,20): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/ambient/ambientErrors.ts(38,13): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/ambient/ambientErrors.ts(39,23): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/conformance/ambient/ambientErrors.ts(40,14): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/conformance/ambient/ambientErrors.ts(41,22): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/ambient/ambientErrors.ts(6,1): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/ambient/ambientErrors.ts(17,22): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. tests/cases/conformance/ambient/ambientErrors.ts(47,20): error TS2435: Ambient external modules cannot be nested in other modules. @@ -7,9 +16,11 @@ tests/cases/conformance/ambient/ambientErrors.ts(51,16): error TS2436: Ambient e tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export assignment cannot be used in a module with other exported elements. -==== tests/cases/conformance/ambient/ambientErrors.ts (7 errors) ==== +==== tests/cases/conformance/ambient/ambientErrors.ts (16 errors) ==== // Ambient variable with an initializer declare var x = 4; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. // Ambient functions with invalid overloads declare function fn(x: number): string; @@ -32,31 +43,47 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export // Ambient function with function body declare function fn4() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. // Ambient enum with non - integer literal constant member declare enum E1 { y = 4.23 + ~ +!!! error TS1066: Ambient enum elements can only have integer literal initializers. } // Ambient enum with computer member declare enum E2 { x = 'foo'.length + ~ +!!! error TS1066: Ambient enum elements can only have integer literal initializers. } // Ambient module with initializers for values, bodies for functions / classes declare module M1 { var x = 3; - function fn() { } - class C { - static x = 3; - ~ -!!! error TS1039: Initializers are not allowed in ambient contexts. - y = 4; ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. + function fn() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + class C { + static x = 3; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. + y = 4; + ~ !!! error TS1039: Initializers are not allowed in ambient contexts. constructor() { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. fn() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static sfn() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. } } diff --git a/tests/baselines/reference/initializersInDeclarations.errors.txt b/tests/baselines/reference/initializersInDeclarations.errors.txt index 9e02a1cd747..99798d749c2 100644 --- a/tests/baselines/reference/initializersInDeclarations.errors.txt +++ b/tests/baselines/reference/initializersInDeclarations.errors.txt @@ -1,28 +1,43 @@ -tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,7): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,14): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,9): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,16): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(8,3): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(12,15): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(13,15): error TS1039: Initializers are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(16,2): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(18,16): error TS1039: Initializers are not allowed in ambient contexts. -==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (2 errors) ==== +==== tests/cases/conformance/externalModules/initializersInDeclarations.ts (7 errors) ==== // Errors: Initializers & statements in declaration file declare class Foo { name = "test"; - ~ + ~~~~~~ !!! error TS1039: Initializers are not allowed in ambient contexts. "some prop" = 42; - ~ + ~~ !!! error TS1039: Initializers are not allowed in ambient contexts. fn(): boolean { return false; + ~~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. } } declare var x = []; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. declare var y = {}; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. declare module M1 { while(true); + ~~~~~ +!!! error TS1036: Statements are not allowed in ambient contexts. export var v1 = () => false; + ~ +!!! error TS1039: Initializers are not allowed in ambient contexts. } \ No newline at end of file From bffd1d2ae25329c2927ffd237552d33476dd5cad Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 18:36:05 -0800 Subject: [PATCH 099/178] Move errors about "new Foo[]" to the grammar checker. --- src/compiler/parser.ts | 17 ++++++++++--- .../reference/badArraySyntax.errors.txt | 25 ++++++++----------- ...annotInvokeNewOnErrorExpression.errors.txt | 4 +-- .../reference/createArray.errors.txt | 16 ++++++------ .../baselines/reference/libMembers.errors.txt | 4 +-- .../reference/newOperator.errors.txt | 12 +++++---- ...rserObjectCreationArrayLiteral1.errors.txt | 4 +-- ...rserObjectCreationArrayLiteral3.errors.txt | 4 +-- .../reference/parserRealSource10.errors.txt | 20 +++++++-------- .../reference/parserRealSource11.errors.txt | 17 +++++++------ .../reference/parserRealSource4.errors.txt | 4 +-- .../reference/parserRealSource7.errors.txt | 4 +-- .../reference/parserRealSource9.errors.txt | 4 +-- 13 files changed, 74 insertions(+), 61 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 12712fcf805..0bd407fc951 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1028,8 +1028,8 @@ module ts { return node; } - function createMissingNode(): Node { - return createNode(SyntaxKind.Missing); + function createMissingNode(pos?: number): Node { + return createNode(SyntaxKind.Missing, pos); } function internIdentifier(text: string): string { @@ -2254,7 +2254,6 @@ module ts { // Check for that common pattern and report a better error message. if (inNewExpression && parseOptional(SyntaxKind.CloseBracketToken)) { indexedAccess.index = createMissingNode(); - errorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } else { indexedAccess.index = parseExpression(); @@ -3725,6 +3724,7 @@ module ts { case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); case SyntaxKind.FunctionType: return visitFunctionType(node); case SyntaxKind.GetAccessor: return visitGetAccessor(node); + case SyntaxKind.IndexedAccess: return visitIndexedAccess(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); case SyntaxKind.LabeledStatement: return visitLabeledStatement(node); @@ -4123,6 +4123,17 @@ module ts { checkAccessor(node); } + function visitIndexedAccess(node: IndexedAccess): void { + if (node.index.kind === SyntaxKind.Missing && + node.parent.kind === SyntaxKind.NewExpression && + (node.parent).func === node) { + + var start = skipTrivia(sourceText, node.parent.pos); + var end = node.end; + grammarErrorAtPos(start, end - start, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + } + } + function visitIndexSignature(node: SignatureDeclaration): void { checkIndexSignatureParameters(node); } diff --git a/tests/baselines/reference/badArraySyntax.errors.txt b/tests/baselines/reference/badArraySyntax.errors.txt index 8c9bd45fba1..500a89d85a9 100644 --- a/tests/baselines/reference/badArraySyntax.errors.txt +++ b/tests/baselines/reference/badArraySyntax.errors.txt @@ -1,32 +1,29 @@ -tests/cases/compiler/badArraySyntax.ts(6,15): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/badArraySyntax.ts(7,15): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/badArraySyntax.ts(8,20): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/badArraySyntax.ts(9,20): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/badArraySyntax.ts(10,29): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/badArraySyntax.ts(10,40): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/badArraySyntax.ts(6,10): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/badArraySyntax.ts(7,10): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/badArraySyntax.ts(8,15): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/badArraySyntax.ts(9,15): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/badArraySyntax.ts(10,17): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -==== tests/cases/compiler/badArraySyntax.ts (6 errors) ==== +==== tests/cases/compiler/badArraySyntax.ts (5 errors) ==== class Z { public x = ""; } var a1: Z[] = []; var a2 = new Z[]; - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var a3 = new Z[](); - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var a4: Z[] = new Z[]; - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var a5: Z[] = new Z[](); - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var a6: Z[][] = new Z [ ] [ ]; - ~~~~~~~~ -!!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. - ~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. \ No newline at end of file diff --git a/tests/baselines/reference/cannotInvokeNewOnErrorExpression.errors.txt b/tests/baselines/reference/cannotInvokeNewOnErrorExpression.errors.txt index cfb9287cdbc..f0397f5ee60 100644 --- a/tests/baselines/reference/cannotInvokeNewOnErrorExpression.errors.txt +++ b/tests/baselines/reference/cannotInvokeNewOnErrorExpression.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/cannotInvokeNewOnErrorExpression.ts(5,21): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/cannotInvokeNewOnErrorExpression.ts(5,9): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/cannotInvokeNewOnErrorExpression.ts(5,15): error TS2339: Property 'ClassA' does not exist on type 'typeof M'. @@ -8,7 +8,7 @@ tests/cases/compiler/cannotInvokeNewOnErrorExpression.ts(5,15): error TS2339: Pr class ClassA {} } var t = new M.ClassA[]; - ~~ + ~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2339: Property 'ClassA' does not exist on type 'typeof M'. \ No newline at end of file diff --git a/tests/baselines/reference/createArray.errors.txt b/tests/baselines/reference/createArray.errors.txt index 6f79c4b47d2..2e2b4567567 100644 --- a/tests/baselines/reference/createArray.errors.txt +++ b/tests/baselines/reference/createArray.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/createArray.ts(1,18): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/createArray.ts(6,6): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/createArray.ts(7,19): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/createArray.ts(8,18): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/createArray.ts(1,8): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/createArray.ts(6,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/createArray.ts(7,8): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/createArray.ts(8,8): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/createArray.ts(1,12): error TS2304: Cannot find name 'number'. tests/cases/compiler/createArray.ts(7,12): error TS2304: Cannot find name 'boolean'. tests/cases/compiler/createArray.ts(8,12): error TS2304: Cannot find name 'string'. @@ -9,7 +9,7 @@ tests/cases/compiler/createArray.ts(8,12): error TS2304: Cannot find name 'strin ==== tests/cases/compiler/createArray.ts (7 errors) ==== var na=new number[]; - ~~ + ~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2304: Cannot find name 'number'. @@ -18,15 +18,15 @@ tests/cases/compiler/createArray.ts(8,12): error TS2304: Cannot find name 'strin } new C[]; - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var ba=new boolean[]; - ~~ + ~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~~ !!! error TS2304: Cannot find name 'boolean'. var sa=new string[]; - ~~ + ~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2304: Cannot find name 'string'. diff --git a/tests/baselines/reference/libMembers.errors.txt b/tests/baselines/reference/libMembers.errors.txt index a6af67821b3..73f5c945f70 100644 --- a/tests/baselines/reference/libMembers.errors.txt +++ b/tests/baselines/reference/libMembers.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/libMembers.ts(9,16): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/libMembers.ts(9,11): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/libMembers.ts(4,3): error TS2339: Property 'subby' does not exist on type 'string'. tests/cases/compiler/libMembers.ts(12,15): error TS2339: Property 'prototype' does not exist on type 'C'. @@ -15,7 +15,7 @@ tests/cases/compiler/libMembers.ts(12,15): error TS2339: Property 'prototype' do export class C { } var a=new C[]; - ~~ + ~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. a.length; a.push(new C()); diff --git a/tests/baselines/reference/newOperator.errors.txt b/tests/baselines/reference/newOperator.errors.txt index 2d3fd005448..47f0a68b683 100644 --- a/tests/baselines/reference/newOperator.errors.txt +++ b/tests/baselines/reference/newOperator.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/newOperator.ts(18,20): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/newOperator.ts(22,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/newOperator.ts(45,23): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/newOperator.ts(18,10): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/newOperator.ts(20,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/newOperator.ts(45,16): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/newOperator.ts(3,13): error TS2304: Cannot find name 'ifc'. tests/cases/compiler/newOperator.ts(10,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. tests/cases/compiler/newOperator.ts(11,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. @@ -38,14 +38,16 @@ tests/cases/compiler/newOperator.ts(31,10): error TS2351: Cannot use 'new' with // Various spacing var t3 = new string[]( ); - ~~ + ~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2304: Cannot find name 'string'. var t4 = new + ~~~ string ~~~~~~ + ~~~~~~ !!! error TS2304: Cannot find name 'string'. [ ~ @@ -78,7 +80,7 @@ tests/cases/compiler/newOperator.ts(31,10): error TS2351: Cannot use 'new' with class S { public get xs(): M.T[] { return new M.T[]; - ~~ + ~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. } } diff --git a/tests/baselines/reference/parserObjectCreationArrayLiteral1.errors.txt b/tests/baselines/reference/parserObjectCreationArrayLiteral1.errors.txt index 04be3a6d041..f0ca8d45b7a 100644 --- a/tests/baselines/reference/parserObjectCreationArrayLiteral1.errors.txt +++ b/tests/baselines/reference/parserObjectCreationArrayLiteral1.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral1.ts(1,8): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral1.ts(1,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral1.ts(1,5): error TS2304: Cannot find name 'Foo'. ==== tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral1.ts (2 errors) ==== new Foo[]; - ~~ + ~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~ !!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file diff --git a/tests/baselines/reference/parserObjectCreationArrayLiteral3.errors.txt b/tests/baselines/reference/parserObjectCreationArrayLiteral3.errors.txt index 89f861cfcdb..3187d985cc2 100644 --- a/tests/baselines/reference/parserObjectCreationArrayLiteral3.errors.txt +++ b/tests/baselines/reference/parserObjectCreationArrayLiteral3.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral3.ts(1,8): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral3.ts(1,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral3.ts(1,5): error TS2304: Cannot find name 'Foo'. ==== tests/cases/conformance/parser/ecmascript5/parserObjectCreationArrayLiteral3.ts (2 errors) ==== new Foo[](); - ~~ + ~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~ !!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file diff --git a/tests/baselines/reference/parserRealSource10.errors.txt b/tests/baselines/reference/parserRealSource10.errors.txt index aabafd751e7..4184d9ac23e 100644 --- a/tests/baselines/reference/parserRealSource10.errors.txt +++ b/tests/baselines/reference/parserRealSource10.errors.txt @@ -1,9 +1,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(127,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,47): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(449,40): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(127,29): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,32): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,37): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,31): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(449,31): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,36): error TS2304: Cannot find name 'string'. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,41): error TS2304: Cannot find name 'number'. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,35): error TS2304: Cannot find name 'boolean'. @@ -472,20 +472,20 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(356,53): error } export var tokenTable = new TokenInfo[]; - ~~ + ~~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. export var nodeTypeTable = new string[]; - ~~ + ~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2304: Cannot find name 'string'. export var nodeTypeToTokTable = new number[]; - ~~ + ~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~ !!! error TS2304: Cannot find name 'number'. export var noRegexTable = new boolean[]; - ~~ + ~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~~ !!! error TS2304: Cannot find name 'boolean'. @@ -1474,7 +1474,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(356,53): error // TODO: new with length TokenID.LimFixed export var staticTokens = new Token[]; - ~~ + ~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. export function initializeStaticTokens() { for (var i = 0; i <= TokenID.LimFixed; i++) { diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index 68fe64a63f5..c76206b821f 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -1,7 +1,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(193,40): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1009,45): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1024,47): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(193,33): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(867,29): error TS1015: Parameter cannot have question mark and initializer. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1009,31): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1024,33): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(13,22): error TS2304: Cannot find name 'Type'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(14,24): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(17,38): error TS2304: Cannot find name 'CompilerDiagnostics'. @@ -514,7 +515,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,30): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error TS2304: Cannot find name 'TokenID'. -==== tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts (514 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts (515 errors) ==== // Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. // See LICENSE.txt in the project root for complete license information. @@ -792,7 +793,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error ~~~~~~~~~~~ !!! error TS2304: Cannot find name 'SymbolScope'. public members: AST[] = new AST[]; - ~~ + ~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. constructor () { @@ -1814,6 +1815,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } public getAliasName(aliasAST?: AST = this.alias) : string { + ~~~~~~~~ +!!! error TS1015: Parameter cannot have question mark and initializer. if (aliasAST.nodeType == NodeType.Name) { ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. @@ -2026,7 +2029,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'Symbol'. if (this.envids == null) { this.envids = new Identifier[]; - ~~ + ~~~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. } this.envids[this.envids.length] = id; @@ -2045,7 +2048,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'Symbol'. if (this.jumpRefs == null) { this.jumpRefs = new Identifier[]; - ~~ + ~~~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. } var id = new Identifier(sym.name); diff --git a/tests/baselines/reference/parserRealSource4.errors.txt b/tests/baselines/reference/parserRealSource4.errors.txt index e0ae0d2221e..5974d62df47 100644 --- a/tests/baselines/reference/parserRealSource4.errors.txt +++ b/tests/baselines/reference/parserRealSource4.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts(195,37): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts(195,24): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ==== tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts (2 errors) ==== @@ -200,7 +200,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts(195,37): error T export class HashTable { public itemCount: number = 0; public table = new HashEntry[]; - ~~ + ~~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. constructor (public size: number, public hashFn: (key) =>number, diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index 7fddac2c467..773dd499425 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,45): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,33): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(12,38): error TS2304: Cannot find name 'ASTList'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(12,62): error TS2304: Cannot find name 'TypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,37): error TS2304: Cannot find name 'TypeLink'. @@ -326,7 +326,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var len = bases.members.length; if (baseTypeLinks == null) { baseTypeLinks = new TypeLink[]; - ~~ + ~~~~~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~~~~~ !!! error TS2304: Cannot find name 'TypeLink'. diff --git a/tests/baselines/reference/parserRealSource9.errors.txt b/tests/baselines/reference/parserRealSource9.errors.txt index 1880a72f189..0dc0de6c12c 100644 --- a/tests/baselines/reference/parserRealSource9.errors.txt +++ b/tests/baselines/reference/parserRealSource9.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(12,39): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(12,31): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(8,38): error TS2304: Cannot find name 'TypeChecker'. tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(9,48): error TS2304: Cannot find name 'TypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(9,67): error TS2304: Cannot find name 'SymbolScope'. @@ -56,7 +56,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(200,48): error T !!! error TS2304: Cannot find name 'Type'. if (typeLinks) { extendsList = new Type[]; - ~~ + ~~~~~~~~~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ~~~~ !!! error TS2304: Cannot find name 'Type'. From 77165355112f3491d3068036a49142ceb5277c25 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 18:52:37 -0800 Subject: [PATCH 100/178] Move optional method/property checking to the grammar checker. --- src/compiler/parser.ts | 14 +++++++++++--- .../objectTypesWithOptionalProperties.errors.txt | 5 ++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0bd407fc951..565320d3ebd 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2968,7 +2968,9 @@ module ts { var questionStart = scanner.getTokenPos(); if (parseOptional(SyntaxKind.QuestionToken)) { - errorAtPos(questionStart, scanner.getStartPos() - questionStart, Diagnostics.A_class_member_cannot_be_declared_optional); + // Note: this is not legal as per the grammar. But we allow it in the parser and + // report an error in the grammar checker. + flags |= NodeFlags.QuestionMark; } if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { @@ -4179,7 +4181,8 @@ module ts { function visitMethod(node: MethodDeclaration) { checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters) || - checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false); + checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false) || + (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)); } function checkForBodyInAmbientContext(body: Block | Expression, isConstructor: boolean): boolean { @@ -4391,8 +4394,13 @@ module ts { } function visitProperty(node: PropertyDeclaration) { + (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)) || + checkForInitializerInAmbientContext(node); + } + + function checkForInitializerInAmbientContext(node: PropertyDeclaration) { if (inAmbientContext && node.initializer) { - grammarErrorOnFirstToken(node.initializer, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + return grammarErrorOnFirstToken(node.initializer, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } } diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt index 669fbfb595b..d33a5e35b63 100644 --- a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt @@ -1,8 +1,9 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(12,6): error TS1112: A class member cannot be declared optional. tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(20,6): error TS1112: A class member cannot be declared optional. +tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(24,6): error TS1160: An object member cannot be declared optional. -==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (2 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (3 errors) ==== // Basic uses of optional properties var a: { @@ -31,4 +32,6 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWith var b = { x?: 1 // error + ~ +!!! error TS1160: An object member cannot be declared optional. } \ No newline at end of file From 6b866e719e0c1291b87ac7dcdac4cdf1bc8cdb3f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 19:04:21 -0800 Subject: [PATCH 101/178] Move indexer modifier checks to the grammar checker. --- src/compiler/parser.ts | 26 ++++++++++++------- .../parserIndexMemberDeclaration10.errors.txt | 5 +--- .../reference/staticIndexers.errors.txt | 5 +++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 565320d3ebd..724f4ea5810 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1541,8 +1541,12 @@ module ts { return finishNode(node); } - function parseIndexSignatureMember(): SignatureDeclaration { - var node = createNode(SyntaxKind.IndexSignature); + function parseIndexSignatureMember(flags: NodeFlags, pos?: number): SignatureDeclaration { + var node = createNode(SyntaxKind.IndexSignature, pos); + if (flags) { + node.flags = flags; + } + node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); node.type = parseTypeAnnotation(); parseSemicolon(); @@ -1588,7 +1592,7 @@ module ts { case SyntaxKind.LessThanToken: return parseSignatureMember(SyntaxKind.CallSignature, SyntaxKind.ColonToken); case SyntaxKind.OpenBracketToken: - return parseIndexSignatureMember(); + return parseIndexSignatureMember(/*flags:*/ 0); case SyntaxKind.NewKeyword: if (lookAhead(() => nextToken() === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken)) { return parseSignatureMember(SyntaxKind.ConstructSignature, SyntaxKind.ColonToken); @@ -3238,12 +3242,7 @@ module ts { return parsePropertyMemberDeclaration(pos, flags); } if (token === SyntaxKind.OpenBracketToken) { - if (flags) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, Diagnostics.Modifiers_not_permitted_on_index_signature_members); - } - return parseIndexSignatureMember(); + return parseIndexSignatureMember(flags, pos); } // 'isClassMemberStart' should have hinted not to attempt parsing. @@ -4137,7 +4136,14 @@ module ts { } function visitIndexSignature(node: SignatureDeclaration): void { - checkIndexSignatureParameters(node); + checkIndexSignatureParameters(node) || + checkForIndexSignatureModifiers(node); + } + + function checkForIndexSignatureModifiers(node: SignatureDeclaration): boolean { + if (node.flags & NodeFlags.Modifier) { + return grammarErrorOnFirstToken(node, Diagnostics.Modifiers_not_permitted_on_index_signature_members); + } } function checkIndexSignatureParameters(node: SignatureDeclaration): boolean { diff --git a/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt b/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt index e85a4817d85..d448aaa3f29 100644 --- a/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt +++ b/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt @@ -1,12 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,4): error TS1145: Modifiers not permitted on index signature members. tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,11): error TS1030: 'static' modifier already seen. -==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts (1 errors) ==== class C { static static [x: string]: string; - ~~~~~~~~~~~~~ -!!! error TS1145: Modifiers not permitted on index signature members. ~~~~~~ !!! error TS1030: 'static' modifier already seen. } \ No newline at end of file diff --git a/tests/baselines/reference/staticIndexers.errors.txt b/tests/baselines/reference/staticIndexers.errors.txt index 708c505841a..29c46d0ce8c 100644 --- a/tests/baselines/reference/staticIndexers.errors.txt +++ b/tests/baselines/reference/staticIndexers.errors.txt @@ -1,9 +1,10 @@ tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts(4,5): error TS1145: Modifiers not permitted on index signature members. tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts(8,5): error TS1145: Modifiers not permitted on index signature members. tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts(12,5): error TS1145: Modifiers not permitted on index signature members. +tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts(12,25): error TS2302: Static members cannot reference class type parameters. -==== tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts (3 errors) ==== +==== tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts (4 errors) ==== // static indexers not allowed class C { @@ -22,4 +23,6 @@ tests/cases/conformance/classes/indexMemberDeclarations/staticIndexers.ts(12,5): static [x: string]: T; ~~~~~~ !!! error TS1145: Modifiers not permitted on index signature members. + ~ +!!! error TS2302: Static members cannot reference class type parameters. } \ No newline at end of file From 20f418833a35c09328935f6c6b5c2316c916b23e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 19:15:01 -0800 Subject: [PATCH 102/178] Remove forEach call in the grammar checker. --- src/compiler/parser.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 724f4ea5810..4bc565205a4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4240,12 +4240,15 @@ module ts { var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; var inStrictMode = (node.flags & NodeFlags.ParsedInStrictMode) !== 0; - forEach(node.properties, (p: Declaration) => { + + for (var i = 0, n = node.properties.length; i < n; i++) { + var prop = node.properties[i]; // TODO(jfreeman): continue if we have a computed property - if (p.kind === SyntaxKind.OmittedExpression) { - return; + if (prop.kind === SyntaxKind.OmittedExpression) { + continue; } + var p = prop; var name = p.name; // ECMA-262 11.1.5 Object Initialiser @@ -4295,7 +4298,7 @@ module ts { grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); } } - }); + } } function visitNumericLiteral(node: LiteralExpression): void { From 4fb489e64bf34b3626c48e8bd16be2e2a9ca7400 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Wed, 19 Nov 2014 19:22:39 -0800 Subject: [PATCH 103/178] move checking modifiers out of parser --- src/compiler/parser.ts | 401 ++++++++++-------- src/compiler/types.ts | 5 + .../accessibilityModifiers.errors.txt | 5 +- .../reference/exportAlreadySeen.errors.txt | 14 +- tests/baselines/reference/giant.errors.txt | 14 +- .../importDeclWithDeclareModifier.errors.txt | 5 +- ...DeclareModifierInAmbientContext.errors.txt | 8 +- .../parserConstructorDeclaration7.errors.txt | 5 +- .../parserIndexMemberDeclaration10.errors.txt | 5 +- .../parserIndexMemberDeclaration9.errors.txt | 4 +- .../parserModuleDeclaration4.d.errors.txt | 5 +- .../privacyGloImportParseErrors.errors.txt | 11 +- .../privacyImportParseErrors.errors.txt | 23 +- ...dModuleDeclarationsInsideModule.errors.txt | 5 +- ...dModuleDeclarationsInsideModule.errors.txt | 5 +- ...arationsInsideNonExportedModule.errors.txt | 5 +- ...arationsInsideNonExportedModule.errors.txt | 5 +- ...leImportStatementInParentModule.errors.txt | 5 +- ...leImportStatementInParentModule.errors.txt | 5 +- 19 files changed, 279 insertions(+), 256 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index fcea7adcfff..5b0e48593a7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -821,6 +821,18 @@ module ts { _syntacticDiagnostics: Diagnostic[]; } + function modifierToFlag(token: SyntaxKind): NodeFlags { + switch (token) { + case SyntaxKind.StaticKeyword: return NodeFlags.Static; + case SyntaxKind.PublicKeyword: return NodeFlags.Public; + case SyntaxKind.ProtectedKeyword: return NodeFlags.Protected; + case SyntaxKind.PrivateKeyword: return NodeFlags.Private; + case SyntaxKind.ExportKeyword: return NodeFlags.Export; + case SyntaxKind.DeclareKeyword: return NodeFlags.Ambient; + } + return 0; + } + export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile { var file: SourceFileInternal; var scanner: Scanner; @@ -1488,7 +1500,11 @@ module ts { function parseParameter(flags: NodeFlags = 0): ParameterDeclaration { var node = createNode(SyntaxKind.Parameter); - node.flags |= parseAndCheckModifiers(ModifierContext.Parameters); + var modifiers = parseModifiers(ModifierContext.Parameters); + if (modifiers) { + node.flags |= modifiers.flags; + node.modifiers = modifiers; + } if (parseOptional(SyntaxKind.DotDotDotToken)) { node.flags |= NodeFlags.Rest; } @@ -2472,7 +2488,7 @@ module ts { var initialToken = token; if (parseContextualModifier(SyntaxKind.GetKeyword) || parseContextualModifier(SyntaxKind.SetKeyword)) { var kind = initialToken === SyntaxKind.GetKeyword ? SyntaxKind.GetAccessor : SyntaxKind.SetAccessor; - return parseMemberAccessorDeclaration(kind, initialPos, 0); + return parseMemberAccessorDeclaration(kind, initialPos, /*modifiers*/ undefined); } return parsePropertyAssignment(); } @@ -2982,19 +2998,23 @@ module ts { return finishNode(node); } - function parseConstructorDeclaration(pos: number, flags: NodeFlags): ConstructorDeclaration { + function parseConstructorDeclaration(pos: number, modifiers: ModifiersArray): ConstructorDeclaration { var node = createNode(SyntaxKind.Constructor, pos); - node.flags = flags; + if (modifiers) { + node.modifiers = modifiers; + node.flags = modifiers.flags; + } parseExpected(SyntaxKind.ConstructorKeyword); var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; node.body = parseFunctionBlockOrSemicolon(); + return finishNode(node); } - function parsePropertyMemberDeclaration(pos: number, flags: NodeFlags): Declaration { + function parsePropertyMemberDeclaration(pos: number, modifiers: ModifiersArray): Declaration { var errorCountBeforePropertyDeclaration = file.parseDiagnostics.length; var name = parsePropertyName(); @@ -3005,18 +3025,25 @@ module ts { if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { var method = createNode(SyntaxKind.Method, pos); - method.flags = flags; + if (modifiers) { + method.modifiers = modifiers; + method.flags = modifiers.flags; + } method.name = name; var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); method.typeParameters = sig.typeParameters; method.parameters = sig.parameters; method.type = sig.type; method.body = parseFunctionBlockOrSemicolon(); + return finishNode(method); } else { var property = createNode(SyntaxKind.Property, pos); - property.flags = flags; + if (modifiers) { + property.modifiers = modifiers; + property.flags = modifiers.flags; + } property.name = name; property.type = parseTypeAnnotation(); @@ -3032,9 +3059,12 @@ module ts { } } - function parseMemberAccessorDeclaration(kind: SyntaxKind, pos: number, flags: NodeFlags): MethodDeclaration { + function parseMemberAccessorDeclaration(kind: SyntaxKind, pos: number, modifiers: ModifiersArray): MethodDeclaration { var node = createNode(kind, pos); - node.flags = flags; + if (modifiers) { + node.modifiers = modifiers; + node.flags = modifiers.flags; + } node.name = parsePropertyName(); var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); node.typeParameters = sig.typeParameters; @@ -3103,175 +3133,44 @@ module ts { return false; } - function parseAndCheckModifiers(context: ModifierContext): number { + function parseModifiers(context: ModifierContext): ModifiersArray { var flags = 0; - var lastStaticModifierStart: number; - var lastStaticModifierLength: number; - var lastDeclareModifierStart: number; - var lastDeclareModifierLength: number; - var lastPrivateModifierStart: number; - var lastPrivateModifierLength: number; - var lastProtectedModifierStart: number; - var lastProtectedModifierLength: number; - + var modifiers: ModifiersArray; while (true) { var modifierStart = scanner.getTokenPos(); var modifierToken = token; - // Try to parse the modifier if (!parseAnyContextualModifier()) break; - var modifierLength = scanner.getStartPos() - modifierStart; - - switch (modifierToken) { - case SyntaxKind.PublicKeyword: - if (flags & NodeFlags.AccessibilityModifier) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & NodeFlags.Static) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); - } - else if (context === ModifierContext.ModuleElements || context === ModifierContext.SourceElements) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); - } - flags |= NodeFlags.Public; - break; - - case SyntaxKind.PrivateKeyword: - if (flags & NodeFlags.AccessibilityModifier) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & NodeFlags.Static) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); - } - else if (context === ModifierContext.ModuleElements || context === ModifierContext.SourceElements) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); - } - lastPrivateModifierStart = modifierStart; - lastPrivateModifierLength = modifierLength; - flags |= NodeFlags.Private; - break; - - case SyntaxKind.ProtectedKeyword: - if (flags & NodeFlags.Public || flags & NodeFlags.Private || flags & NodeFlags.Protected) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & NodeFlags.Static) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_must_precede_1_modifier, "protected", "static"); - } - else if (context === ModifierContext.ModuleElements || context === ModifierContext.SourceElements) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "protected"); - } - lastProtectedModifierStart = modifierStart; - lastProtectedModifierLength = modifierLength; - flags |= NodeFlags.Protected; - break; - - case SyntaxKind.StaticKeyword: - if (flags & NodeFlags.Static) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_already_seen, "static"); - } - else if (context === ModifierContext.ModuleElements || context === ModifierContext.SourceElements) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); - } - else if (context === ModifierContext.Parameters) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); - } - lastStaticModifierStart = modifierStart; - lastStaticModifierLength = modifierLength; - flags |= NodeFlags.Static; - break; - - case SyntaxKind.ExportKeyword: - if (flags & NodeFlags.Export) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_already_seen, "export"); - } - else if (flags & NodeFlags.Ambient) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); - } - else if (context === ModifierContext.ClassMembers) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); - } - else if (context === ModifierContext.Parameters) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); - } - flags |= NodeFlags.Export; - break; - - case SyntaxKind.DeclareKeyword: - if (flags & NodeFlags.Ambient) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_already_seen, "declare"); - } - else if (context === ModifierContext.ClassMembers) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); - } - else if (context === ModifierContext.Parameters) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); - } - else if (inAmbientContext && context === ModifierContext.ModuleElements) { - grammarErrorAtPos(modifierStart, modifierLength, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); - } - lastDeclareModifierStart = modifierStart; - lastDeclareModifierLength = modifierLength; - flags |= NodeFlags.Ambient; - break; + if (!modifiers) { + modifiers = []; } + flags |= modifierToFlag(modifierToken); + modifiers.push(finishNode(createNode(modifierToken, modifierStart))); } - - if (token === SyntaxKind.ConstructorKeyword && flags & NodeFlags.Static) { - grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + if (modifiers) { + modifiers.flags = flags; } - else if (token === SyntaxKind.ConstructorKeyword && flags & NodeFlags.Private) { - grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); - } - else if (token === SyntaxKind.ConstructorKeyword && flags & NodeFlags.Protected) { - grammarErrorAtPos(lastProtectedModifierStart, lastProtectedModifierLength, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); - } - else if (token === SyntaxKind.ImportKeyword) { - if (flags & NodeFlags.Ambient) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); - } - } - else if (token === SyntaxKind.InterfaceKeyword) { - if (flags & NodeFlags.Ambient) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); - } - } - else if (token !== SyntaxKind.ExportKeyword && !(flags & NodeFlags.Ambient) && inAmbientContext && context === ModifierContext.SourceElements) { - // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: - // categories: - // - // DeclarationElement: - // ExportAssignment - // export_opt InterfaceDeclaration - // export_opt ImportDeclaration - // export_opt ExternalImportDeclaration - // export_opt AmbientDeclaration - // - var declarationStart = scanner.getTokenPos(); - var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; - grammarErrorAtPos(declarationStart, declarationFirstTokenLength, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); - } - return flags; + return modifiers; } function parseClassMemberDeclaration(): Declaration { var pos = getNodePos(); - var flags = parseAndCheckModifiers(ModifierContext.ClassMembers); + var modifiers = parseModifiers(ModifierContext.ClassMembers); if (parseContextualModifier(SyntaxKind.GetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, flags); + return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, modifiers); } if (parseContextualModifier(SyntaxKind.SetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, pos, flags); + return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, pos, modifiers); } if (token === SyntaxKind.ConstructorKeyword) { - return parseConstructorDeclaration(pos, flags); + return parseConstructorDeclaration(pos, modifiers); } if (token >= SyntaxKind.Identifier || token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral) { - return parsePropertyMemberDeclaration(pos, flags); + return parsePropertyMemberDeclaration(pos, modifiers); } if (token === SyntaxKind.OpenBracketToken) { - if (flags) { + if (modifiers) { var start = getTokenPos(pos); var length = getNodePos() - start; errorAtPos(start, length, Diagnostics.Modifiers_not_permitted_on_index_signature_members); @@ -3472,14 +3371,13 @@ module ts { function parseDeclaration(modifierContext: ModifierContext): Statement { var pos = getNodePos(); var errorCountBeforeModifiers = file.parseDiagnostics.length; - var flags = parseAndCheckModifiers(modifierContext); - + var modifiers = parseModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { var modifiersEnd = scanner.getStartPos(); nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.parseDiagnostics.length) { + if (modifiers && errorCountBeforeModifiers === file.parseDiagnostics.length) { var modifiersStart = skipTrivia(sourceText, pos); grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, Diagnostics.An_export_assignment_cannot_have_modifiers); } @@ -3488,10 +3386,10 @@ module ts { } var saveInAmbientContext = inAmbientContext; - if (flags & NodeFlags.Ambient) { + if (modifiers && modifiers.flags & NodeFlags.Ambient) { inAmbientContext = true; } - + var flags = modifiers ? modifiers.flags : 0; var result: Declaration; switch (token) { case SyntaxKind.VarKeyword: @@ -3532,6 +3430,10 @@ module ts { error(Diagnostics.Declaration_expected); } + if (modifiers) { + result.modifiers = modifiers; + } + inAmbientContext = saveInAmbientContext; return result; } @@ -3711,14 +3613,17 @@ module ts { node.parent = parent; parent = node; - var savedInAmbientContext = inAmbientContext - if (node.flags & NodeFlags.Ambient) { - inAmbientContext = true; + if (!checkModifiers(node)) { + var savedInAmbientContext = inAmbientContext + if (node.flags & NodeFlags.Ambient) { + inAmbientContext = true; + } + + checkNode(node); + + inAmbientContext = savedInAmbientContext; } - checkNode(node); - - inAmbientContext = savedInAmbientContext; parent = savedParent; } @@ -3743,7 +3648,7 @@ module ts { dispatch(node); } - function dispatch(node: Node) { + function dispatch(node: Node): void { switch (node.kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); @@ -4026,8 +3931,13 @@ module ts { } function visitEnumDeclaration(enumDecl: EnumDeclaration) { + checkEnumInitializer(enumDecl); + } + + function checkEnumInitializer(enumDecl: EnumDeclaration): boolean { var enumIsConst = (enumDecl.flags & NodeFlags.Const) !== 0; + var hasError = false; // skip checks below for const enums - they allow arbitrary initializers as long as they can be evaluated to constant expressions. // since all values are known in compile time - it is not necessary to check that constant enum section precedes computed enum members. if (!enumIsConst) { @@ -4036,17 +3946,18 @@ module ts { var node = enumDecl.members[i]; if (inAmbientContext) { if (node.initializer && !isIntegerLiteral(node.initializer)) { - grammarErrorOnNode(node.name, Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); + hasError = grammarErrorOnNode(node.name, Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError; } } else if (node.initializer) { inConstantEnumMemberSection = isIntegerLiteral(node.initializer); } else if (!inConstantEnumMemberSection) { - grammarErrorOnNode(node.name, Diagnostics.Enum_member_must_have_initializer); + hasError = grammarErrorOnNode(node.name, Diagnostics.Enum_member_must_have_initializer) || hasError; } } } + return hasError; } function isIntegerLiteral(expression: Expression): boolean { @@ -4177,14 +4088,18 @@ module ts { } function visitModuleDeclaration(node: ModuleDeclaration): void { + checkInternalModule(node); + } + + function checkInternalModule(node: ModuleDeclaration): boolean { if (node.name.kind === SyntaxKind.Identifier && node.body.kind === SyntaxKind.ModuleBlock) { - forEach((node.body).statements, s => { + return forEach((node.body).statements, s => { if (s.kind === SyntaxKind.ExportAssignment) { // Export assignments are not allowed in an internal module - grammarErrorOnNode(s, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + return grammarErrorOnNode(s, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); } else if (s.kind === SyntaxKind.ImportDeclaration && (s).externalModuleName) { - grammarErrorOnNode(s, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + return grammarErrorOnNode(s, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); } }); } @@ -4261,6 +4176,148 @@ module ts { }); } + function checkTopLevelDeclareModifierInAmbientContext(node: Node): boolean { + // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: + // categories: + // + // DeclarationElement: + // ExportAssignment + // export_opt InterfaceDeclaration + // export_opt ImportDeclaration + // export_opt ExternalImportDeclaration + // export_opt AmbientDeclaration + // + + if (!inAmbientContext || + !(isDeclaration(node) || node.kind === SyntaxKind.VariableStatement) || + !node.parent || + node.parent.kind !== SyntaxKind.SourceFile) { + return false; + } + + if (node.kind === SyntaxKind.InterfaceDeclaration || + node.kind === SyntaxKind.ImportDeclaration || + node.kind === SyntaxKind.ExportAssignment || + (node.flags & NodeFlags.Ambient) || + (node.flags & NodeFlags.Export)) { + + return false; + } + + return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + + + function checkModifiers(node: Node): boolean { + if (!node.modifiers) { + return checkTopLevelDeclareModifierInAmbientContext(node); + } + var lastStatic: Node, lastPrivate: Node, lastProtected: Node, lastDeclare: Node; + var flags = 0; + var hasErrors = forEach(node.modifiers, m => { + switch (m.kind) { + case SyntaxKind.PublicKeyword: + case SyntaxKind.ProtectedKeyword: + case SyntaxKind.PrivateKeyword: + var text: string; + if (m.kind === SyntaxKind.PublicKeyword) { + text = "public"; + } + else if (m.kind === SyntaxKind.ProtectedKeyword) { + text = "protected"; + lastProtected = m; + } + else { + text = "private"; + lastPrivate = m; + } + + if (flags & NodeFlags.AccessibilityModifier) { + return grammarErrorOnNode(m, Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & NodeFlags.Static) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); + } + else if (node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); + } + flags |= modifierToFlag(m.kind); + break; + + case SyntaxKind.StaticKeyword: + if (flags & NodeFlags.Static) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "static"); + } + else if (node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + } + else if (node.kind === SyntaxKind.Parameter) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } + flags |= NodeFlags.Static; + lastStatic = m; + break; + + case SyntaxKind.ExportKeyword: + if (flags & NodeFlags.Export) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "export"); + } + else if (flags & NodeFlags.Ambient) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } + else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (node.kind === SyntaxKind.Parameter) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= NodeFlags.Export; + break; + + case SyntaxKind.DeclareKeyword: + if (flags & NodeFlags.Ambient) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "declare"); + } + else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (node.kind === SyntaxKind.Parameter) { + return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (inAmbientContext && node.parent.kind === SyntaxKind.ModuleBlock) { + return grammarErrorOnNode(m, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + flags |= NodeFlags.Ambient; + lastDeclare = m; + break; + } + }); + + if (hasErrors) { + return true; + } + + if (node.kind === SyntaxKind.Constructor) { + if (flags & NodeFlags.Static) { + return grammarErrorOnNode(lastStatic, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + } + else if (flags & NodeFlags.Protected) { + return grammarErrorOnNode(lastProtected, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); + } + else if (flags & NodeFlags.Private) { + return grammarErrorOnNode(lastPrivate, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); + } + } + else if (node.kind === SyntaxKind.ImportDeclaration && flags & NodeFlags.Ambient) { + return grammarErrorOnNode(lastDeclare, Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } + else if (node.kind === SyntaxKind.InterfaceDeclaration && flags & NodeFlags.Ambient) { + return grammarErrorOnNode(lastDeclare, Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); + } + + return checkTopLevelDeclareModifierInAmbientContext(node); + } + function visitParameter(node: ParameterDeclaration): void { checkParameterName(node); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 7865a4f2463..6e7beb531fc 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -288,12 +288,17 @@ module ts { locals?: SymbolTable; // Locals associated with node (initialized by binding) nextContainer?: Node; // Next container in declaration order (initialized by binding) localSymbol?: Symbol; // Local symbol declared by node (initialized by binding only for exported nodes) + modifiers?: ModifiersArray; // Array of modifiers } export interface NodeArray extends Array, TextRange { hasTrailingComma?: boolean; } + export interface ModifiersArray extends Array { + flags: number; + } + export interface Identifier extends Node { text: string; // Text of identifier (with escapes converted to characters) } diff --git a/tests/baselines/reference/accessibilityModifiers.errors.txt b/tests/baselines/reference/accessibilityModifiers.errors.txt index 137da7f982c..1bf92139761 100644 --- a/tests/baselines/reference/accessibilityModifiers.errors.txt +++ b/tests/baselines/reference/accessibilityModifiers.errors.txt @@ -11,13 +11,12 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifier tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(34,12): error TS1029: 'public' modifier must precede 'static' modifier. tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(35,12): error TS1029: 'public' modifier must precede 'static' modifier. tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(40,13): error TS1028: Accessibility modifier already seen. -tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(40,20): error TS1028: Accessibility modifier already seen. tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(41,12): error TS1028: Accessibility modifier already seen. tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(42,13): error TS1028: Accessibility modifier already seen. tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts(43,12): error TS1028: Accessibility modifier already seen. -==== tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts (17 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifiers.ts (16 errors) ==== // No errors class C { @@ -83,8 +82,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessibilityModifier class E { private public protected property; ~~~~~~ -!!! error TS1028: Accessibility modifier already seen. - ~~~~~~~~~ !!! error TS1028: Accessibility modifier already seen. public protected method() { } ~~~~~~~~~ diff --git a/tests/baselines/reference/exportAlreadySeen.errors.txt b/tests/baselines/reference/exportAlreadySeen.errors.txt index eb9f0ce1a95..707b34c8d25 100644 --- a/tests/baselines/reference/exportAlreadySeen.errors.txt +++ b/tests/baselines/reference/exportAlreadySeen.errors.txt @@ -1,16 +1,12 @@ tests/cases/compiler/exportAlreadySeen.ts(2,12): error TS1030: 'export' modifier already seen. tests/cases/compiler/exportAlreadySeen.ts(3,12): error TS1030: 'export' modifier already seen. tests/cases/compiler/exportAlreadySeen.ts(5,12): error TS1030: 'export' modifier already seen. -tests/cases/compiler/exportAlreadySeen.ts(6,16): error TS1030: 'export' modifier already seen. -tests/cases/compiler/exportAlreadySeen.ts(7,16): error TS1030: 'export' modifier already seen. tests/cases/compiler/exportAlreadySeen.ts(12,12): error TS1030: 'export' modifier already seen. tests/cases/compiler/exportAlreadySeen.ts(13,12): error TS1030: 'export' modifier already seen. tests/cases/compiler/exportAlreadySeen.ts(15,12): error TS1030: 'export' modifier already seen. -tests/cases/compiler/exportAlreadySeen.ts(16,16): error TS1030: 'export' modifier already seen. -tests/cases/compiler/exportAlreadySeen.ts(17,16): error TS1030: 'export' modifier already seen. -==== tests/cases/compiler/exportAlreadySeen.ts (10 errors) ==== +==== tests/cases/compiler/exportAlreadySeen.ts (6 errors) ==== module M { export export var x = 1; ~~~~~~ @@ -23,11 +19,7 @@ tests/cases/compiler/exportAlreadySeen.ts(17,16): error TS1030: 'export' modifie ~~~~~~ !!! error TS1030: 'export' modifier already seen. export export class C { } - ~~~~~~ -!!! error TS1030: 'export' modifier already seen. export export interface I { } - ~~~~~~ -!!! error TS1030: 'export' modifier already seen. } } @@ -43,10 +35,6 @@ tests/cases/compiler/exportAlreadySeen.ts(17,16): error TS1030: 'export' modifie ~~~~~~ !!! error TS1030: 'export' modifier already seen. export export class C { } - ~~~~~~ -!!! error TS1030: 'export' modifier already seen. export export interface I { } - ~~~~~~ -!!! error TS1030: 'export' modifier already seen. } } \ No newline at end of file diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index d70ac7013dd..d9d96f5abf7 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -34,10 +34,6 @@ tests/cases/compiler/giant.ts(430,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(432,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(436,9): error TS1005: '{' expected. tests/cases/compiler/giant.ts(438,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(615,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/giant.ts(616,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/giant.ts(617,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/giant.ts(618,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. 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. @@ -174,7 +170,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (174 errors) ==== +==== tests/cases/compiler/giant.ts (170 errors) ==== /* Prefixes @@ -1128,17 +1124,9 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export interface eI { } export module eM { } export declare var eaV - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. export declare function eaF() { }; - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. export declare class eaC { } - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. export declare module eaM { } - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. } export var eV; export function eF() { }; diff --git a/tests/baselines/reference/importDeclWithDeclareModifier.errors.txt b/tests/baselines/reference/importDeclWithDeclareModifier.errors.txt index 8aeb64291a6..35c91e38dc5 100644 --- a/tests/baselines/reference/importDeclWithDeclareModifier.errors.txt +++ b/tests/baselines/reference/importDeclWithDeclareModifier.errors.txt @@ -1,17 +1,14 @@ -tests/cases/compiler/importDeclWithDeclareModifier.ts(5,1): error TS1079: A 'declare' modifier cannot be used with an import declaration. tests/cases/compiler/importDeclWithDeclareModifier.ts(5,1): error TS1148: Cannot compile external modules unless the '--module' flag is provided. tests/cases/compiler/importDeclWithDeclareModifier.ts(5,9): error TS1029: 'export' modifier must precede 'declare' modifier. tests/cases/compiler/importDeclWithDeclareModifier.ts(5,1): error TS2305: Module 'x' has no exported member 'c'. -==== tests/cases/compiler/importDeclWithDeclareModifier.ts (4 errors) ==== +==== tests/cases/compiler/importDeclWithDeclareModifier.ts (3 errors) ==== module x { interface c { } } declare export import a = x.c; - ~~~~~~~ -!!! error TS1079: A 'declare' modifier cannot be used with an import declaration. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. ~~~~~~ diff --git a/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.errors.txt b/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.errors.txt index 9773b293037..47d9eb1eec3 100644 --- a/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.errors.txt +++ b/tests/baselines/reference/importDeclWithDeclareModifierInAmbientContext.errors.txt @@ -1,9 +1,7 @@ tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts(6,5): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts(6,5): error TS1079: A 'declare' modifier cannot be used with an import declaration. -tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts(6,13): error TS1029: 'export' modifier must precede 'declare' modifier. -==== tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts (3 errors) ==== +==== tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts (1 errors) ==== declare module "m" { module x { interface c { @@ -12,10 +10,6 @@ tests/cases/compiler/importDeclWithDeclareModifierInAmbientContext.ts(6,13): err declare export import a = x.c; ~~~~~~~ !!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. - ~~~~~~~ -!!! error TS1079: A 'declare' modifier cannot be used with an import declaration. - ~~~~~~ -!!! error TS1029: 'export' modifier must precede 'declare' modifier. var b: a; } \ No newline at end of file diff --git a/tests/baselines/reference/parserConstructorDeclaration7.errors.txt b/tests/baselines/reference/parserConstructorDeclaration7.errors.txt index 49645ac1239..7b3f033e3cd 100644 --- a/tests/baselines/reference/parserConstructorDeclaration7.errors.txt +++ b/tests/baselines/reference/parserConstructorDeclaration7.errors.txt @@ -1,12 +1,9 @@ tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration7.ts(2,10): error TS1028: Accessibility modifier already seen. -tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration7.ts(2,10): error TS1089: 'private' modifier cannot appear on a constructor declaration. -==== tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration7.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ConstructorDeclarations/parserConstructorDeclaration7.ts (1 errors) ==== class C { public private constructor() { } ~~~~~~~ !!! error TS1028: Accessibility modifier already seen. - ~~~~~~~ -!!! error TS1089: 'private' modifier cannot appear on a constructor declaration. } \ No newline at end of file diff --git a/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt b/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt index e85a4817d85..dc4da35ebce 100644 --- a/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt +++ b/tests/baselines/reference/parserIndexMemberDeclaration10.errors.txt @@ -1,12 +1,9 @@ tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,4): error TS1145: Modifiers not permitted on index signature members. -tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts(2,11): error TS1030: 'static' modifier already seen. -==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration10.ts (1 errors) ==== class C { static static [x: string]: string; ~~~~~~~~~~~~~ !!! error TS1145: Modifiers not permitted on index signature members. - ~~~~~~ -!!! error TS1030: 'static' modifier already seen. } \ No newline at end of file diff --git a/tests/baselines/reference/parserIndexMemberDeclaration9.errors.txt b/tests/baselines/reference/parserIndexMemberDeclaration9.errors.txt index 493a7894499..00ae01b12dc 100644 --- a/tests/baselines/reference/parserIndexMemberDeclaration9.errors.txt +++ b/tests/baselines/reference/parserIndexMemberDeclaration9.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration9.ts(2,4): error TS1031: 'export' modifier cannot appear on a class element. +tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration9.ts(2,4): error TS1145: Modifiers not permitted on index signature members. ==== tests/cases/conformance/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration9.ts (1 errors) ==== class C { export [x: string]: string; ~~~~~~ -!!! error TS1031: 'export' modifier cannot appear on a class element. +!!! error TS1145: Modifiers not permitted on index signature members. } \ No newline at end of file diff --git a/tests/baselines/reference/parserModuleDeclaration4.d.errors.txt b/tests/baselines/reference/parserModuleDeclaration4.d.errors.txt index 2e75c6cbc50..3f7cc9c53d3 100644 --- a/tests/baselines/reference/parserModuleDeclaration4.d.errors.txt +++ b/tests/baselines/reference/parserModuleDeclaration4.d.errors.txt @@ -1,13 +1,10 @@ tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.d.ts(1,1): error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. -tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.d.ts(2,3): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -==== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.d.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ModuleDeclarations/parserModuleDeclaration4.d.ts (1 errors) ==== module M { ~~~~~~ !!! error TS1046: A 'declare' modifier is required for a top level declaration in a .d.ts file. declare module M1 { - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. } } \ No newline at end of file diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index 0ac0ed35105..4b7cbfa744f 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -1,4 +1,7 @@ +tests/cases/compiler/privacyGloImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(125,13): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(133,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/privacyGloImportParseErrors.ts(149,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -8,7 +11,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(138,16): error TS2435: Ambie tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambient external modules cannot be nested in other modules. -==== tests/cases/compiler/privacyGloImportParseErrors.ts (8 errors) ==== +==== tests/cases/compiler/privacyGloImportParseErrors.ts (11 errors) ==== module m1 { export module m1_M1_public { export class c1 { @@ -72,6 +75,8 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -142,6 +147,8 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m5 { import m5_errorImport = require("glo_M2_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -174,6 +181,8 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m4 { var a = 10; import m2 = require("use_glo_M1_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/baselines/reference/privacyImportParseErrors.errors.txt b/tests/baselines/reference/privacyImportParseErrors.errors.txt index 6e901ab2b6d..81f0d3fd27a 100644 --- a/tests/baselines/reference/privacyImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyImportParseErrors.errors.txt @@ -1,6 +1,11 @@ +tests/cases/compiler/privacyImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(143,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(277,13): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(306,13): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(314,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/privacyImportParseErrors.ts(326,9): error TS1029: 'export' modifier must precede 'declare' modifier. -tests/cases/compiler/privacyImportParseErrors.ts(328,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/privacyImportParseErrors.ts(344,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(353,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -33,7 +38,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(333,16): error TS2435: Ambient tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient external modules cannot be nested in other modules. -==== tests/cases/compiler/privacyImportParseErrors.ts (33 errors) ==== +==== tests/cases/compiler/privacyImportParseErrors.ts (38 errors) ==== export module m1 { export module m1_M1_public { export class c1 { @@ -97,6 +102,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -189,6 +196,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m2_M3_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm2_M3_public'. export var m1_im3_private_v1_public = m1_im3_private.c1; @@ -347,6 +356,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m5 { import m5_errorImport = require("glo_M2_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -384,6 +395,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m5 { import m5_errorImport = require("glo_M4_private"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M3_private; } } @@ -420,8 +433,6 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient !!! error TS2435: Ambient external modules cannot be nested in other modules. module m2 { declare module "abc" { - ~~~~~~~ -!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. ~~~~~ !!! error TS2435: Ambient external modules cannot be nested in other modules. } @@ -444,6 +455,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m4 { var a = 10; import m2 = require("use_glo_M1_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } @@ -453,6 +466,8 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m4 { var a = 10; import m2 = require("use_glo_M1_public"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index b92bb48308d..cb53bb47832 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,8 +1,7 @@ testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== testGlo.ts (2 errors) ==== +==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -26,8 +25,6 @@ testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index b92bb48308d..cb53bb47832 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,8 +1,7 @@ testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== testGlo.ts (2 errors) ==== +==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -26,8 +25,6 @@ testGlo.ts(21,5): error TS1147: Import declarations in an internal module cannot } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index bbf4831914b..6be6fe0f92a 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,8 +1,7 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(24,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m1 { } @@ -29,8 +28,6 @@ test.ts(24,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index bbf4831914b..6be6fe0f92a 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,8 +1,7 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(24,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m1 { } @@ -29,8 +28,6 @@ test.ts(24,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c3 = new mNonExported.mne.class1; export function f3() { return new mNonExported.mne.class1(); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index ff9a9f604a3..24ce0e94beb 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,8 +1,7 @@ test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(42,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -47,8 +46,6 @@ test.ts(42,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M3 { export var c3 = new mNonExported.mne.class1; export function f3() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index ff9a9f604a3..24ce0e94beb 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,8 +1,7 @@ test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. -test.ts(42,5): error TS1147: Import declarations in an internal module cannot reference an external module. -==== test.ts (2 errors) ==== +==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -47,8 +46,6 @@ test.ts(42,5): error TS1147: Import declarations in an internal module cannot re } import mNonExported = require("mNonExported"); - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M3 { export var c3 = new mNonExported.mne.class1; export function f3() { From 76e01396c1951fea9a792fa35d5d30b7bd4fb1ce Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 20:55:11 -0800 Subject: [PATCH 104/178] use a normal for loop instead of a forEach --- src/compiler/parser.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e418858b891..5b338017ead 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4263,9 +4263,12 @@ module ts { if (!node.modifiers) { return checkTopLevelDeclareModifierInAmbientContext(node); } + var lastStatic: Node, lastPrivate: Node, lastProtected: Node, lastDeclare: Node; var flags = 0; - var hasErrors = forEach(node.modifiers, m => { + for (var i = 0, n = node.modifiers.length; i < n; i++) { + var m = node.modifiers[i]; + switch (m.kind) { case SyntaxKind.PublicKeyword: case SyntaxKind.ProtectedKeyword: @@ -4342,10 +4345,6 @@ module ts { lastDeclare = m; break; } - }); - - if (hasErrors) { - return true; } if (node.kind === SyntaxKind.Constructor) { From 3be19d6ada794e60a8477bbd3fcddc08e1eadfd6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 21:21:46 -0800 Subject: [PATCH 105/178] Simplify grammar checker. --- src/compiler/parser.ts | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 5b338017ead..a3662b2524c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3717,7 +3717,11 @@ module ts { } function visitArrowFunction(node: FunctionExpression) { - checkTypeParameterList(node.typeParameters) || + checkParsedSignature(node); + } + + function checkParsedSignature(node: ParsedSignature): boolean { + return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); } @@ -3878,8 +3882,7 @@ module ts { } function visitCallSignature(node: ConstructorDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParsedSignature(node); } function visitCatchBlock(node: CatchBlock) { @@ -3906,8 +3909,7 @@ module ts { } function visitConstructor(node: ConstructorDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ true); @@ -3926,13 +3928,11 @@ module ts { } function visitConstructorType(node: SignatureDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParsedSignature(node); } function visitConstructSignature(node: FunctionLikeDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParsedSignature(node); } function visitEnumDeclaration(enumDecl: EnumDeclaration) { @@ -4010,15 +4010,13 @@ module ts { } function visitFunctionDeclaration(node: FunctionLikeDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkFunctionName(node.name) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false); } function visitFunctionExpression(node: FunctionExpression) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkFunctionName(node.name); } @@ -4031,13 +4029,11 @@ module ts { } function visitFunctionType(node: SignatureDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters); + checkParsedSignature(node); } function visitGetAccessor(node: MethodDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkAccessor(node); } @@ -4102,8 +4098,7 @@ module ts { } function visitMethod(node: MethodDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false) || (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)); } @@ -4487,8 +4482,7 @@ module ts { } function visitSetAccessor(node: MethodDeclaration) { - checkTypeParameterList(node.typeParameters) || - checkParameterList(node.parameters) || + checkParsedSignature(node) || checkAccessor(node); } From c011550558dd2c3fd48faf07d3b16cadaa31abdf Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 21:42:52 -0800 Subject: [PATCH 106/178] Simplify grammar checker. --- src/compiler/parser.ts | 109 ++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 40 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a3662b2524c..19486a52379 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3564,6 +3564,10 @@ module ts { // We're automatically in an ambient context if this is a .d.ts file. var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); + if (inAmbientContext && checkTopLevelElementsForRequiredDeclareModifier(file)) { + return; + } + var inFunctionBlock = false; var parent: Node; visitNode(file); @@ -3595,10 +3599,11 @@ module ts { } function checkNode(node: Node) { + var nodeKind = node.kind; // First, check if you have a statement in a place where it is not allowed. We want // to do this before recursing, because we'd prefer to report these errors at the top // level instead of at some nested level. - if (inAmbientContext && checkForStatementInAmbientContext(node)) { + if (inAmbientContext && checkForStatementInAmbientContext(node, nodeKind)) { return; } @@ -3612,11 +3617,11 @@ module ts { } // Now do node specific checks. - dispatch(node); + dispatch(node, nodeKind); } - function dispatch(node: Node): void { - switch (node.kind) { + function dispatch(node: Node, kind: SyntaxKind): void { + switch (kind) { case SyntaxKind.ArrowFunction: return visitArrowFunction(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); @@ -3693,8 +3698,43 @@ module ts { return grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } - function checkForStatementInAmbientContext(node: Node): boolean { - switch (node.kind) { + function checkTopLevelElementsForRequiredDeclareModifier(file: SourceFile): boolean { + for (var i = 0, n = file.statements.length; i < n; i++) { + var decl = file.statements[i]; + if (isDeclaration(decl) || decl.kind === SyntaxKind.VariableStatement) { + if (checkTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + } + + function checkTopLevelElementForRequiredDeclareModifier(node: Node): boolean { + // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: + // categories: + // + // DeclarationElement: + // ExportAssignment + // export_opt InterfaceDeclaration + // export_opt ImportDeclaration + // export_opt ExternalImportDeclaration + // export_opt AmbientDeclaration + // + if (node.kind === SyntaxKind.InterfaceDeclaration || + node.kind === SyntaxKind.ImportDeclaration || + node.kind === SyntaxKind.ExportAssignment || + (node.flags & NodeFlags.Ambient) /* + (node.flags & NodeFlags.Export) */) { + + return false; + } + + return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + + + function checkForStatementInAmbientContext(node: Node, kind: SyntaxKind): boolean { + switch (kind) { case SyntaxKind.Block: case SyntaxKind.EmptyStatement: case SyntaxKind.IfStatement: @@ -4221,42 +4261,33 @@ module ts { grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); } } - } - function checkTopLevelDeclareModifierInAmbientContext(node: Node): boolean { - // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: - // categories: - // - // DeclarationElement: - // ExportAssignment - // export_opt InterfaceDeclaration - // export_opt ImportDeclaration - // export_opt ExternalImportDeclaration - // export_opt AmbientDeclaration - // - - if (!inAmbientContext || - !(isDeclaration(node) || node.kind === SyntaxKind.VariableStatement) || - !node.parent || - node.parent.kind !== SyntaxKind.SourceFile) { - return false; - } - - if (node.kind === SyntaxKind.InterfaceDeclaration || - node.kind === SyntaxKind.ImportDeclaration || - node.kind === SyntaxKind.ExportAssignment || - (node.flags & NodeFlags.Ambient) || - (node.flags & NodeFlags.Export)) { - - return false; - } - - return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); } - function checkModifiers(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.Constructor: + case SyntaxKind.Property: + case SyntaxKind.Method: + case SyntaxKind.IndexSignature: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.ModuleDeclaration: + case SyntaxKind.EnumDeclaration: + case SyntaxKind.ExportAssignment: + case SyntaxKind.VariableStatement: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.TypeAliasDeclaration: + case SyntaxKind.ImportDeclaration: + case SyntaxKind.Parameter: + break; + default: + return false; + } + if (!node.modifiers) { - return checkTopLevelDeclareModifierInAmbientContext(node); + return; } var lastStatic: Node, lastPrivate: Node, lastProtected: Node, lastDeclare: Node; @@ -4359,8 +4390,6 @@ module ts { else if (node.kind === SyntaxKind.InterfaceDeclaration && flags & NodeFlags.Ambient) { return grammarErrorOnNode(lastDeclare, Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); } - - return checkTopLevelDeclareModifierInAmbientContext(node); } function visitParameter(node: ParameterDeclaration): void { From a882b74eadf1844fe61ef518d724c0d2b49bdf28 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 21:49:25 -0800 Subject: [PATCH 107/178] Simplify checker. --- src/compiler/parser.ts | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 19486a52379..d6e5bbf7d10 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3622,16 +3622,19 @@ module ts { function dispatch(node: Node, kind: SyntaxKind): void { switch (kind) { - case SyntaxKind.ArrowFunction: return visitArrowFunction(node); + case SyntaxKind.ArrowFunction: + case SyntaxKind.CallSignature: + case SyntaxKind.ConstructorType: + case SyntaxKind.ConstructSignature: + case SyntaxKind.FunctionType: + checkParsedSignature(node); + break; case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); case SyntaxKind.CallExpression: return visitCallExpression(node); - case SyntaxKind.CallSignature: return visitCallSignature(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); case SyntaxKind.Constructor: return visitConstructor(node); - case SyntaxKind.ConstructorType: return visitConstructorType(node); - case SyntaxKind.ConstructSignature: return visitConstructSignature(node); case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); case SyntaxKind.ExportAssignment: return visitExportAssignment(node); @@ -3639,7 +3642,6 @@ module ts { case SyntaxKind.ForStatement: return visitForStatement(node); case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); - case SyntaxKind.FunctionType: return visitFunctionType(node); case SyntaxKind.GetAccessor: return visitGetAccessor(node); case SyntaxKind.IndexedAccess: return visitIndexedAccess(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); @@ -3723,8 +3725,7 @@ module ts { if (node.kind === SyntaxKind.InterfaceDeclaration || node.kind === SyntaxKind.ImportDeclaration || node.kind === SyntaxKind.ExportAssignment || - (node.flags & NodeFlags.Ambient) /* - (node.flags & NodeFlags.Export) */) { + (node.flags & NodeFlags.Ambient)) { return false; } @@ -3756,10 +3757,6 @@ module ts { } } - function visitArrowFunction(node: FunctionExpression) { - checkParsedSignature(node); - } - function checkParsedSignature(node: ParsedSignature): boolean { return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); @@ -3921,10 +3918,6 @@ module ts { } } - function visitCallSignature(node: ConstructorDeclaration) { - checkParsedSignature(node); - } - function visitCatchBlock(node: CatchBlock) { if (node.type) { var colonStart = skipTrivia(sourceText, node.variable.end); @@ -3967,14 +3960,6 @@ module ts { } } - function visitConstructorType(node: SignatureDeclaration) { - checkParsedSignature(node); - } - - function visitConstructSignature(node: FunctionLikeDeclaration) { - checkParsedSignature(node); - } - function visitEnumDeclaration(enumDecl: EnumDeclaration) { checkEnumInitializer(enumDecl); } @@ -4068,10 +4053,6 @@ module ts { } } - function visitFunctionType(node: SignatureDeclaration) { - checkParsedSignature(node); - } - function visitGetAccessor(node: MethodDeclaration) { checkParsedSignature(node) || checkAccessor(node); From e4f7822774d02086bd3a9b193723a8bb11459c89 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 21:57:13 -0800 Subject: [PATCH 108/178] Inline some checker logic. --- src/compiler/parser.ts | 51 +++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index d6e5bbf7d10..affc4fd8663 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3629,14 +3629,27 @@ module ts { case SyntaxKind.FunctionType: checkParsedSignature(node); break; + case SyntaxKind.BreakStatement: + case SyntaxKind.ContinueStatement: + checkBreakOrContinueStatement(node); + break; + case SyntaxKind.LabeledStatement: + checkLabeledStatement(node); + break; + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + checkCallOrNewExpression(node); + break; + case SyntaxKind.EnumDeclaration: + checkEnumInitializer(node); + break; + case SyntaxKind.Parameter: + checkParameter(node); + break; case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); - case SyntaxKind.BreakStatement: return visitBreakOrContinueStatement(node); - case SyntaxKind.CallExpression: return visitCallExpression(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); case SyntaxKind.Constructor: return visitConstructor(node); - case SyntaxKind.ContinueStatement: return visitBreakOrContinueStatement(node); - case SyntaxKind.EnumDeclaration: return visitEnumDeclaration(node); case SyntaxKind.ExportAssignment: return visitExportAssignment(node); case SyntaxKind.ForInStatement: return visitForInStatement(node); case SyntaxKind.ForStatement: return visitForStatement(node); @@ -3646,13 +3659,10 @@ module ts { case SyntaxKind.IndexedAccess: return visitIndexedAccess(node); case SyntaxKind.IndexSignature: return visitIndexSignature(node); case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); - case SyntaxKind.LabeledStatement: return visitLabeledStatement(node); case SyntaxKind.Method: return visitMethod(node); case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); - case SyntaxKind.NewExpression: return visitNewExpression(node); case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); case SyntaxKind.NumericLiteral: return visitNumericLiteral(node); - case SyntaxKind.Parameter: return visitParameter(node); case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); case SyntaxKind.Property: return visitProperty(node); @@ -3733,7 +3743,6 @@ module ts { return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); } - function checkForStatementInAmbientContext(node: Node, kind: SyntaxKind): boolean { switch (kind) { case SyntaxKind.Block: @@ -3774,14 +3783,6 @@ module ts { } } - function visitBreakOrContinueStatement(node: BreakOrContinueStatement): void { - checkBreakOrContinueStatement(node); - } - - function visitLabeledStatement(node: LabeledStatement): void { - checkLabeledStatement(node); - } - function isIterationStatement(node: Node, lookInLabeledStatements: boolean): boolean { switch (node.kind) { case SyntaxKind.ForStatement: @@ -3864,7 +3865,7 @@ module ts { } } - function visitCallExpression(node: CallExpression) { + function checkCallOrNewExpression(node: CallExpression) { checkTypeArguments(node.typeArguments) || checkArguments(node.arguments); } @@ -3960,10 +3961,6 @@ module ts { } } - function visitEnumDeclaration(enumDecl: EnumDeclaration) { - checkEnumInitializer(enumDecl); - } - function checkEnumInitializer(enumDecl: EnumDeclaration): boolean { var enumIsConst = (enumDecl.flags & NodeFlags.Const) !== 0; @@ -4161,11 +4158,6 @@ module ts { } } - function visitNewExpression(node: NewExpression): void { - checkTypeArguments(node.typeArguments) || - checkArguments(node.arguments); - } - function visitObjectLiteral(node: ObjectLiteral): void { var seen: Map = {}; var Property = 1; @@ -4233,6 +4225,7 @@ module ts { } } } + function visitNumericLiteral(node: LiteralExpression): void { if (node.flags & NodeFlags.OctalLiteral) { if (node.flags & NodeFlags.ParsedInStrictMode) { @@ -4373,11 +4366,7 @@ module ts { } } - function visitParameter(node: ParameterDeclaration): void { - checkParameterName(node); - } - - function checkParameterName(node: ParameterDeclaration): boolean { + function checkParameter(node: ParameterDeclaration): boolean { // It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the // Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code // or if its FunctionBody is strict code(11.1.5). From 8d4e9064d0d40883c825fa7180d076b1d8c4fabb Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 19 Nov 2014 22:11:17 -0800 Subject: [PATCH 109/178] Addressed CR feedback. --- src/compiler/emitter.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 06031c9b84a..f6ccc4e6d59 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -869,14 +869,13 @@ module ts { function templateNeedsParens(template: TemplateExpression, parent: Expression) { switch (parent.kind) { - case SyntaxKind.TaggedTemplateExpression: - Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6!"); - //return (parent).tag === template; case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: return (parent).func === template; case SyntaxKind.ParenExpression: return false; + case SyntaxKind.TaggedTemplateExpression: + Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6."); default: return comparePrecedenceToBinaryPlus(parent) !== Comparison.LessThan; } From c7c1d6b03b98572769374fec46dd9433abc817eb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 22:15:32 -0800 Subject: [PATCH 110/178] Remove unnecessary state from the parser. --- src/compiler/checker.ts | 2 +- src/compiler/parser.ts | 29 +- tests/baselines/reference/giant.errors.txt | 602 +++++++++++++----- ...tiesErrorFromNotUsingIdentifier.errors.txt | 5 +- 4 files changed, 446 insertions(+), 192 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 117422366aa..db368213101 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1784,7 +1784,7 @@ module ts { } else { // If there are no specified types, try to infer it from the body of the get accessor if it exists. - if (getter) { + if (getter && getter.body) { type = getReturnTypeFromBody(getter); } // Otherwise, fall back to 'any'. diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index affc4fd8663..56dc06250f8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -842,10 +842,9 @@ module ts { var identifierCount = 0; var nodeCount = 0; var lineStarts: number[]; - var isInStrictMode = false; + var isInStrictMode = false; var lookAheadMode = LookAheadMode.NotLookingAhead; - var inAmbientContext = false; function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); @@ -3046,16 +3045,7 @@ module ts { node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - - // A common error is to try to declare an accessor in an ambient class. - if (inAmbientContext && canParseSemicolon()) { - parseSemicolon(); - node.body = createMissingNode(); - } - else { - node.body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); - } - + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } @@ -3260,13 +3250,7 @@ module ts { var node = createNode(SyntaxKind.ModuleDeclaration, pos); node.flags = flags; node.name = parseStringLiteral(); - - // For error recovery, just in case the user forgot the declare modifier on this ambient - // external module, treat it as ambient anyway. - var saveInAmbientContext = inAmbientContext; - inAmbientContext = true; node.body = parseModuleBody(); - inAmbientContext = saveInAmbientContext; return finishNode(node); } @@ -3345,10 +3329,6 @@ module ts { } } - var saveInAmbientContext = inAmbientContext; - if (modifiers && modifiers.flags & NodeFlags.Ambient) { - inAmbientContext = true; - } var flags = modifiers ? modifiers.flags : 0; var result: Declaration; switch (token) { @@ -3394,7 +3374,6 @@ module ts { result.modifiers = modifiers; } - inAmbientContext = saveInAmbientContext; return result; } @@ -3494,7 +3473,6 @@ module ts { var rootNodeFlags: NodeFlags = 0; if (fileExtensionIs(filename, ".d.ts")) { rootNodeFlags = NodeFlags.DeclarationFile; - inAmbientContext = true; } file = createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags); file.filename = normalizePath(filename); @@ -4493,6 +4471,9 @@ module ts { else if (inAmbientContext) { return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); } + else if (accessor.body === undefined) { + return grammarErrorAtPos(accessor.end - 1, ";".length, Diagnostics._0_expected, "{"); + } else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_have_type_parameters); } diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index d9d96f5abf7..767c419952c 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -1,86 +1,187 @@ -tests/cases/compiler/giant.ts(25,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(27,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(29,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(31,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(35,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(37,1): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(89,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(91,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(93,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(95,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(99,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(101,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(168,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(170,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(172,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(174,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(178,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(180,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(283,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(285,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(287,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(289,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(293,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(295,1): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(347,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(349,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(351,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(353,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(357,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(359,5): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(426,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(428,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(430,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(432,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(436,9): error TS1005: '{' expected. -tests/cases/compiler/giant.ts(438,5): error TS1005: '{' expected. +tests/cases/compiler/giant.ts(24,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(26,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(28,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(30,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(34,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(36,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(61,6): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(62,5): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(63,6): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(88,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(90,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(92,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(94,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(98,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(100,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(125,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(126,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(127,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(154,39): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(167,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(169,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(171,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(173,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(177,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(179,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(204,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(205,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(206,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(233,39): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(238,35): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(240,24): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(243,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(244,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(245,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(246,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(247,31): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(248,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(249,23): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(250,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(251,32): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(252,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(254,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(255,31): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(256,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(257,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(258,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(262,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(262,25): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(267,30): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(267,33): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(282,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(284,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(286,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(288,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(292,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(294,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(319,6): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(320,5): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(321,6): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(346,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(348,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(350,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(352,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(356,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(358,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(383,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(384,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(385,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(412,39): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(425,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(427,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(429,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(431,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(435,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(437,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(462,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(463,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(464,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(491,39): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(496,35): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(498,24): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(501,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(502,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(503,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(504,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(505,31): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(506,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(507,23): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(508,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(509,32): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(510,21): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(512,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(513,31): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(514,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(515,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(516,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(520,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(520,25): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(525,30): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(525,33): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(532,31): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(534,20): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(537,17): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(538,18): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(539,18): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(540,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(541,27): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(542,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(543,19): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(544,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(545,28): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(546,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(548,17): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(549,27): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(550,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(551,18): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(552,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/giant.ts(556,18): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(556,21): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(558,24): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(561,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(563,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(587,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(588,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(589,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(606,22): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(606,25): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(611,30): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(611,33): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(615,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/giant.ts(616,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/giant.ts(616,42): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(617,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/giant.ts(618,16): error TS1038: A 'declare' modifier cannot be used in an already ambient context. +tests/cases/compiler/giant.ts(621,26): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(621,29): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/giant.ts(623,24): error TS1111: A constructor implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(626,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(628,21): error TS1037: A function implementation cannot be declared in an ambient context. +tests/cases/compiler/giant.ts(653,10): error TS1022: An index signature parameter must have a type annotation. +tests/cases/compiler/giant.ts(654,9): error TS1021: An index signature must have a type annotation. +tests/cases/compiler/giant.ts(655,10): error TS1096: An index signature must have exactly one parameter. +tests/cases/compiler/giant.ts(672,22): error TS1037: A function implementation cannot be declared in an ambient context. +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'. @@ -96,51 +197,42 @@ 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'. @@ -170,7 +262,7 @@ tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (170 errors) ==== +==== tests/cases/compiler/giant.ts (262 errors) ==== /* Prefixes @@ -198,58 +290,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. interface I { //Call Signature (); @@ -274,8 +360,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -306,58 +398,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. interface I { //Call Signature (); @@ -382,8 +468,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -413,6 +505,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } @@ -429,58 +523,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. export interface eI { //Call Signature (); @@ -505,8 +593,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -536,64 +630,108 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static tsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { var V; function F() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } export var eV; export function eF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } @@ -612,58 +750,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. export interface eI { //Call Signature (); @@ -688,8 +820,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -720,58 +858,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. interface I { //Call Signature (); @@ -796,8 +928,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -827,6 +965,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } @@ -843,58 +983,52 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ -!!! error TS2300: Duplicate identifier 'pgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ -!!! error TS2300: Duplicate identifier 'rgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } - ~~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; - ~~~~~~ -!!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } - ~~~~~~ -!!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ -!!! error TS2300: Duplicate identifier 'tgF'. +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. +!!! error TS2300: Duplicate identifier 'tgF'. } - ~ -!!! error TS1005: '{' expected. export interface eI { //Call Signature (); @@ -919,8 +1053,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -950,64 +1090,108 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { }; export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { }; export declare module eaM { }; } export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static tsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { var V; function F() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } export var eV; export function eF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } @@ -1015,61 +1199,105 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all } export declare var eaV; export declare function eaF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. export declare class eaC { constructor () { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. private rF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. public pgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static tsF(param:any) { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { var V; function F() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. class C { constructor () { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static tV; static tF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. } interface I { //Call Signature @@ -1094,8 +1322,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -1115,28 +1349,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all module M { var V; function F() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. class C { } interface I { } module M { } export var eV; export function eF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } export declare var eaV + ~~~~~~~ +!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. export declare function eaF() { }; + ~~~~~~~ +!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export declare class eaC { } + ~~~~~~~ +!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. export declare module eaM { } + ~~~~~~~ +!!! error TS1038: A 'declare' modifier cannot be used in an already ambient context. } export var eV; export function eF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { constructor () { } + ~ +!!! error TS1111: A constructor implementation cannot be declared in an ambient context. public pV; private rV; public pF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. static tV static tF() { } + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. } export interface eI { //Call Signature @@ -1162,8 +1424,14 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all //Index Signature [p]; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. [p1: string]; + ~~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. [p2: string, p3: number]; + ~~ +!!! error TS1096: An index signature must have exactly one parameter. //Property Signature p; @@ -1183,10 +1451,18 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all export module eM { var V; function F() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. class C { } module M { } export var eV; export function eF() { }; + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. + ~ +!!! error TS1036: Statements are not allowed in ambient contexts. export class eC { } export interface eI { } export module eM { } diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.errors.txt b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.errors.txt index 33672c3d54c..cc92b9a0381 100644 --- a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.errors.txt +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.errors.txt @@ -11,13 +11,12 @@ tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPr tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(16,6): error TS1005: ':' expected. tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(17,6): error TS1005: ':' expected. tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(20,17): error TS1005: ':' expected. -tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(5,9): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(15,5): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(16,5): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(17,5): error TS2300: Duplicate identifier 'a'. -==== tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts (17 errors) ==== +==== tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts (16 errors) ==== // errors var y = { "stringLiteral", @@ -29,8 +28,6 @@ tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPr get e, ~ !!! error TS1005: '(' expected. - ~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. set f, ~ !!! error TS1005: '(' expected. From c3840ef0b8cfe47364c2a3fff2b76c674caa9c41 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 19 Nov 2014 22:45:27 -0800 Subject: [PATCH 111/178] Simplify code. --- src/compiler/parser.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 56dc06250f8..28791118d38 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -865,10 +865,6 @@ module ts { errorAtPos(start, length, message, arg0, arg1, arg2); } - function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - file.parseDiagnostics.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function errorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { var lastErrorPos = file.parseDiagnostics.length ? file.parseDiagnostics[file.parseDiagnostics.length - 1].start @@ -2987,7 +2983,6 @@ module ts { } function parsePropertyMemberDeclaration(pos: number, modifiers: ModifiersArray): Declaration { - var errorCountBeforePropertyDeclaration = file.parseDiagnostics.length; var name = parsePropertyName(); var flags = modifiers ? modifiers.flags : 0; var questionStart = scanner.getTokenPos(); @@ -3595,11 +3590,7 @@ module ts { } // Now do node specific checks. - dispatch(node, nodeKind); - } - - function dispatch(node: Node, kind: SyntaxKind): void { - switch (kind) { + switch (nodeKind) { case SyntaxKind.ArrowFunction: case SyntaxKind.CallSignature: case SyntaxKind.ConstructorType: From bb35fc886b070a7a20ab60f2cd960bbbe8aa8376 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 12:54:00 -0800 Subject: [PATCH 112/178] Code review feedback. --- src/compiler/parser.ts | 113 +++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 60 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 28791118d38..477c414790d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1395,9 +1395,9 @@ module ts { // never get a token like this. Instead, we would get 00 and 9 as two separate tokens. // We also do not need to check for negatives because any prefix operator would be part of a // parent unary expression. - if (node.kind === SyntaxKind.NumericLiteral && - sourceText.charCodeAt(tokenPos) === CharacterCodes._0 && - isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { + if (node.kind === SyntaxKind.NumericLiteral + && sourceText.charCodeAt(tokenPos) === CharacterCodes._0 + && isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { node.flags |= NodeFlags.OctalLiteral; } @@ -1471,13 +1471,17 @@ module ts { return token === SyntaxKind.DotDotDotToken || isIdentifier() || isModifier(token); } - function parseParameter(flags: NodeFlags = 0): ParameterDeclaration { - var node = createNode(SyntaxKind.Parameter); - var modifiers = parseModifiers(ModifierContext.Parameters); + function setModifiers(node: Node, modifiers: ModifiersArray) { if (modifiers) { node.flags |= modifiers.flags; node.modifiers = modifiers; } + } + + function parseParameter(flags: NodeFlags = 0): ParameterDeclaration { + var node = createNode(SyntaxKind.Parameter); + var modifiers = parseModifiers(ModifierContext.Parameters); + setModifiers(node, modifiers); if (parseOptional(SyntaxKind.DotDotDotToken)) { node.flags |= NodeFlags.Rest; } @@ -1554,10 +1558,7 @@ module ts { function parseIndexSignatureMember(modifiers: ModifiersArray, pos?: number): SignatureDeclaration { var node = createNode(SyntaxKind.IndexSignature, pos); - if (modifiers) { - node.modifiers = modifiers; - node.flags = modifiers.flags; - } + setModifiers(node, modifiers); node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); node.type = parseTypeAnnotation(); @@ -2968,10 +2969,8 @@ module ts { function parseConstructorDeclaration(pos: number, modifiers: ModifiersArray): ConstructorDeclaration { var node = createNode(SyntaxKind.Constructor, pos); - if (modifiers) { - node.modifiers = modifiers; - node.flags = modifiers.flags; - } + setModifiers(node, modifiers); + parseExpected(SyntaxKind.ConstructorKeyword); var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); node.typeParameters = sig.typeParameters; @@ -2994,9 +2993,8 @@ module ts { if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { var method = createNode(SyntaxKind.Method, pos); - if (modifiers) { - method.modifiers = modifiers; - } + setModifiers(method, modifiers); + if (flags) { method.flags = flags; } @@ -3011,9 +3009,8 @@ module ts { } else { var property = createNode(SyntaxKind.Property, pos); - if (modifiers) { - property.modifiers = modifiers; - } + setModifiers(property, modifiers); + if (flags) { property.flags = flags; } @@ -3031,10 +3028,8 @@ module ts { function parseMemberAccessorDeclaration(kind: SyntaxKind, pos: number, modifiers: ModifiersArray): MethodDeclaration { var node = createNode(kind, pos); - if (modifiers) { - node.modifiers = modifiers; - node.flags = modifiers.flags; - } + setModifiers(node, modifiers); + node.name = parsePropertyName(); var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); node.typeParameters = sig.typeParameters; @@ -3274,10 +3269,8 @@ module ts { function parseExportAssignmentTail(pos: number, modifiers: ModifiersArray): ExportAssignment { var node = createNode(SyntaxKind.ExportAssignment, pos); - if (modifiers) { - node.modifiers = modifiers - node.flags = modifiers.flags; - } + setModifiers(node, modifiers); + node.exportName = parseIdentifier(); parseSemicolon(); return finishNode(node); @@ -3840,12 +3833,12 @@ module ts { } function checkArguments(arguments: NodeArray) { - return checkForTrailingComma(arguments) || + return checkForDisallowedTrailingComma(arguments) || checkForOmittedArgument(arguments); } function checkTypeArguments(typeArguments: NodeArray) { - return checkForTrailingComma(typeArguments) || + return checkForDisallowedTrailingComma(typeArguments) || checkForAtLeastOneTypeArgument(typeArguments) || checkForMissingTypeArgument(typeArguments); } @@ -3880,7 +3873,7 @@ module ts { } } - function checkForTrailingComma(list: NodeArray): boolean { + function checkForDisallowedTrailingComma(list: NodeArray): boolean { if (list && list.hasTrailingComma) { var start = list.end - ",".length; var end = list.end; @@ -3901,7 +3894,7 @@ module ts { } function visitClassDeclaration(node: ClassDeclaration) { - checkForTrailingComma(node.implementedTypes) || + checkForDisallowedTrailingComma(node.implementedTypes) || checkForAtLeastOneHeritageClause(node.implementedTypes, "implements"); } @@ -4080,7 +4073,7 @@ module ts { } function visitInterfaceDeclaration(node: InterfaceDeclaration) { - checkForTrailingComma(node.baseTypes) || + checkForDisallowedTrailingComma(node.baseTypes) || checkForAtLeastOneHeritageClause(node.baseTypes, "extends"); } @@ -4236,82 +4229,82 @@ module ts { var lastStatic: Node, lastPrivate: Node, lastProtected: Node, lastDeclare: Node; var flags = 0; for (var i = 0, n = node.modifiers.length; i < n; i++) { - var m = node.modifiers[i]; + var modifier = node.modifiers[i]; - switch (m.kind) { + switch (modifier.kind) { case SyntaxKind.PublicKeyword: case SyntaxKind.ProtectedKeyword: case SyntaxKind.PrivateKeyword: var text: string; - if (m.kind === SyntaxKind.PublicKeyword) { + if (modifier.kind === SyntaxKind.PublicKeyword) { text = "public"; } - else if (m.kind === SyntaxKind.ProtectedKeyword) { + else if (modifier.kind === SyntaxKind.ProtectedKeyword) { text = "protected"; - lastProtected = m; + lastProtected = modifier; } else { text = "private"; - lastPrivate = m; + lastPrivate = modifier; } if (flags & NodeFlags.AccessibilityModifier) { - return grammarErrorOnNode(m, Diagnostics.Accessibility_modifier_already_seen); + return grammarErrorOnNode(modifier, Diagnostics.Accessibility_modifier_already_seen); } else if (flags & NodeFlags.Static) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); } else if (node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); } - flags |= modifierToFlag(m.kind); + flags |= modifierToFlag(modifier.kind); break; case SyntaxKind.StaticKeyword: if (flags & NodeFlags.Static) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "static"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "static"); } else if (node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); } else if (node.kind === SyntaxKind.Parameter) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } flags |= NodeFlags.Static; - lastStatic = m; + lastStatic = modifier; break; case SyntaxKind.ExportKeyword: if (flags & NodeFlags.Export) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "export"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "export"); } else if (flags & NodeFlags.Ambient) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); } else if (node.parent.kind === SyntaxKind.ClassDeclaration) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } else if (node.kind === SyntaxKind.Parameter) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= NodeFlags.Export; break; case SyntaxKind.DeclareKeyword: if (flags & NodeFlags.Ambient) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_already_seen, "declare"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "declare"); } else if (node.parent.kind === SyntaxKind.ClassDeclaration) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } else if (node.kind === SyntaxKind.Parameter) { - return grammarErrorOnNode(m, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } else if (inAmbientContext && node.parent.kind === SyntaxKind.ModuleBlock) { - return grammarErrorOnNode(m, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + return grammarErrorOnNode(modifier, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } flags |= NodeFlags.Ambient; - lastDeclare = m; + lastDeclare = modifier; break; } } @@ -4347,7 +4340,7 @@ module ts { } function checkTypeParameterList(typeParameters: NodeArray): boolean { - if (checkForTrailingComma(typeParameters)) { + if (checkForDisallowedTrailingComma(typeParameters)) { return true; } @@ -4359,7 +4352,7 @@ module ts { } function checkParameterList(parameters: NodeArray): boolean { - if (checkForTrailingComma(parameters)) { + if (checkForDisallowedTrailingComma(parameters)) { return true; } @@ -4526,7 +4519,7 @@ module ts { } function visitTupleType(node: TupleTypeNode) { - checkForTrailingComma(node.elementTypes) || + checkForDisallowedTrailingComma(node.elementTypes) || checkForAtLeastOneType(node); } @@ -4563,7 +4556,7 @@ module ts { function checkVariableDeclarations(declarations: NodeArray): boolean { if (declarations) { - if (checkForTrailingComma(declarations)) { + if (checkForDisallowedTrailingComma(declarations)) { return true; } From 2b189b035aa9f482c490dc7b339da7a7e9626846 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 13:36:43 -0800 Subject: [PATCH 113/178] Revert changes to resources. --- src/compiler/diagnosticInformationMap.generated.ts | 6 +++--- src/compiler/diagnosticMessages.json | 10 +++++----- .../objectTypeWithOptionalProperty1.errors.txt | 4 ++-- .../objectTypesWithOptionalProperties.errors.txt | 4 ++-- tests/baselines/reference/parser645086_1.errors.txt | 4 ++-- tests/baselines/reference/parser645086_2.errors.txt | 4 ++-- .../baselines/reference/parserMissingToken2.errors.txt | 4 ++-- .../parserRegularExpressionDivideAmbiguity4.errors.txt | 4 ++-- ...tesWithIncompleteNoSubstitutionTemplate1.errors.txt | 4 ++-- ...tesWithIncompleteNoSubstitutionTemplate2.errors.txt | 4 ++-- .../templateStringInTaggedTemplate.errors.txt | 4 ++-- .../templateStringWithEmbeddedYieldKeyword.errors.txt | 4 ++-- ...emplateStringWithEmbeddedYieldKeywordES6.errors.txt | 4 ++-- .../unterminatedRegexAtEndOfSource1.errors.txt | 4 ++-- 14 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 80a32ba330a..402fcbe93e7 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -122,9 +122,9 @@ module ts { let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: DiagnosticCategory.Error, key: "'let' declarations can only be declared inside a block." }, Invalid_template_literal_expected: { code: 1158, category: DiagnosticCategory.Error, key: "Invalid template literal; expected '}'" }, Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: DiagnosticCategory.Error, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, - An_object_member_cannot_be_declared_optional: { code: 1160, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional." }, - Unterminated_template_literal: { code: 1161, category: DiagnosticCategory.Error, key: "Unterminated template literal." }, - Unterminated_regular_expression_literal: { code: 1162, category: DiagnosticCategory.Error, key: "Unterminated regular expression literal." }, + Unterminated_template_literal: { code: 1160, category: DiagnosticCategory.Error, key: "Unterminated template literal." }, + Unterminated_regular_expression_literal: { code: 1161, category: DiagnosticCategory.Error, key: "Unterminated regular expression literal." }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional." }, Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index c05770bdd8e..353f0390145 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -479,15 +479,15 @@ "category": "Error", "code": 1159 }, - "An object member cannot be declared optional.": { - "category": "Error", - "code": 1160 - }, "Unterminated template literal.": { + "category": "Error", + "code": 1160 + }, + "Unterminated regular expression literal.": { "category": "Error", "code": 1161 }, - "Unterminated regular expression literal.": { + "An object member cannot be declared optional.": { "category": "Error", "code": 1162 }, diff --git a/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt b/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt index 7e17563873a..e2e1c05ea1e 100644 --- a/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt +++ b/tests/baselines/reference/objectTypeWithOptionalProperty1.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/objectTypeWithOptionalProperty1.ts(2,10): error TS1160: An object member cannot be declared optional. +tests/cases/compiler/objectTypeWithOptionalProperty1.ts(2,10): error TS1162: An object member cannot be declared optional. ==== tests/cases/compiler/objectTypeWithOptionalProperty1.ts (1 errors) ==== var b = { x?: 1 // error ~ -!!! error TS1160: An object member cannot be declared optional. +!!! error TS1162: An object member cannot be declared optional. } \ No newline at end of file diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt index d33a5e35b63..a2269c29d11 100644 --- a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(12,6): error TS1112: A class member cannot be declared optional. tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(20,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(24,6): error TS1160: An object member cannot be declared optional. +tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(24,6): error TS1162: An object member cannot be declared optional. ==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (3 errors) ==== @@ -33,5 +33,5 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWith var b = { x?: 1 // error ~ -!!! error TS1160: An object member cannot be declared optional. +!!! error TS1162: An object member cannot be declared optional. } \ No newline at end of file diff --git a/tests/baselines/reference/parser645086_1.errors.txt b/tests/baselines/reference/parser645086_1.errors.txt index f6b76cf26b6..d326fa23973 100644 --- a/tests/baselines/reference/parser645086_1.errors.txt +++ b/tests/baselines/reference/parser645086_1.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts(1,13): error TS1005: ',' expected. tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts(1,14): error TS1134: Variable declaration expected. -tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts(1,15): error TS1162: Unterminated regular expression literal. +tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts(1,15): error TS1161: Unterminated regular expression literal. ==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts (3 errors) ==== @@ -10,4 +10,4 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_1.ts(1,1 ~ !!! error TS1134: Variable declaration expected. -!!! error TS1162: Unterminated regular expression literal. \ No newline at end of file +!!! error TS1161: Unterminated regular expression literal. \ No newline at end of file diff --git a/tests/baselines/reference/parser645086_2.errors.txt b/tests/baselines/reference/parser645086_2.errors.txt index 558ff5964e0..2d40b3c8f78 100644 --- a/tests/baselines/reference/parser645086_2.errors.txt +++ b/tests/baselines/reference/parser645086_2.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts(1,14): error TS1005: ',' expected. tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts(1,15): error TS1134: Variable declaration expected. -tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts(1,16): error TS1162: Unterminated regular expression literal. +tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts(1,16): error TS1161: Unterminated regular expression literal. ==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts (3 errors) ==== @@ -10,4 +10,4 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser645086_2.ts(1,1 ~ !!! error TS1134: Variable declaration expected. -!!! error TS1162: Unterminated regular expression literal. \ No newline at end of file +!!! error TS1161: Unterminated regular expression literal. \ No newline at end of file diff --git a/tests/baselines/reference/parserMissingToken2.errors.txt b/tests/baselines/reference/parserMissingToken2.errors.txt index 8ac17692335..31012c0865e 100644 --- a/tests/baselines/reference/parserMissingToken2.errors.txt +++ b/tests/baselines/reference/parserMissingToken2.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/parser/ecmascript5/MissingTokens/parserMissingToken2.ts(1,2): error TS1162: Unterminated regular expression literal. +tests/cases/conformance/parser/ecmascript5/MissingTokens/parserMissingToken2.ts(1,2): error TS1161: Unterminated regular expression literal. ==== tests/cases/conformance/parser/ecmascript5/MissingTokens/parserMissingToken2.ts (1 errors) ==== / b; -!!! error TS1162: Unterminated regular expression literal. \ No newline at end of file +!!! error TS1161: Unterminated regular expression literal. \ No newline at end of file diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity4.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity4.errors.txt index cbe05bd1735..7ea76fc24d1 100644 --- a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity4.errors.txt +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity4.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity4.ts(1,6): error TS1162: Unterminated regular expression literal. +tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity4.ts(1,6): error TS1161: Unterminated regular expression literal. tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity4.ts(1,17): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity4.ts(1,1): error TS2304: Cannot find name 'foo'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpre ==== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity4.ts (3 errors) ==== foo(/notregexp); -!!! error TS1162: Unterminated regular expression literal. +!!! error TS1161: Unterminated regular expression literal. !!! error TS1005: ')' expected. ~~~ diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.errors.txt b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.errors.txt index 97e424c01aa..a64f5379e47 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.errors.txt +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.ts(6,15): error TS1161: Unterminated template literal. +tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.ts(6,15): error TS1160: Unterminated template literal. ==== tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.ts (1 errors) ==== @@ -9,4 +9,4 @@ tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.ts(6,1 // Incomplete call, not enough parameters. f `123qdawdrqw -!!! error TS1161: Unterminated template literal. \ No newline at end of file +!!! error TS1160: Unterminated template literal. \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.errors.txt b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.errors.txt index cce51b90ef0..fab10f8a888 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.errors.txt +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.ts(6,4): error TS1161: Unterminated template literal. +tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.ts(6,4): error TS1160: Unterminated template literal. ==== tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.ts (1 errors) ==== @@ -9,4 +9,4 @@ tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.ts(6,4 // Incomplete call, not enough parameters, at EOF. f ` -!!! error TS1161: Unterminated template literal. \ No newline at end of file +!!! error TS1160: Unterminated template literal. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt b/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt index 1bad2f0bf5b..45f860bc9a3 100644 --- a/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt +++ b/tests/baselines/reference/templateStringInTaggedTemplate.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts(1,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts(1,42): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts(1,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. ==== tests/cases/conformance/es6/templates/templateStringInTaggedTemplate.ts (2 errors) ==== `I AM THE ${ `${ `TAG` } ` } PORTION` `I ${ "AM" } THE TEMPLATE PORTION` - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2349: Cannot invoke an expression whose type lacks a call signature. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt index 675a987192f..3bf910f3690 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,9): error TS1003: Identifier expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,15): error TS1005: ';' expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,26): error TS1158: Invalid template literal; expected '}' -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(5,1): error TS1161: Unterminated template literal. +tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(5,1): error TS1160: Unterminated template literal. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,11): error TS2304: Cannot find name 'gen'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,20): error TS2304: Cannot find name 'yield'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,30): error TS2304: Cannot find name 'def'. @@ -26,4 +26,4 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts( } -!!! error TS1161: Unterminated template literal. \ No newline at end of file +!!! error TS1160: Unterminated template literal. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt index ff81519d360..4e62197e031 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,9): error TS1003: Identifier expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,17): error TS1005: ';' expected. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,26): error TS1158: Invalid template literal; expected '}' -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(5,1): error TS1161: Unterminated template literal. +tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(5,1): error TS1160: Unterminated template literal. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,11): error TS2304: Cannot find name 'gen'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,20): error TS2304: Cannot find name 'yield'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,30): error TS2304: Cannot find name 'def'. @@ -26,4 +26,4 @@ tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6. } -!!! error TS1161: Unterminated template literal. \ No newline at end of file +!!! error TS1160: Unterminated template literal. \ No newline at end of file diff --git a/tests/baselines/reference/unterminatedRegexAtEndOfSource1.errors.txt b/tests/baselines/reference/unterminatedRegexAtEndOfSource1.errors.txt index 271a1a3074e..fa8959e90bf 100644 --- a/tests/baselines/reference/unterminatedRegexAtEndOfSource1.errors.txt +++ b/tests/baselines/reference/unterminatedRegexAtEndOfSource1.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/unterminatedRegexAtEndOfSource1.ts(1,10): error TS1162: Unterminated regular expression literal. +tests/cases/compiler/unterminatedRegexAtEndOfSource1.ts(1,10): error TS1161: Unterminated regular expression literal. ==== tests/cases/compiler/unterminatedRegexAtEndOfSource1.ts (1 errors) ==== var a = / -!!! error TS1162: Unterminated regular expression literal. \ No newline at end of file +!!! error TS1161: Unterminated regular expression literal. \ No newline at end of file From 60417ff37966b74b416d3cb21179cbb68f7e529d Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Thu, 20 Nov 2014 13:44:51 -0800 Subject: [PATCH 114/178] save token in scanner after scaning hex literal --- src/compiler/scanner.ts | 4 ++-- tests/cases/fourslash/formattingHexLiteral.ts | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/formattingHexLiteral.ts diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index e08f481ba9c..4858265932e 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -931,12 +931,12 @@ module ts { value = 0; } tokenValue = "" + value; - return SyntaxKind.NumericLiteral; + return token = SyntaxKind.NumericLiteral; } // Try to parse as an octal if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); - return SyntaxKind.NumericLiteral; + return token = SyntaxKind.NumericLiteral; } // This fall-through is a deviation from the EcmaScript grammar. The grammar says that a leading zero // can only be followed by an octal digit, a dot, or the end of the number literal. However, we are being diff --git a/tests/cases/fourslash/formattingHexLiteral.ts b/tests/cases/fourslash/formattingHexLiteral.ts new file mode 100644 index 00000000000..a3cb1a3e16c --- /dev/null +++ b/tests/cases/fourslash/formattingHexLiteral.ts @@ -0,0 +1,5 @@ +/// + +////var x = 0x1,y; + +format.document(); // should not crash From ed22f1ca3eede649e0ec26c7ed79616a193d7b1a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 13:48:23 -0800 Subject: [PATCH 115/178] Check node for errors before recursing. --- src/compiler/parser.ts | 41 +++++++++---------- .../accessorsInAmbientContext.errors.txt | 24 +++++------ .../reference/ambientGetters.errors.txt | 6 +-- .../initializersInDeclarations.errors.txt | 6 +-- .../reference/newOperator.errors.txt | 6 +-- .../reference/objectLiteralErrors.errors.txt | 4 +- .../reference/parserAccessors5.errors.txt | 6 +-- .../privacyGloImportParseErrors.errors.txt | 12 +++--- .../privacyImportParseErrors.errors.txt | 24 +++++------ ...hStatementsWithMultipleDefaults.errors.txt | 23 +++++++++-- ...tringsWithIncompatibleTypedTags.errors.txt | 12 +++--- ...mplateStringsWithTagsTypedAsAny.errors.txt | 8 ++-- ...gedTemplateStringsWithTypedTags.errors.txt | 8 ++-- 13 files changed, 96 insertions(+), 84 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 477c414790d..29214121c07 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3555,7 +3555,7 @@ module ts { inAmbientContext = true; } - checkNode(node); + checkNodeAndChildren(node); inAmbientContext = savedInAmbientContext; inFunctionBlock = savedInFunctionBlock; @@ -3564,7 +3564,7 @@ module ts { parent = savedParent; } - function checkNode(node: Node) { + function checkNodeAndChildren(node: Node) { var nodeKind = node.kind; // First, check if you have a statement in a place where it is not allowed. We want // to do this before recursing, because we'd prefer to report these errors at the top @@ -3573,41 +3573,38 @@ module ts { return; } - // Now recurse and perform all grammar checks on the children of this node. var diagnosticCount = grammarDiagnostics.length; - forEachChild(node, visitNode); + checkNode(node, nodeKind); // if we got any errors, just stop performing any more checks on this node or higher. if (diagnosticCount !== grammarDiagnostics.length) { return; } + // Otherwise, recurse and see if we have any errors below us. + forEachChild(node, visitNode); + } + + function checkNode(node: Node, nodeKind: SyntaxKind): any { // Now do node specific checks. switch (nodeKind) { - case SyntaxKind.ArrowFunction: + case SyntaxKind.ArrowFunction: case SyntaxKind.CallSignature: case SyntaxKind.ConstructorType: case SyntaxKind.ConstructSignature: case SyntaxKind.FunctionType: - checkParsedSignature(node); - break; - case SyntaxKind.BreakStatement: - case SyntaxKind.ContinueStatement: - checkBreakOrContinueStatement(node); - break; + return checkParsedSignature(node); + case SyntaxKind.BreakStatement: + case SyntaxKind.ContinueStatement: + return checkBreakOrContinueStatement(node); case SyntaxKind.LabeledStatement: - checkLabeledStatement(node); - break; - case SyntaxKind.CallExpression: + return checkLabeledStatement(node); + case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: - checkCallOrNewExpression(node); - break; - case SyntaxKind.EnumDeclaration: - checkEnumInitializer(node); - break; - case SyntaxKind.Parameter: - checkParameter(node); - break; + return checkCallOrNewExpression(node); + + case SyntaxKind.EnumDeclaration: return checkEnumInitializer(node); + case SyntaxKind.Parameter: return checkParameter(node); case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); case SyntaxKind.CatchBlock: return visitCatchBlock(node); case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); diff --git a/tests/baselines/reference/accessorsInAmbientContext.errors.txt b/tests/baselines/reference/accessorsInAmbientContext.errors.txt index 6028dc898f6..ada59f21f65 100644 --- a/tests/baselines/reference/accessorsInAmbientContext.errors.txt +++ b/tests/baselines/reference/accessorsInAmbientContext.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/accessorsInAmbientContext.ts(4,19): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/accessorsInAmbientContext.ts(4,13): error TS1086: An accessor cannot be declared in an ambient context. tests/cases/compiler/accessorsInAmbientContext.ts(5,13): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(7,26): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/accessorsInAmbientContext.ts(7,20): error TS1086: An accessor cannot be declared in an ambient context. tests/cases/compiler/accessorsInAmbientContext.ts(8,20): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(13,15): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/accessorsInAmbientContext.ts(13,9): error TS1086: An accessor cannot be declared in an ambient context. tests/cases/compiler/accessorsInAmbientContext.ts(14,9): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/accessorsInAmbientContext.ts(16,22): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/accessorsInAmbientContext.ts(16,16): error TS1086: An accessor cannot be declared in an ambient context. tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An accessor cannot be declared in an ambient context. @@ -13,15 +13,15 @@ tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An acces declare module M { class C { get X() { return 1; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~ +!!! error TS1086: An accessor cannot be declared in an ambient context. set X(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. static get Y() { return 1; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~ +!!! error TS1086: An accessor cannot be declared in an ambient context. static set Y(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. @@ -30,15 +30,15 @@ tests/cases/compiler/accessorsInAmbientContext.ts(17,16): error TS1086: An acces declare class C { get X() { return 1; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~ +!!! error TS1086: An accessor cannot be declared in an ambient context. set X(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. static get Y() { return 1; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~ +!!! error TS1086: An accessor cannot be declared in an ambient context. static set Y(v) { } ~ !!! error TS1086: An accessor cannot be declared in an ambient context. diff --git a/tests/baselines/reference/ambientGetters.errors.txt b/tests/baselines/reference/ambientGetters.errors.txt index 085b30b758e..a56020c41fb 100644 --- a/tests/baselines/reference/ambientGetters.errors.txt +++ b/tests/baselines/reference/ambientGetters.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/ambientGetters.ts(3,9): error TS1086: An accessor cannot be declared in an ambient context. -tests/cases/compiler/ambientGetters.ts(7,20): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/compiler/ambientGetters.ts(7,9): error TS1086: An accessor cannot be declared in an ambient context. ==== tests/cases/compiler/ambientGetters.ts (2 errors) ==== @@ -12,6 +12,6 @@ tests/cases/compiler/ambientGetters.ts(7,20): error TS1036: Statements are not a declare class B { get length() { return 0; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~~~~~~ +!!! error TS1086: An accessor cannot be declared in an ambient context. } \ No newline at end of file diff --git a/tests/baselines/reference/initializersInDeclarations.errors.txt b/tests/baselines/reference/initializersInDeclarations.errors.txt index 99798d749c2..5ab9ae5d2bc 100644 --- a/tests/baselines/reference/initializersInDeclarations.errors.txt +++ b/tests/baselines/reference/initializersInDeclarations.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(5,9): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(6,16): error TS1039: Initializers are not allowed in ambient contexts. -tests/cases/conformance/externalModules/initializersInDeclarations.ts(8,3): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/conformance/externalModules/initializersInDeclarations.ts(7,16): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/conformance/externalModules/initializersInDeclarations.ts(12,15): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(13,15): error TS1039: Initializers are not allowed in ambient contexts. tests/cases/conformance/externalModules/initializersInDeclarations.ts(16,2): error TS1036: Statements are not allowed in ambient contexts. @@ -19,9 +19,9 @@ tests/cases/conformance/externalModules/initializersInDeclarations.ts(18,16): er ~~ !!! error TS1039: Initializers are not allowed in ambient contexts. fn(): boolean { + ~ +!!! error TS1037: A function implementation cannot be declared in an ambient context. return false; - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. } } diff --git a/tests/baselines/reference/newOperator.errors.txt b/tests/baselines/reference/newOperator.errors.txt index 47f0a68b683..9232b865648 100644 --- a/tests/baselines/reference/newOperator.errors.txt +++ b/tests/baselines/reference/newOperator.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/newOperator.ts(18,10): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/newOperator.ts(20,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/newOperator.ts(45,16): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. +tests/cases/compiler/newOperator.ts(44,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/newOperator.ts(3,13): error TS2304: Cannot find name 'ifc'. tests/cases/compiler/newOperator.ts(10,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. tests/cases/compiler/newOperator.ts(11,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. @@ -79,9 +79,9 @@ tests/cases/compiler/newOperator.ts(31,10): error TS2351: Cannot use 'new' with class S { public get xs(): M.T[] { + ~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. return new M.T[]; - ~~~~~~~~~ -!!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. } } \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index d27823a30a3..97cbdc32266 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -13,7 +13,7 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25) tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS1119: An object literal cannot have property and accessor with the same name. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS1119: An object literal cannot have property and accessor with the same name. 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. @@ -293,7 +293,7 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) !!! error TS2300: Duplicate identifier '0x0'. var f14 = { 0: 0, get 000() { return 0; } }; ~~~ -!!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. +!!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. ~~~ diff --git a/tests/baselines/reference/parserAccessors5.errors.txt b/tests/baselines/reference/parserAccessors5.errors.txt index f2e3d8c8d37..b7dcd8ef923 100644 --- a/tests/baselines/reference/parserAccessors5.errors.txt +++ b/tests/baselines/reference/parserAccessors5.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts(2,15): error TS1036: Statements are not allowed in ambient contexts. +tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts(2,7): error TS1086: An accessor cannot be declared in an ambient context. ==== tests/cases/conformance/parser/ecmascript5/Accessors/parserAccessors5.ts (1 errors) ==== declare class C { get foo() { return 0; } - ~~~~~~ -!!! error TS1036: Statements are not allowed in ambient contexts. + ~~~ +!!! error TS1086: An accessor cannot be declared in an ambient context. } \ No newline at end of file diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index a2f2843e4bb..0e3ec1def23 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(125,13): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(121,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(133,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/privacyGloImportParseErrors.ts(149,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(146,5): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -143,12 +143,12 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import errorImport = require("glo_M2_public"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; module m5 { import m5_errorImport = require("glo_M2_public"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -178,11 +178,11 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import m3 = require("use_glo_M1_public"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/baselines/reference/privacyImportParseErrors.errors.txt b/tests/baselines/reference/privacyImportParseErrors.errors.txt index 7ba28a25146..4f54c660979 100644 --- a/tests/baselines/reference/privacyImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyImportParseErrors.errors.txt @@ -1,11 +1,11 @@ tests/cases/compiler/privacyImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(143,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(277,13): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(306,13): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(273,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(302,9): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(314,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/privacyImportParseErrors.ts(326,9): error TS1029: 'export' modifier must precede 'declare' modifier. -tests/cases/compiler/privacyImportParseErrors.ts(344,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(353,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(341,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(350,5): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -352,12 +352,12 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M2_public"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; module m5 { import m5_errorImport = require("glo_M2_public"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M1_public; } } @@ -391,12 +391,12 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M4_private"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M3_private; module m5 { import m5_errorImport = require("glo_M4_private"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. import m5_nonerrorImport = glo_M3_private; } } @@ -452,22 +452,22 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import m3 = require("use_glo_M1_public"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } export module m3 { import m3 = require("use_glo_M1_public"); + ~~~~~~ +!!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; import m2 = require("use_glo_M1_public"); - ~~~~~~ -!!! error TS1147: Import declarations in an internal module cannot reference an external module. } } \ No newline at end of file diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt index 9c46389e906..084ed1f357e 100644 --- a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt @@ -1,9 +1,14 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(9,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(10,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,22): error TS1108: A 'return' statement can only be used within a function body. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(21,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(25,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(26,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. +tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (3 errors) ==== +==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (8 errors) ==== var x = 10; @@ -29,15 +34,25 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,22): error TS110 switch (x * x) { default: // No issues. default: // Error; second 'default' clause. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. break; case 10000: x /= x; default: // Error, third 'default' clause + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. def\u0061ult: // Error, fourth 'default' clause. + ~~~~~~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. // Errors on fifth-seventh default: return; - ~~~~~~ -!!! error TS1108: A 'return' statement can only be used within a function body. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: default: + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. + ~~~~~~~~ +!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. } } \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt index 6676a6d8a81..910e1ce8c27 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.errors.txt @@ -4,9 +4,9 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(20,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(24,19): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(26,40): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(28,50): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(14,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(18,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts(22,9): error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. @@ -58,19 +58,19 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTyped !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc`[0].member `abc${1}def${2}ghi`; - ~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; - ~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. f `abc${ true }def${ true }ghi`["member"].member `abc${ 1 }def${ 2 }ghi`; - ~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ~ !!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'boolean'. diff --git a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt index a50339adf11..4ea0304f421 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTagsTypedAsAny.errors.txt @@ -6,8 +6,8 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(13,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(15,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(17,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(19,32): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts(21,46): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts (10 errors) ==== @@ -46,11 +46,11 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTagsTypedAsAny.ts !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`["member"].someOtherTag `abc${1}def${2}ghi`; - ~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].someOtherTag `abc${1}def${2}ghi`; - ~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt index 02de690a22b..173d3a6b741 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.errors.txt @@ -4,8 +4,8 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(16,3 tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(18,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(20,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(22,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,3): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(24,19): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,40): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. ==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts (8 errors) ==== @@ -45,11 +45,11 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts(26,3 !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc`[0].member `abc${1}def${2}ghi`; - ~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f `abc${1}def${2}ghi`["member"].member `abc${1}def${2}ghi`; - ~~~~~~ + ~~~~~~ !!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher. f.thisIsNotATag(`abc`); From 32864f47cac8892a8759bedd84aa86eda10cb91c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 14:10:08 -0800 Subject: [PATCH 116/178] Simplify grammar check pass. --- src/compiler/parser.ts | 302 +++++++++--------- ...hStatementsWithMultipleDefaults.errors.txt | 20 +- ...StatementsWithMultipleDefaults1.errors.txt | 5 +- 3 files changed, 153 insertions(+), 174 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 29214121c07..88c823fa977 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3526,14 +3526,12 @@ module ts { function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { var grammarDiagnostics = file.grammarDiagnostics; + + // Create a scanner so we can find the start of tokens to report errors on. var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText); // We're automatically in an ambient context if this is a .d.ts file. var inAmbientContext = fileExtensionIs(file.filename, ".d.ts"); - if (inAmbientContext && checkTopLevelElementsForRequiredDeclareModifier(file)) { - return; - } - var inFunctionBlock = false; var parent: Node; visitNode(file); @@ -3573,11 +3571,8 @@ module ts { return; } - var diagnosticCount = grammarDiagnostics.length; - checkNode(node, nodeKind); - // if we got any errors, just stop performing any more checks on this node or higher. - if (diagnosticCount !== grammarDiagnostics.length) { + if (checkNode(node, nodeKind)) { return; } @@ -3585,7 +3580,7 @@ module ts { forEachChild(node, visitNode); } - function checkNode(node: Node, nodeKind: SyntaxKind): any { + function checkNode(node: Node, nodeKind: SyntaxKind): boolean { // Now do node specific checks. switch (nodeKind) { case SyntaxKind.ArrowFunction: @@ -3593,50 +3588,50 @@ module ts { case SyntaxKind.ConstructorType: case SyntaxKind.ConstructSignature: case SyntaxKind.FunctionType: - return checkParsedSignature(node); + return checkAnyParsedSignature(node); case SyntaxKind.BreakStatement: case SyntaxKind.ContinueStatement: return checkBreakOrContinueStatement(node); - case SyntaxKind.LabeledStatement: - return checkLabeledStatement(node); case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: return checkCallOrNewExpression(node); - case SyntaxKind.EnumDeclaration: return checkEnumInitializer(node); + case SyntaxKind.EnumDeclaration: return checkEnumDeclaration(node); case SyntaxKind.Parameter: return checkParameter(node); - case SyntaxKind.BinaryExpression: return visitBinaryExpression(node); - case SyntaxKind.CatchBlock: return visitCatchBlock(node); - case SyntaxKind.ClassDeclaration: return visitClassDeclaration(node); - case SyntaxKind.Constructor: return visitConstructor(node); - case SyntaxKind.ExportAssignment: return visitExportAssignment(node); - case SyntaxKind.ForInStatement: return visitForInStatement(node); - case SyntaxKind.ForStatement: return visitForStatement(node); - case SyntaxKind.FunctionDeclaration: return visitFunctionDeclaration(node); - case SyntaxKind.FunctionExpression: return visitFunctionExpression(node); - case SyntaxKind.GetAccessor: return visitGetAccessor(node); - case SyntaxKind.IndexedAccess: return visitIndexedAccess(node); - case SyntaxKind.IndexSignature: return visitIndexSignature(node); - case SyntaxKind.InterfaceDeclaration: return visitInterfaceDeclaration(node); - case SyntaxKind.Method: return visitMethod(node); - case SyntaxKind.ModuleDeclaration: return visitModuleDeclaration(node); - case SyntaxKind.ObjectLiteral: return visitObjectLiteral(node); - case SyntaxKind.NumericLiteral: return visitNumericLiteral(node); - case SyntaxKind.PostfixOperator: return visitPostfixOperator(node); - case SyntaxKind.PrefixOperator: return visitPrefixOperator(node); - case SyntaxKind.Property: return visitProperty(node); - case SyntaxKind.PropertyAssignment: return visitPropertyAssignment(node); - case SyntaxKind.ReturnStatement: return visitReturnStatement(node); - case SyntaxKind.SetAccessor: return visitSetAccessor(node); - case SyntaxKind.ShorthandPropertyAssignment: return visitShorthandPropertyAssignment(node); - case SyntaxKind.SwitchStatement: return visitSwitchStatement(node); - case SyntaxKind.TaggedTemplateExpression: return visitTaggedTemplateExpression(node); - case SyntaxKind.TupleType: return visitTupleType(node); - case SyntaxKind.TypeParameter: return visitTypeParameter(node); - case SyntaxKind.TypeReference: return visitTypeReference(node); - case SyntaxKind.VariableDeclaration: return visitVariableDeclaration(node); - case SyntaxKind.VariableStatement: return visitVariableStatement(node); - case SyntaxKind.WithStatement: return visitWithStatement(node); + case SyntaxKind.BinaryExpression: return checkBinaryExpression(node); + case SyntaxKind.CatchBlock: return checkCatchBlock(node); + case SyntaxKind.ClassDeclaration: return checkClassDeclaration(node); + case SyntaxKind.Constructor: return checkConstructor(node); + case SyntaxKind.ExportAssignment: return checkExportAssignment(node); + case SyntaxKind.ForInStatement: return checkForInStatement(node); + case SyntaxKind.ForStatement: return checkForStatement(node); + case SyntaxKind.FunctionDeclaration: return checkFunctionDeclaration(node); + case SyntaxKind.FunctionExpression: return checkFunctionExpression(node); + case SyntaxKind.GetAccessor: return checkGetAccessor(node); + case SyntaxKind.IndexedAccess: return checkIndexedAccess(node); + case SyntaxKind.IndexSignature: return checkIndexSignature(node); + case SyntaxKind.InterfaceDeclaration: return checkInterfaceDeclaration(node); + case SyntaxKind.LabeledStatement: return checkLabeledStatement(node); + case SyntaxKind.Method: return checkMethod(node); + case SyntaxKind.ModuleDeclaration: return checkModuleDeclaration(node); + case SyntaxKind.ObjectLiteral: return checkObjectLiteral(node); + case SyntaxKind.NumericLiteral: return checkNumericLiteral(node); + case SyntaxKind.PostfixOperator: return checkPostfixOperator(node); + case SyntaxKind.PrefixOperator: return checkPrefixOperator(node); + case SyntaxKind.Property: return checkProperty(node); + case SyntaxKind.PropertyAssignment: return checkPropertyAssignment(node); + case SyntaxKind.ReturnStatement: return checkReturnStatement(node); + case SyntaxKind.SetAccessor: return checkSetAccessor(node); + case SyntaxKind.SourceFile: return checkSourceFile(node); + case SyntaxKind.ShorthandPropertyAssignment: return checkShorthandPropertyAssignment(node); + case SyntaxKind.SwitchStatement: return checkSwitchStatement(node); + case SyntaxKind.TaggedTemplateExpression: return checkTaggedTemplateExpression(node); + case SyntaxKind.TupleType: return checkTupleType(node); + case SyntaxKind.TypeParameter: return checkTypeParameter(node); + case SyntaxKind.TypeReference: return checkTypeReference(node); + case SyntaxKind.VariableDeclaration: return checkVariableDeclaration(node); + case SyntaxKind.VariableStatement: return checkVariableStatement(node); + case SyntaxKind.WithStatement: return checkWithStatement(node); } } @@ -3669,39 +3664,6 @@ module ts { return grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name); } - function checkTopLevelElementsForRequiredDeclareModifier(file: SourceFile): boolean { - for (var i = 0, n = file.statements.length; i < n; i++) { - var decl = file.statements[i]; - if (isDeclaration(decl) || decl.kind === SyntaxKind.VariableStatement) { - if (checkTopLevelElementForRequiredDeclareModifier(decl)) { - return true; - } - } - } - } - - function checkTopLevelElementForRequiredDeclareModifier(node: Node): boolean { - // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: - // categories: - // - // DeclarationElement: - // ExportAssignment - // export_opt InterfaceDeclaration - // export_opt ImportDeclaration - // export_opt ExternalImportDeclaration - // export_opt AmbientDeclaration - // - if (node.kind === SyntaxKind.InterfaceDeclaration || - node.kind === SyntaxKind.ImportDeclaration || - node.kind === SyntaxKind.ExportAssignment || - (node.flags & NodeFlags.Ambient)) { - - return false; - } - - return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); - } - function checkForStatementInAmbientContext(node: Node, kind: SyntaxKind): boolean { switch (kind) { case SyntaxKind.Block: @@ -3725,18 +3687,18 @@ module ts { } } - function checkParsedSignature(node: ParsedSignature): boolean { + function checkAnyParsedSignature(node: ParsedSignature): boolean { return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); } - function visitBinaryExpression(node: BinaryExpression) { + function checkBinaryExpression(node: BinaryExpression) { if (node.flags & NodeFlags.ParsedInStrictMode) { if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { if (isEvalOrArgumentsIdentifier(node.left)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) - reportInvalidUseInStrictMode(node.left); + return reportInvalidUseInStrictMode(node.left); } } } @@ -3825,7 +3787,7 @@ module ts { } function checkCallOrNewExpression(node: CallExpression) { - checkTypeArguments(node.typeArguments) || + return checkTypeArguments(node.typeArguments) || checkArguments(node.arguments); } @@ -3878,20 +3840,20 @@ module ts { } } - function visitCatchBlock(node: CatchBlock) { + function checkCatchBlock(node: CatchBlock) { if (node.type) { var colonStart = skipTrivia(sourceText, node.variable.end); - grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + return grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); } if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.variable)) { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments - reportInvalidUseInStrictMode(node.variable); + return reportInvalidUseInStrictMode(node.variable); } } - function visitClassDeclaration(node: ClassDeclaration) { - checkForDisallowedTrailingComma(node.implementedTypes) || + function checkClassDeclaration(node: ClassDeclaration) { + return checkForDisallowedTrailingComma(node.implementedTypes) || checkForAtLeastOneHeritageClause(node.implementedTypes, "implements"); } @@ -3901,8 +3863,8 @@ module ts { } } - function visitConstructor(node: ConstructorDeclaration) { - checkParsedSignature(node) || + function checkConstructor(node: ConstructorDeclaration) { + return checkAnyParsedSignature(node) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ true); @@ -3920,7 +3882,7 @@ module ts { } } - function checkEnumInitializer(enumDecl: EnumDeclaration): boolean { + function checkEnumDeclaration(enumDecl: EnumDeclaration): boolean { var enumIsConst = (enumDecl.flags & NodeFlags.Const) !== 0; var hasError = false; @@ -3943,6 +3905,7 @@ module ts { } } } + return hasError; } @@ -3969,19 +3932,19 @@ module ts { return false; } - function visitExportAssignment(node: ExportAssignment) { + function checkExportAssignment(node: ExportAssignment) { if (node.flags & NodeFlags.Modifier) { - grammarErrorOnFirstToken(node, Diagnostics.An_export_assignment_cannot_have_modifiers); + return grammarErrorOnFirstToken(node, Diagnostics.An_export_assignment_cannot_have_modifiers); } } - function visitForInStatement(node: ForInStatement) { - checkVariableDeclarations(node.declarations) || + function checkForInStatement(node: ForInStatement) { + return checkVariableDeclarations(node.declarations) || checkForMoreThanOneDeclaration(node.declarations); } - function visitForStatement(node: ForStatement) { - checkVariableDeclarations(node.declarations); + function checkForStatement(node: ForStatement) { + return checkVariableDeclarations(node.declarations); } function checkForMoreThanOneDeclaration(declarations: NodeArray) { @@ -3990,14 +3953,14 @@ module ts { } } - function visitFunctionDeclaration(node: FunctionLikeDeclaration) { - checkParsedSignature(node) || + function checkFunctionDeclaration(node: FunctionLikeDeclaration) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false); } - function visitFunctionExpression(node: FunctionExpression) { - checkParsedSignature(node) || + function checkFunctionExpression(node: FunctionExpression) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name); } @@ -4009,24 +3972,24 @@ module ts { } } - function visitGetAccessor(node: MethodDeclaration) { - checkParsedSignature(node) || + function checkGetAccessor(node: MethodDeclaration) { + return checkAnyParsedSignature(node) || checkAccessor(node); } - function visitIndexedAccess(node: IndexedAccess): void { + function checkIndexedAccess(node: IndexedAccess) { if (node.index.kind === SyntaxKind.Missing && node.parent.kind === SyntaxKind.NewExpression && (node.parent).func === node) { var start = skipTrivia(sourceText, node.parent.pos); var end = node.end; - grammarErrorAtPos(start, end - start, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + return grammarErrorAtPos(start, end - start, Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } } - function visitIndexSignature(node: SignatureDeclaration): void { - checkIndexSignatureParameters(node) || + function checkIndexSignature(node: SignatureDeclaration): boolean { + return checkIndexSignatureParameters(node) || checkForIndexSignatureModifiers(node); } @@ -4069,13 +4032,13 @@ module ts { } } - function visitInterfaceDeclaration(node: InterfaceDeclaration) { - checkForDisallowedTrailingComma(node.baseTypes) || + function checkInterfaceDeclaration(node: InterfaceDeclaration) { + return checkForDisallowedTrailingComma(node.baseTypes) || checkForAtLeastOneHeritageClause(node.baseTypes, "extends"); } - function visitMethod(node: MethodDeclaration) { - checkParsedSignature(node) || + function checkMethod(node: MethodDeclaration) { + return checkAnyParsedSignature(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false) || (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)); } @@ -4089,8 +4052,8 @@ module ts { } } - function visitModuleDeclaration(node: ModuleDeclaration): void { - checkModuleDeclarationName(node) || + function checkModuleDeclaration(node: ModuleDeclaration): boolean { + return checkModuleDeclarationName(node) || checkModuleDeclarationStatements(node); } @@ -4117,7 +4080,7 @@ module ts { } } - function visitObjectLiteral(node: ObjectLiteral): void { + function checkObjectLiteral(node: ObjectLiteral): boolean { var seen: Map = {}; var Property = 1; var GetAccessor = 2; @@ -4175,23 +4138,23 @@ module ts { seen[name.text] = currentKind | existingKind; } else { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + return grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); } } else { - grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + return grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); } } } } - function visitNumericLiteral(node: LiteralExpression): void { + function checkNumericLiteral(node: LiteralExpression): boolean { if (node.flags & NodeFlags.OctalLiteral) { if (node.flags & NodeFlags.ParsedInStrictMode) { - grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); + return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } else if (languageVersion >= ScriptTarget.ES5) { - grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); + return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); } } } @@ -4386,33 +4349,33 @@ module ts { } } - function visitPostfixOperator(node: UnaryExpression) { + function checkPostfixOperator(node: UnaryExpression) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.operand)) { - reportInvalidUseInStrictMode(node.operand); + return reportInvalidUseInStrictMode(node.operand); } } - function visitPrefixOperator(node: UnaryExpression) { + function checkPrefixOperator(node: UnaryExpression) { if (node.flags & NodeFlags.ParsedInStrictMode) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator if ((node.operator === SyntaxKind.PlusPlusToken || node.operator === SyntaxKind.MinusMinusToken) && isEvalOrArgumentsIdentifier(node.operand)) { - reportInvalidUseInStrictMode(node.operand); + return reportInvalidUseInStrictMode(node.operand); } else if (node.operator === SyntaxKind.DeleteKeyword && node.operand.kind === SyntaxKind.Identifier) { // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its // UnaryExpression is a direct reference to a variable, function argument, or function name - grammarErrorOnNode(node.operand, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + return grammarErrorOnNode(node.operand, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); } } } - function visitProperty(node: PropertyDeclaration) { - (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)) || + function checkProperty(node: PropertyDeclaration) { + return (node.parent.kind === SyntaxKind.ClassDeclaration && checkForInvalidQuestionMark(node, Diagnostics.A_class_member_cannot_be_declared_optional)) || checkForInitializerInAmbientContext(node); } @@ -4422,8 +4385,8 @@ module ts { } } - function visitPropertyAssignment(node: PropertyDeclaration) { - checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); + function checkPropertyAssignment(node: PropertyDeclaration) { + return checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); } function checkForInvalidQuestionMark(node: Declaration, message: DiagnosticMessage) { @@ -4433,14 +4396,14 @@ module ts { } } - function visitReturnStatement(node: ReturnStatement) { + function checkReturnStatement(node: ReturnStatement) { if (!inFunctionBlock) { - grammarErrorOnFirstToken(node, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + return grammarErrorOnFirstToken(node, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); } } - function visitSetAccessor(node: MethodDeclaration) { - checkParsedSignature(node) || + function checkSetAccessor(node: MethodDeclaration) { + return checkAnyParsedSignature(node) || checkAccessor(node); } @@ -4486,11 +4449,48 @@ module ts { } } - function visitShorthandPropertyAssignment(node: ShortHandPropertyDeclaration): void { - checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); + function checkSourceFile(node: SourceFile): boolean { + return inAmbientContext && checkTopLevelElementsForRequiredDeclareModifier(file); } - function visitSwitchStatement(node: SwitchStatement) { + function checkTopLevelElementsForRequiredDeclareModifier(file: SourceFile): boolean { + for (var i = 0, n = file.statements.length; i < n; i++) { + var decl = file.statements[i]; + if (isDeclaration(decl) || decl.kind === SyntaxKind.VariableStatement) { + if (checkTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + } + + function checkTopLevelElementForRequiredDeclareModifier(node: Node): boolean { + // A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports: + // categories: + // + // DeclarationElement: + // ExportAssignment + // export_opt InterfaceDeclaration + // export_opt ImportDeclaration + // export_opt ExternalImportDeclaration + // export_opt AmbientDeclaration + // + if (node.kind === SyntaxKind.InterfaceDeclaration || + node.kind === SyntaxKind.ImportDeclaration || + node.kind === SyntaxKind.ExportAssignment || + (node.flags & NodeFlags.Ambient)) { + + return false; + } + + return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + + function checkShorthandPropertyAssignment(node: ShortHandPropertyDeclaration): boolean { + return checkForInvalidQuestionMark(node, Diagnostics.An_object_member_cannot_be_declared_optional); + } + + function checkSwitchStatement(node: SwitchStatement) { var firstDefaultClause: CaseOrDefaultClause; // Error on duplicate 'default' clauses. @@ -4503,20 +4503,20 @@ module ts { else { var start = skipTrivia(file.text, clause.pos); var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; - grammarErrorAtPos(start, end - start, Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + return grammarErrorAtPos(start, end - start, Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); } } } } - function visitTaggedTemplateExpression(node: TaggedTemplateExpression) { + function checkTaggedTemplateExpression(node: TaggedTemplateExpression) { if (languageVersion < ScriptTarget.ES6) { - grammarErrorOnFirstToken(node.template, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); + return grammarErrorOnFirstToken(node.template, Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); } } - function visitTupleType(node: TupleTypeNode) { - checkForDisallowedTrailingComma(node.elementTypes) || + function checkTupleType(node: TupleTypeNode) { + return checkForDisallowedTrailingComma(node.elementTypes) || checkForAtLeastOneType(node); } @@ -4526,28 +4526,28 @@ module ts { } } - function visitTypeParameter(node: TypeParameterDeclaration) { + function checkTypeParameter(node: TypeParameterDeclaration) { if (node.expression) { - grammarErrorOnFirstToken(node.expression, Diagnostics.Type_expected); + return grammarErrorOnFirstToken(node.expression, Diagnostics.Type_expected); } } - function visitTypeReference(node: TypeReferenceNode) { - checkTypeArguments(node.typeArguments); + function checkTypeReference(node: TypeReferenceNode) { + return checkTypeArguments(node.typeArguments); } - function visitVariableDeclaration(node: VariableDeclaration) { + function checkVariableDeclaration(node: VariableDeclaration) { if (inAmbientContext && node.initializer) { var equalsPos = node.type ? skipTrivia(sourceText, node.type.end) : skipTrivia(sourceText, node.name.end); - grammarErrorAtPos(equalsPos, "=".length, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + return grammarErrorAtPos(equalsPos, "=".length, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } if (!inAmbientContext && !node.initializer && node.flags & NodeFlags.Const) { - grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); + return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); } if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments - reportInvalidUseInStrictMode(node.name); + return reportInvalidUseInStrictMode(node.name); } } @@ -4573,8 +4573,8 @@ module ts { } } - function visitVariableStatement(node: VariableStatement) { - checkVariableDeclarations(node.declarations) || + function checkVariableStatement(node: VariableStatement) { + return checkVariableDeclarations(node.declarations) || checkForDisallowedLetOrConstStatement(node); } @@ -4605,11 +4605,11 @@ module ts { return true; } - function visitWithStatement(node: WithStatement): void { + function checkWithStatement(node: WithStatement): boolean { if (node.flags & NodeFlags.ParsedInStrictMode) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such // a context is an - grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); + return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); } } } diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt index 084ed1f357e..10568608a79 100644 --- a/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults.errors.txt @@ -1,14 +1,8 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(9,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(10,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(21,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(25,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(26,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(28,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,13): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (8 errors) ==== +==== tests/cases/compiler/switchStatementsWithMultipleDefaults.ts (2 errors) ==== var x = 10; @@ -21,8 +15,6 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS111 ~~~~~~~~ !!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: // Error; third 'default' clause. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. case 3: x *= x; } @@ -40,19 +32,9 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults.ts(29,22): error TS111 case 10000: x /= x; default: // Error, third 'default' clause - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. def\u0061ult: // Error, fourth 'default' clause. - ~~~~~~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. // Errors on fifth-seventh default: return; - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: default: - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. } } \ No newline at end of file diff --git a/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt index 80b0560445a..c20bfd22af1 100644 --- a/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt +++ b/tests/baselines/reference/switchStatementsWithMultipleDefaults1.errors.txt @@ -1,8 +1,7 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts(8,9): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts(9,9): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. -==== tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts (2 errors) ==== +==== tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts (1 errors) ==== var x = 10; switch (x) { @@ -14,8 +13,6 @@ tests/cases/compiler/switchStatementsWithMultipleDefaults1.ts(9,9): error TS1113 ~~~~~~~~ !!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. default: // Error; third 'default' clause. - ~~~~~~~~ -!!! error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement. case 3: x *= x; } \ No newline at end of file From 617fd2c5c9e56c59ca7b5c83178bd3264c27098a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 14:18:04 -0800 Subject: [PATCH 117/178] Remove SourceFileInternal. --- src/compiler/parser.ts | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 88c823fa977..2f96e4f734d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -814,12 +814,6 @@ module ts { return false; } - interface SourceFileInternal extends SourceFile { - // All diagnostics for the source file. Should not be accessed directly. Lazily created - // when getSyntacticDiagnostics is called. - _syntacticDiagnostics: Diagnostic[]; - } - function modifierToFlag(token: SyntaxKind): NodeFlags { switch (token) { case SyntaxKind.StaticKeyword: return NodeFlags.Static; @@ -833,7 +827,7 @@ module ts { } export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile { - var file: SourceFileInternal; + var file: SourceFile; var scanner: Scanner; var token: SyntaxKind; var parsingContext: ParsingContext; @@ -3439,22 +3433,23 @@ module ts { : undefined); } + var syntacticDiagnostics: Diagnostic[]; function getSyntacticDiagnostics() { - if (file._syntacticDiagnostics === undefined) { + if (syntacticDiagnostics === undefined) { if (file.parseDiagnostics.length > 0) { // Don't bother doing any grammar checks if there are already parser errors. // Otherwise we may end up with too many cascading errors. - file._syntacticDiagnostics = file.parseDiagnostics; + syntacticDiagnostics = file.parseDiagnostics; } else { // No parser errors were reported. Perform our stricter grammar checks. - file._syntacticDiagnostics = file.grammarDiagnostics; + syntacticDiagnostics = file.grammarDiagnostics; checkGrammar(sourceText, languageVersion, file); } } - Debug.assert(file._syntacticDiagnostics !== undefined); - return file._syntacticDiagnostics + Debug.assert(syntacticDiagnostics !== undefined); + return syntacticDiagnostics; } scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText, scanError, onComment); @@ -3462,7 +3457,7 @@ module ts { if (fileExtensionIs(filename, ".d.ts")) { rootNodeFlags = NodeFlags.DeclarationFile; } - file = createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags); + file = createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags); file.filename = normalizePath(filename); file.text = sourceText; file.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; @@ -3524,7 +3519,7 @@ module ts { return token >= SyntaxKind.FirstAssignment && token <= SyntaxKind.LastAssignment; } - function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFileInternal) { + function checkGrammar(sourceText: string, languageVersion: ScriptTarget, file: SourceFile) { var grammarDiagnostics = file.grammarDiagnostics; // Create a scanner so we can find the start of tokens to report errors on. From c005c33244b75911acc04d69c6fbf23269f8acea Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 14:27:09 -0800 Subject: [PATCH 118/178] Better spans for import/export errors. --- src/compiler/parser.ts | 4 ++-- ...DeclarationInModuleDeclaration1.errors.txt | 4 ++-- .../reference/importInsideModule.errors.txt | 4 ++-- .../parserExportAssignment5.errors.txt | 2 +- .../privacyGloImportParseErrors.errors.txt | 12 +++++----- .../privacyImportParseErrors.errors.txt | 24 +++++++++---------- .../amd/intReferencingExtAndInt.errors.txt | 4 ++-- .../node/intReferencingExtAndInt.errors.txt | 4 ++-- .../nestedLocalModuleSimpleCase.errors.txt | 4 ++-- .../nestedLocalModuleSimpleCase.errors.txt | 4 ++-- ...calModuleWithRecursiveTypecheck.errors.txt | 4 ++-- ...calModuleWithRecursiveTypecheck.errors.txt | 4 ++-- ...dModuleDeclarationsInsideModule.errors.txt | 4 ++-- ...dModuleDeclarationsInsideModule.errors.txt | 4 ++-- ...arationsInsideNonExportedModule.errors.txt | 4 ++-- ...arationsInsideNonExportedModule.errors.txt | 4 ++-- ...leImportStatementInParentModule.errors.txt | 4 ++-- ...leImportStatementInParentModule.errors.txt | 4 ++-- 18 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 2f96e4f734d..7173e299a39 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4066,10 +4066,10 @@ module ts { if (statement.kind === SyntaxKind.ExportAssignment) { // Export assignments are not allowed in an internal module - return grammarErrorOnFirstToken(statement, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + return grammarErrorOnNode(statement, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); } else if (statement.kind === SyntaxKind.ImportDeclaration && (statement).externalModuleName) { - return grammarErrorOnFirstToken(statement, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + return grammarErrorOnNode((statement).externalModuleName, Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); } } } diff --git a/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt index ba6aae1e361..e8e9de076ad 100644 --- a/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt +++ b/tests/baselines/reference/importDeclarationInModuleDeclaration1.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/importDeclarationInModuleDeclaration1.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/importDeclarationInModuleDeclaration1.ts(2,25): error TS1147: Import declarations in an internal module cannot reference an external module. ==== tests/cases/compiler/importDeclarationInModuleDeclaration1.ts (1 errors) ==== module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. } \ No newline at end of file diff --git a/tests/baselines/reference/importInsideModule.errors.txt b/tests/baselines/reference/importInsideModule.errors.txt index 4a7ab9d5b78..efe9b78125f 100644 --- a/tests/baselines/reference/importInsideModule.errors.txt +++ b/tests/baselines/reference/importInsideModule.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/importInsideModule_file2.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/importInsideModule_file2.ts(2,26): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/importInsideModule_file2.ts(2,26): error TS2307: Cannot find external module 'importInsideModule_file1'. ==== tests/cases/compiler/importInsideModule_file2.ts (2 errors) ==== export module myModule { import foo = require("importInsideModule_file1"); - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'importInsideModule_file1'. diff --git a/tests/baselines/reference/parserExportAssignment5.errors.txt b/tests/baselines/reference/parserExportAssignment5.errors.txt index 16c4188bc08..b463034f621 100644 --- a/tests/baselines/reference/parserExportAssignment5.errors.txt +++ b/tests/baselines/reference/parserExportAssignment5.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignm ==== tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment5.ts (2 errors) ==== module M { export = A; - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1063: An export assignment cannot be used in an internal module. ~~~~~~~~~~~ !!! error TS2304: Cannot find name 'A'. diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index 0e3ec1def23..14bdd82dd0c 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/privacyGloImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyGloImportParseErrors.ts(121,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(121,38): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(133,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. -tests/cases/compiler/privacyGloImportParseErrors.ts(146,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyGloImportParseErrors.ts(146,25): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyGloImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -75,7 +75,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); - ~~~~~~ + ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. @@ -143,7 +143,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import errorImport = require("glo_M2_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; @@ -178,7 +178,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(141,12): error TS2435: Ambie module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; diff --git a/tests/baselines/reference/privacyImportParseErrors.errors.txt b/tests/baselines/reference/privacyImportParseErrors.errors.txt index 4f54c660979..6ef7298aad2 100644 --- a/tests/baselines/reference/privacyImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyImportParseErrors.errors.txt @@ -1,11 +1,11 @@ -tests/cases/compiler/privacyImportParseErrors.ts(59,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(143,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(273,9): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(302,9): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(143,37): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(273,38): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(302,38): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(314,9): error TS1038: A 'declare' modifier cannot be used in an already ambient context. tests/cases/compiler/privacyImportParseErrors.ts(326,9): error TS1029: 'export' modifier must precede 'declare' modifier. -tests/cases/compiler/privacyImportParseErrors.ts(341,5): error TS1147: Import declarations in an internal module cannot reference an external module. -tests/cases/compiler/privacyImportParseErrors.ts(350,5): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(341,25): error TS1147: Import declarations in an internal module cannot reference an external module. +tests/cases/compiler/privacyImportParseErrors.ts(350,25): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyImportParseErrors.ts(22,27): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(30,20): error TS2435: Ambient external modules cannot be nested in other modules. tests/cases/compiler/privacyImportParseErrors.ts(59,37): error TS2307: Cannot find external module 'm1_M3_public'. @@ -102,7 +102,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m1_M3_public"); - ~~~~~~ + ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm1_M3_public'. @@ -196,7 +196,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient var m1_im2_private_v4_private = m1_im2_private.f1(); import m1_im3_private = require("m2_M3_public"); - ~~~~~~ + ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. ~~~~~~~~~~~~~~ !!! error TS2307: Cannot find external module 'm2_M3_public'. @@ -352,7 +352,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M2_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M1_public; @@ -391,7 +391,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import errorImport = require("glo_M4_private"); - ~~~~~~ + ~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. import nonerrorImport = glo_M3_private; @@ -452,7 +452,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient module m2 { import m3 = require("use_glo_M1_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; @@ -463,7 +463,7 @@ tests/cases/compiler/privacyImportParseErrors.ts(336,12): error TS2435: Ambient export module m3 { import m3 = require("use_glo_M1_public"); - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module m4 { var a = 10; diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt index 59cbb44a3c5..fd808bc1443 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt +++ b/tests/baselines/reference/project/intReferencingExtAndInt/amd/intReferencingExtAndInt.errors.txt @@ -1,10 +1,10 @@ -internal2.ts(2,2): error TS1147: Import declarations in an internal module cannot reference an external module. +internal2.ts(2,21): error TS1147: Import declarations in an internal module cannot reference an external module. ==== internal2.ts (1 errors) ==== module outer { import g = require("external2") - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var a = g.square(5); export var b = "foo"; diff --git a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt index 59cbb44a3c5..fd808bc1443 100644 --- a/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt +++ b/tests/baselines/reference/project/intReferencingExtAndInt/node/intReferencingExtAndInt.errors.txt @@ -1,10 +1,10 @@ -internal2.ts(2,2): error TS1147: Import declarations in an internal module cannot reference an external module. +internal2.ts(2,21): error TS1147: Import declarations in an internal module cannot reference an external module. ==== internal2.ts (1 errors) ==== module outer { import g = require("external2") - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var a = g.square(5); export var b = "foo"; diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt index 43f02e4fb9d..d8a57865c22 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/amd/nestedLocalModuleSimpleCase.errors.txt @@ -1,10 +1,10 @@ -test1.ts(2,2): error TS1147: Import declarations in an internal module cannot reference an external module. +test1.ts(2,23): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test1.ts (1 errors) ==== export module myModule { import foo = require("test2"); - ~~~~~~ + ~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); } diff --git a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt index 43f02e4fb9d..d8a57865c22 100644 --- a/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleSimpleCase/node/nestedLocalModuleSimpleCase.errors.txt @@ -1,10 +1,10 @@ -test1.ts(2,2): error TS1147: Import declarations in an internal module cannot reference an external module. +test1.ts(2,23): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test1.ts (1 errors) ==== export module myModule { import foo = require("test2"); - ~~~~~~ + ~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); } diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt index 35c81a722d1..9d1540829fc 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/amd/nestedLocalModuleWithRecursiveTypecheck.errors.txt @@ -1,11 +1,11 @@ -test1.ts(3,2): error TS1147: Import declarations in an internal module cannot reference an external module. +test1.ts(3,23): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test1.ts (1 errors) ==== module myModule { import foo = require("test2"); - ~~~~~~ + ~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); diff --git a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt index 35c81a722d1..9d1540829fc 100644 --- a/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt +++ b/tests/baselines/reference/project/nestedLocalModuleWithRecursiveTypecheck/node/nestedLocalModuleWithRecursiveTypecheck.errors.txt @@ -1,11 +1,11 @@ -test1.ts(3,2): error TS1147: Import declarations in an internal module cannot reference an external module. +test1.ts(3,23): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test1.ts (1 errors) ==== module myModule { import foo = require("test2"); - ~~~~~~ + ~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. //console.log(foo.$); diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index 09f7aed73fb..f15b4d3379b 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/amd/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,10 +1,10 @@ -testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +testGlo.ts(2,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt index 09f7aed73fb..f15b4d3379b 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideModule/node/privacyCheckOnImportedModuleDeclarationsInsideModule.errors.txt @@ -1,10 +1,10 @@ -testGlo.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +testGlo.ts(2,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== testGlo.ts (1 errors) ==== module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index ad44386dcd1..8589da5c54d 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/amd/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,4 +1,4 @@ -test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. +test.ts(5,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test.ts (1 errors) ==== @@ -7,7 +7,7 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot ref module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt index ad44386dcd1..8589da5c54d 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule/node/privacyCheckOnImportedModuleDeclarationsInsideNonExportedModule.errors.txt @@ -1,4 +1,4 @@ -test.ts(5,5): error TS1147: Import declarations in an internal module cannot reference an external module. +test.ts(5,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test.ts (1 errors) ==== @@ -7,7 +7,7 @@ test.ts(5,5): error TS1147: Import declarations in an internal module cannot ref module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. export var c1 = new mExported.me.class1; export function f1() { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index 0d281b950f4..c3c3a11c8b2 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/amd/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,10 +1,10 @@ -test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +test.ts(2,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M1 { diff --git a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt index 0d281b950f4..c3c3a11c8b2 100644 --- a/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt +++ b/tests/baselines/reference/project/privacyCheckOnImportedModuleImportStatementInParentModule/node/privacyCheckOnImportedModuleImportStatementInParentModule.errors.txt @@ -1,10 +1,10 @@ -test.ts(2,5): error TS1147: Import declarations in an internal module cannot reference an external module. +test.ts(2,39): error TS1147: Import declarations in an internal module cannot reference an external module. ==== test.ts (1 errors) ==== export module m2 { export import mExported = require("mExported"); - ~~~~~~ + ~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. module Internal_M1 { From d11660c81d915f21cd90c7c1c9f3d3518e2308da Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 15:13:34 -0800 Subject: [PATCH 119/178] Update LKG. --- bin/tsc.js | 2011 ++++++++++++++++++++---------------- bin/typescriptServices.js | 2046 +++++++++++++++++++++---------------- 2 files changed, 2251 insertions(+), 1806 deletions(-) diff --git a/bin/tsc.js b/bin/tsc.js index df74c76f504..7818785929e 100644 --- a/bin/tsc.js +++ b/bin/tsc.js @@ -907,7 +907,7 @@ var ts; Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: 1 /* Error */, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, Unterminated_template_literal: { code: 1160, category: 1 /* Error */, key: "Unterminated template literal." }, Unterminated_regular_expression_literal: { code: 1161, category: 1 /* Error */, key: "Unterminated regular expression literal." }, - A_object_member_cannot_be_declared_optional: { code: 1160, category: 1 /* Error */, key: "A object member cannot be declared optional." }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: 1 /* Error */, key: "An object member cannot be declared optional." }, Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, @@ -1981,11 +1981,11 @@ var ts; value = 0; } tokenValue = "" + value; - return 6 /* NumericLiteral */; + return token = 6 /* NumericLiteral */; } if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); - return 6 /* NumericLiteral */; + return token = 6 /* NumericLiteral */; } case 49 /* _1 */: case 50 /* _2 */: @@ -2436,7 +2436,7 @@ var ts; case 168 /* ForStatement */: return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement); case 169 /* ForInStatement */: - return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement); + return children(node.declarations) || child(node.variable) || child(node.expression) || child(node.statement); case 170 /* ContinueStatement */: case 171 /* BreakStatement */: return child(node.label); @@ -2856,6 +2856,17 @@ var ts; return false; } ts.isModifier = isModifier; + function modifierToFlag(token) { + switch (token) { + case 107 /* StaticKeyword */: return 128 /* Static */; + case 106 /* PublicKeyword */: return 16 /* Public */; + case 105 /* ProtectedKeyword */: return 64 /* Protected */; + case 104 /* PrivateKeyword */: return 32 /* Private */; + case 76 /* ExportKeyword */: return 1 /* Export */; + case 112 /* DeclareKeyword */: return 2 /* Ambient */; + } + return 0; + } function createSourceFile(filename, sourceText, languageVersion, version, isOpen) { if (isOpen === void 0) { isOpen = false; } var file; @@ -2869,84 +2880,6 @@ var ts; var lineStarts; var isInStrictMode = false; var lookAheadMode = 0 /* NotLookingAhead */; - var inAmbientContext = false; - var inFunctionBody = false; - var inSwitchStatement = 0 /* NotNested */; - var inIterationStatement = 0 /* NotNested */; - var labelledStatementInfo = (function () { - var functionBoundarySentinel; - var currentLabelSet; - var labelSetStack; - var isIterationStack; - function addLabel(label) { - if (!currentLabelSet) { - currentLabelSet = {}; - } - currentLabelSet[label.text] = true; - } - function pushCurrentLabelSet(isIterationStatement) { - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - ts.Debug.assert(currentLabelSet !== undefined); - labelSetStack.push(currentLabelSet); - isIterationStack.push(isIterationStatement); - currentLabelSet = undefined; - } - function pushFunctionBoundary() { - if (!functionBoundarySentinel) { - functionBoundarySentinel = {}; - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - } - ts.Debug.assert(currentLabelSet === undefined); - labelSetStack.push(functionBoundarySentinel); - isIterationStack.push(false); - } - function pop() { - ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); - labelSetStack.pop(); - isIterationStack.pop(); - } - function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) { - if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) { - return 1 /* Nested */; - } - if (!labelSetStack) { - return 0 /* NotNested */; - } - var crossedFunctionBoundary = false; - for (var i = labelSetStack.length - 1; i >= 0; i--) { - var labelSet = labelSetStack[i]; - if (labelSet === functionBoundarySentinel) { - if (stopAtFunctionBoundary) { - break; - } - else { - crossedFunctionBoundary = true; - continue; - } - } - if (requireIterationStatement && isIterationStack[i] === false) { - continue; - } - if (ts.hasProperty(labelSet, label.text)) { - return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */; - } - } - return 0 /* NotNested */; - } - return { - addLabel: addLabel, - pushCurrentLabelSet: pushCurrentLabelSet, - pushFunctionBoundary: pushFunctionBoundary, - pop: pop, - nodeIsNestedInLabel: nodeIsNestedInLabel - }; - })(); function getLineStarts() { return lineStarts || (lineStarts = ts.computeLineStarts(sourceText)); } @@ -2961,25 +2894,12 @@ var ts; var length = scanner.getTextPos() - start; errorAtPos(start, length, message, arg0, arg1, arg2); } - function grammarErrorOnNode(node, message, arg0, arg1, arg2) { - var span = getErrorSpanForNode(node); - var start = span.end > span.pos ? ts.skipTrivia(file.text, span.pos) : span.pos; - var length = span.end - start; - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function reportInvalidUseInStrictMode(node) { - var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); - grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); - } - function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } function errorAtPos(start, length, message, arg0, arg1, arg2) { - var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1; + var lastErrorPos = file.parseDiagnostics.length ? file.parseDiagnostics[file.parseDiagnostics.length - 1].start : -1; if (start !== lastErrorPos) { var diagnostic = ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); diagnostic.isParseError = true; - file.syntacticErrors.push(diagnostic); + file.parseDiagnostics.push(diagnostic); } if (lookAheadMode === 1 /* NoErrorYet */) { lookAheadMode = 2 /* Error */; @@ -3016,7 +2936,7 @@ var ts; } function lookAheadHelper(callback, alwaysResetState) { var saveToken = token; - var saveSyntacticErrorsLength = file.syntacticErrors.length; + var saveSyntacticErrorsLength = file.parseDiagnostics.length; var saveLookAheadMode = lookAheadMode; lookAheadMode = 1 /* NoErrorYet */; var result = callback(); @@ -3027,7 +2947,7 @@ var ts; lookAheadMode = saveLookAheadMode; if (!result || alwaysResetState) { token = saveToken; - file.syntacticErrors.length = saveSyntacticErrorsLength; + file.parseDiagnostics.length = saveSyntacticErrorsLength; } return result; } @@ -3079,18 +2999,22 @@ var ts; function createNode(kind, pos) { nodeCount++; var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))(); - if (!(pos >= 0)) + if (!(pos >= 0)) { pos = scanner.getStartPos(); + } node.pos = pos; node.end = pos; return node; } function finishNode(node) { node.end = scanner.getStartPos(); + if (isInStrictMode) { + node.flags |= 8192 /* ParsedInStrictMode */; + } return node; } - function createMissingNode() { - return createNode(120 /* Missing */); + function createMissingNode(pos) { + return createNode(120 /* Missing */, pos); } function internIdentifier(text) { text = escapeIdentifier(text); @@ -3259,12 +3183,11 @@ var ts; parsingContext = saveParsingContext; return result; } - function parseDelimitedList(kind, parseElement, allowTrailingComma) { + function parseDelimitedList(kind, parseElement) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var result = []; result.pos = getNodePos(); - var errorCountBeforeParsingList = file.syntacticErrors.length; var commaStart = -1; while (true) { if (isListElement(kind, false)) { @@ -3291,11 +3214,6 @@ var ts; } } if (commaStart >= 0) { - if (!allowTrailingComma) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); - } - } result.hasTrailingComma = true; } result.end = getNodeEnd(); @@ -3317,7 +3235,7 @@ var ts; } function parseBracketedList(kind, parseElement, startToken, endToken) { if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, false); + var result = parseDelimitedList(kind, parseElement); parseExpected(endToken); return result; } @@ -3375,12 +3293,7 @@ var ts; nextToken(); finishNode(node); if (node.kind === 6 /* NumericLiteral */ && sourceText.charCodeAt(tokenPos) === 48 /* _0 */ && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { - if (isInStrictMode) { - grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); - } - else if (languageVersion >= 1 /* ES5 */) { - grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); - } + node.flags |= 16384 /* OctalLiteral */; } return node; } @@ -3413,22 +3326,14 @@ var ts; node.constraint = parseType(); } else { - var expr = parseUnaryExpression(); - grammarErrorOnNode(expr, ts.Diagnostics.Type_expected); + node.expression = parseUnaryExpression(); } } return finishNode(node); } function parseTypeParameters() { if (token === 23 /* LessThanToken */) { - var pos = getNodePos(); - var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 23 /* LessThanToken */, 24 /* GreaterThanToken */); - if (!result.length) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty); - } - return result; + return parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 23 /* LessThanToken */, 24 /* GreaterThanToken */); } } function parseParameterType() { @@ -3437,10 +3342,17 @@ var ts; function isStartOfParameter() { return token === 20 /* DotDotDotToken */ || isIdentifier() || isModifier(token); } + function setModifiers(node, modifiers) { + if (modifiers) { + node.flags |= modifiers.flags; + node.modifiers = modifiers; + } + } function parseParameter(flags) { if (flags === void 0) { flags = 0; } var node = createNode(123 /* Parameter */); - node.flags |= parseAndCheckModifiers(3 /* Parameters */); + var modifiers = parseModifiers(3 /* Parameters */); + setModifiers(node, modifiers); if (parseOptional(20 /* DotDotDotToken */)) { node.flags |= 8 /* Rest */; } @@ -3461,7 +3373,6 @@ var ts; } var typeParameters = parseTypeParameters(); var parameters = parseParameterList(15 /* OpenParenToken */, 16 /* CloseParenToken */); - checkParameterList(parameters); var type; if (returnTokenRequired) { parseExpected(returnToken); @@ -3479,44 +3390,6 @@ var ts; function parseParameterList(startDelimiter, endDelimiter) { return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter); } - function checkParameterList(parameters) { - var seenOptionalParameter = false; - var parameterCount = parameters.length; - for (var i = 0; i < parameterCount; i++) { - var parameter = parameters[i]; - if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { - reportInvalidUseInStrictMode(parameter.name); - return; - } - else if (parameter.flags & 8 /* Rest */) { - if (i !== (parameterCount - 1)) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return; - } - if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); - return; - } - if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return; - } - } - else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { - seenOptionalParameter = true; - if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return; - } - } - else { - if (seenOptionalParameter) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return; - } - } - } - } function parseSignatureMember(kind, returnToken) { var node = createNode(kind); var sig = parseSignature(kind, returnToken, false); @@ -3526,60 +3399,14 @@ var ts; parseSemicolon(); return finishNode(node); } - function parseIndexSignatureMember() { - var node = createNode(131 /* IndexSignature */); - var errorCountBeforeIndexSignature = file.syntacticErrors.length; - var indexerStart = scanner.getTokenPos(); + function parseIndexSignatureMember(modifiers, pos) { + var node = createNode(131 /* IndexSignature */, pos); + setModifiers(node, modifiers); node.parameters = parseParameterList(17 /* OpenBracketToken */, 18 /* CloseBracketToken */); - var indexerLength = scanner.getStartPos() - indexerStart; node.type = parseTypeAnnotation(); parseSemicolon(); - if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { - checkIndexSignature(node, indexerStart, indexerLength); - } return finishNode(node); } - function checkIndexSignature(node, indexerStart, indexerLength) { - var parameter = node.parameters[0]; - if (node.parameters.length !== 1) { - var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter; - if (parameter) { - grammarErrorOnNode(parameter.name, arityDiagnostic); - } - else { - grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); - } - return; - } - else if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); - return; - } - else if (parameter.flags & 243 /* Modifier */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); - return; - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); - return; - } - else if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); - return; - } - else if (!parameter.type) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); - return; - } - else if (parameter.type.kind !== 118 /* StringKeyword */ && parameter.type.kind !== 116 /* NumberKeyword */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); - return; - } - else if (!node.type) { - grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); - return; - } - } function parsePropertyOrMethod() { var node = createNode(0 /* Unknown */); node.name = parsePropertyName(); @@ -3616,7 +3443,7 @@ var ts; case 23 /* LessThanToken */: return parseSignatureMember(129 /* CallSignature */, 50 /* ColonToken */); case 17 /* OpenBracketToken */: - return parseIndexSignatureMember(); + return parseIndexSignatureMember(undefined); case 86 /* NewKeyword */: if (lookAhead(function () { return nextToken() === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */; })) { return parseSignatureMember(130 /* ConstructSignature */, 50 /* ColonToken */); @@ -3643,12 +3470,7 @@ var ts; } function parseTupleType() { var node = createNode(138 /* TupleType */); - var startTokenPos = scanner.getTokenPos(); - var startErrorCount = file.syntacticErrors.length; node.elementTypes = parseBracketedList(16 /* TupleElementTypes */, parseType, 17 /* OpenBracketToken */, 18 /* CloseBracketToken */); - if (!node.elementTypes.length && file.syntacticErrors.length === startErrorCount) { - grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); - } return finishNode(node); } function parseParenType() { @@ -3838,45 +3660,13 @@ var ts; if (expr.kind === 63 /* Identifier */ && token === 31 /* EqualsGreaterThanToken */) { return parseSimpleArrowFunctionExpression(expr); } - if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } + if (isLeftHandSideExpression(expr) && isAssignmentOperator(token)) { var operator = token; nextToken(); return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); } return expr; } - function isLeftHandSideExpression(expr) { - if (expr) { - switch (expr.kind) { - case 145 /* PropertyAccess */: - case 146 /* IndexedAccess */: - case 148 /* NewExpression */: - case 147 /* CallExpression */: - case 149 /* TaggedTemplateExpression */: - case 141 /* ArrayLiteral */: - case 151 /* ParenExpression */: - case 142 /* ObjectLiteral */: - case 152 /* FunctionExpression */: - case 63 /* Identifier */: - case 120 /* Missing */: - case 8 /* RegularExpressionLiteral */: - case 6 /* NumericLiteral */: - case 7 /* StringLiteral */: - case 9 /* NoSubstitutionTemplateLiteral */: - case 158 /* TemplateExpression */: - case 78 /* FalseKeyword */: - case 87 /* NullKeyword */: - case 91 /* ThisKeyword */: - case 93 /* TrueKeyword */: - case 89 /* SuperKeyword */: - return true; - } - } - return false; - } function parseSimpleArrowFunctionExpression(identifier) { ts.Debug.assert(token === 31 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(31 /* EqualsGreaterThanToken */); @@ -3968,19 +3758,16 @@ var ts; function parseArrowExpressionTail(pos, sig, noIn) { var body; if (token === 13 /* OpenBraceToken */) { - body = parseBody(false); + body = parseFunctionBlock(false); } else if (isStatement(true) && !isStartOfExpressionStatement() && token !== 81 /* FunctionKeyword */) { - body = parseBody(true); + body = parseFunctionBlock(true); } else { body = parseAssignmentExpression(noIn); } return makeFunctionExpression(153 /* ArrowFunction */, pos, undefined, sig, body); } - function isAssignmentOperator() { - return token >= 51 /* FirstAssignment */ && token <= 62 /* LastAssignment */; - } function parseConditionalExpression(noIn) { var expr = parseBinaryExpression(noIn); while (parseOptional(49 /* QuestionToken */)) { @@ -4068,16 +3855,7 @@ var ts; case 38 /* MinusMinusToken */: var operator = token; nextToken(); - var operand = parseUnaryExpression(); - if (isInStrictMode) { - if ((operator === 37 /* PlusPlusToken */ || operator === 38 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { - reportInvalidUseInStrictMode(operand); - } - else if (operator === 72 /* DeleteKeyword */ && operand.kind === 63 /* Identifier */) { - grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); - } - } - return makeUnaryExpression(154 /* PrefixOperator */, pos, operator, operand); + return makeUnaryExpression(154 /* PrefixOperator */, pos, operator, parseUnaryExpression()); case 23 /* LessThanToken */: return parseTypeAssertion(); } @@ -4089,9 +3867,6 @@ var ts; var expr = parseCallAndAccess(primaryExpression, false); ts.Debug.assert(isLeftHandSideExpression(expr)); if ((token === 37 /* PlusPlusToken */ || token === 38 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } var operator = token; nextToken(); expr = makeUnaryExpression(155 /* PostfixOperator */, expr.pos, operator, expr); @@ -4117,15 +3892,19 @@ var ts; var dotOrBracketStart = scanner.getTokenPos(); if (parseOptional(19 /* DotToken */)) { var propertyAccess = createNode(145 /* PropertyAccess */, expr.pos); - if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord() && lookAhead(function () { return scanner.isReservedWord(); })) { - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.Identifier_expected); - var id = createMissingNode(); - } - else { - var id = parseIdentifierName(); + var id; + if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) { + var matchesPattern = lookAhead(function () { + nextToken(); + return !scanner.hasPrecedingLineBreak() && (scanner.isIdentifier() || scanner.isReservedWord); + }); + if (matchesPattern) { + errorAtPos(dotOrBracketStart + 1, 0, ts.Diagnostics.Identifier_expected); + id = createMissingNode(); + } } propertyAccess.left = expr; - propertyAccess.right = id; + propertyAccess.right = id || parseIdentifierName(); expr = finishNode(propertyAccess); continue; } @@ -4134,7 +3913,6 @@ var ts; indexedAccess.object = expr; if (inNewExpression && parseOptional(18 /* CloseBracketToken */)) { indexedAccess.index = createMissingNode(); - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } else { indexedAccess.index = parseExpression(); @@ -4157,7 +3935,7 @@ var ts; else { parseExpected(15 /* OpenParenToken */); } - callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression); parseExpected(16 /* CloseParenToken */); expr = finishNode(callExpr); continue; @@ -4167,9 +3945,6 @@ var ts; tagExpression.tag = expr; tagExpression.template = token === 9 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() : parseTemplateExpression(); expr = finishNode(tagExpression); - if (languageVersion < 2 /* ES6 */) { - grammarErrorOnNode(expr, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); - } continue; } return expr; @@ -4181,19 +3956,10 @@ var ts; return result; } function parseTypeArguments() { - var typeArgumentListStart = scanner.getTokenPos(); - var errorCountBeforeTypeParameterList = file.syntacticErrors.length; - var result = parseBracketedList(15 /* TypeArguments */, parseSingleTypeArgument, 23 /* LessThanToken */, 24 /* GreaterThanToken */); - if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { - grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty); - } - return result; + return parseBracketedList(15 /* TypeArguments */, parseSingleTypeArgument, 23 /* LessThanToken */, 24 /* GreaterThanToken */); } function parseSingleTypeArgument() { if (token === 22 /* CommaToken */) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, ts.Diagnostics.Type_expected); return createNode(120 /* Missing */); } return parseType(); @@ -4243,34 +4009,27 @@ var ts; parseExpected(16 /* CloseParenToken */); return finishNode(node); } - function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic) { - if (token === 22 /* CommaToken */) { - if (omittedExpressionDiagnostic) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic); - } - return createNode(160 /* OmittedExpression */); - } - return parseAssignmentExpression(); + function parseAssignmentExpressionOrOmittedExpression() { + return token === 22 /* CommaToken */ ? createNode(160 /* OmittedExpression */) : parseAssignmentExpression(); } function parseArrayLiteralElement() { - return parseAssignmentExpressionOrOmittedExpression(undefined); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArgumentExpression() { - return parseAssignmentExpressionOrOmittedExpression(ts.Diagnostics.Argument_expression_expected); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArrayLiteral() { var node = createNode(141 /* ArrayLiteral */); parseExpected(17 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) node.flags |= 256 /* MultiLine */; - node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, true); + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement); parseExpected(18 /* CloseBracketToken */); return finishNode(node); } function parsePropertyAssignment() { var nodePos = scanner.getStartPos(); + var tokenIsIdentifier = isIdentifier(); var nameToken = token; var propertyName = parsePropertyName(); var node; @@ -4278,16 +4037,16 @@ var ts; node = createNode(143 /* PropertyAssignment */, nodePos); node.name = propertyName; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); - var body = parseBody(false); + var body = parseFunctionBlock(false); node.initializer = makeFunctionExpression(152 /* FunctionExpression */, node.pos, undefined, sig, body); return finishNode(node); } + var flags = 0; if (token === 49 /* QuestionToken */) { - var questionStart = scanner.getTokenPos(); - grammarErrorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_object_member_cannot_be_declared_optional); + flags |= 4 /* QuestionMark */; nextToken(); } - if (token !== 50 /* ColonToken */ && nameToken === 63 /* Identifier */) { + if ((token === 22 /* CommaToken */ || token === 14 /* CloseBraceToken */) && tokenIsIdentifier) { node = createNode(144 /* ShorthandPropertyAssignment */, nodePos); node.name = propertyName; } @@ -4297,6 +4056,7 @@ var ts; parseExpected(50 /* ColonToken */); node.initializer = parseAssignmentExpression(false); } + node.flags = flags; return finishNode(node); } function parseObjectLiteralMember() { @@ -4304,7 +4064,7 @@ var ts; var initialToken = token; if (parseContextualModifier(113 /* GetKeyword */) || parseContextualModifier(117 /* SetKeyword */)) { var kind = initialToken === 113 /* GetKeyword */ ? 127 /* GetAccessor */ : 128 /* SetAccessor */; - return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); + return parseMemberAccessorDeclaration(kind, initialPos, undefined); } return parsePropertyAssignment(); } @@ -4314,57 +4074,8 @@ var ts; if (scanner.hasPrecedingLineBreak()) { node.flags |= 256 /* MultiLine */; } - node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, true); + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember); parseExpected(14 /* CloseBraceToken */); - var seen = {}; - var Property = 1; - var GetAccessor = 2; - var SetAccesor = 4; - var GetOrSetAccessor = GetAccessor | SetAccesor; - ts.forEach(node.properties, function (p) { - if (p.kind === 160 /* OmittedExpression */) { - return; - } - var name = p.name; - var currentKind; - if (p.kind === 143 /* PropertyAssignment */) { - currentKind = Property; - } - else if (p.kind === 144 /* ShorthandPropertyAssignment */) { - currentKind = Property; - } - else if (p.kind === 127 /* GetAccessor */) { - currentKind = GetAccessor; - } - else if (p.kind === 128 /* SetAccessor */) { - currentKind = SetAccesor; - } - else { - ts.Debug.fail("Unexpected syntax kind:" + p.kind); - } - if (!ts.hasProperty(seen, name.text)) { - seen[name.text] = currentKind; - } - else { - var existingKind = seen[name.text]; - if (currentKind === Property && existingKind === Property) { - if (isInStrictMode) { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); - } - } - else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { - if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { - seen[name.text] = currentKind | existingKind; - } - else { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); - } - } - else { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); - } - } - }); return finishNode(node); } function parseFunctionExpression() { @@ -4372,10 +4083,7 @@ var ts; parseExpected(81 /* FunctionKeyword */); var name = isIdentifier() ? parseIdentifier() : undefined; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); - var body = parseBody(false); - if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { - reportInvalidUseInStrictMode(name); - } + var body = parseFunctionBlock(false); return makeFunctionExpression(152 /* FunctionExpression */, pos, name, sig, body); } function makeFunctionExpression(kind, pos, name, sig, body) { @@ -4392,18 +4100,15 @@ var ts; parseExpected(86 /* NewKeyword */); node.func = parseCallAndAccess(parsePrimaryExpression(), true); if (parseOptional(15 /* OpenParenToken */) || token === 23 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression); parseExpected(16 /* CloseParenToken */); } return finishNode(node); } - function parseStatementAllowingLetDeclaration() { - return parseStatement(true); - } function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) { var node = createNode(161 /* Block */); if (parseExpected(13 /* OpenBraceToken */) || ignoreMissingOpenBrace) { - node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatementAllowingLetDeclaration); + node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); parseExpected(14 /* CloseBraceToken */); } else { @@ -4411,24 +4116,9 @@ var ts; } return finishNode(node); } - function parseBody(ignoreMissingOpenBrace) { - var saveInFunctionBody = inFunctionBody; - var saveInSwitchStatement = inSwitchStatement; - var saveInIterationStatement = inIterationStatement; - inFunctionBody = true; - if (inSwitchStatement === 1 /* Nested */) { - inSwitchStatement = 2 /* CrossingFunctionBoundary */; - } - if (inIterationStatement === 1 /* Nested */) { - inIterationStatement = 2 /* CrossingFunctionBoundary */; - } - labelledStatementInfo.pushFunctionBoundary(); + function parseFunctionBlock(ignoreMissingOpenBrace) { var block = parseBlock(ignoreMissingOpenBrace, true); block.kind = 186 /* FunctionBlock */; - labelledStatementInfo.pop(); - inFunctionBody = saveInFunctionBody; - inSwitchStatement = saveInSwitchStatement; - inIterationStatement = saveInIterationStatement; return block; } function parseEmptyStatement() { @@ -4442,17 +4132,14 @@ var ts; parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - node.thenStatement = parseStatement(false); - node.elseStatement = parseOptional(74 /* ElseKeyword */) ? parseStatement(false) : undefined; + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(74 /* ElseKeyword */) ? parseStatement() : undefined; return finishNode(node); } function parseDoStatement() { var node = createNode(166 /* DoStatement */); parseExpected(73 /* DoKeyword */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + node.statement = parseStatement(); parseExpected(98 /* WhileKeyword */); parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); @@ -4466,10 +4153,7 @@ var ts; parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + node.statement = parseStatement(); return finishNode(node); } function parseForOrForInStatement() { @@ -4479,27 +4163,12 @@ var ts; if (token !== 21 /* SemicolonToken */) { if (parseOptional(96 /* VarKeyword */)) { var declarations = parseVariableDeclarationList(0, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } } else if (parseOptional(102 /* LetKeyword */)) { var declarations = parseVariableDeclarationList(2048 /* Let */, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else if (parseOptional(68 /* ConstKeyword */)) { var declarations = parseVariableDeclarationList(4096 /* Const */, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else { var varOrInit = parseExpression(true); @@ -4509,10 +4178,7 @@ var ts; if (parseOptional(84 /* InKeyword */)) { var forInStatement = createNode(169 /* ForInStatement */, pos); if (declarations) { - if (declarations.length > 1) { - error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - } - forInStatement.declaration = declarations[0]; + forInStatement.declarations = declarations; } else { forInStatement.variable = varOrInit; @@ -4523,10 +4189,12 @@ var ts; } else { var forStatement = createNode(168 /* ForStatement */, pos); - if (declarations) + if (declarations) { forStatement.declarations = declarations; - if (varOrInit) + } + if (varOrInit) { forStatement.initializer = varOrInit; + } parseExpected(21 /* SemicolonToken */); if (token !== 21 /* SemicolonToken */ && token !== 16 /* CloseParenToken */) { forStatement.condition = parseExpression(); @@ -4538,116 +4206,51 @@ var ts; parseExpected(16 /* CloseParenToken */); forOrForInStatement = forStatement; } - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - forOrForInStatement.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + forOrForInStatement.statement = parseStatement(); return finishNode(forOrForInStatement); } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - var errorCountBeforeStatement = file.syntacticErrors.length; parseExpected(kind === 171 /* BreakStatement */ ? 64 /* BreakKeyword */ : 69 /* ContinueKeyword */); - if (!canParseSemicolon()) + if (!canParseSemicolon()) { node.label = parseIdentifier(); + } parseSemicolon(); - finishNode(node); - if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { - if (node.label) { - checkBreakOrContinueStatementWithLabel(node); - } - else { - checkBareBreakOrContinueStatement(node); - } - } - return node; - } - function checkBareBreakOrContinueStatement(node) { - if (node.kind === 171 /* BreakStatement */) { - if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); - return; - } - } - else if (node.kind === 170 /* ContinueStatement */) { - if (inIterationStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); - return; - } - } - else { - ts.Debug.fail("checkAnonymousBreakOrContinueStatement"); - } - ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */); - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - } - function checkBreakOrContinueStatementWithLabel(node) { - var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 170 /* ContinueStatement */, false); - if (nodeIsNestedInLabel === 1 /* Nested */) { - return; - } - if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) { - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - return; - } - if (node.kind === 170 /* ContinueStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); - } - else if (node.kind === 171 /* BreakStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); - } - else { - ts.Debug.fail("checkBreakOrContinueStatementWithLabel"); - } + return finishNode(node); } function parseReturnStatement() { var node = createNode(172 /* ReturnStatement */); - var errorCountBeforeReturnStatement = file.syntacticErrors.length; var returnTokenStart = scanner.getTokenPos(); var returnTokenLength = scanner.getTextPos() - returnTokenStart; parseExpected(88 /* ReturnKeyword */); - if (!canParseSemicolon()) + if (!canParseSemicolon()) { node.expression = parseExpression(); - parseSemicolon(); - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { - grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); } + parseSemicolon(); return finishNode(node); } function parseWithStatement() { var node = createNode(173 /* WithStatement */); - var startPos = scanner.getTokenPos(); parseExpected(99 /* WithKeyword */); - var endPos = scanner.getStartPos(); parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - node.statement = parseStatement(false); - node = finishNode(node); - if (isInStrictMode) { - grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); - } - return node; + node.statement = parseStatement(); + return finishNode(node); } function parseCaseClause() { var node = createNode(175 /* CaseClause */); parseExpected(65 /* CaseKeyword */); node.expression = parseExpression(); parseExpected(50 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); return finishNode(node); } function parseDefaultClause() { var node = createNode(176 /* DefaultClause */); parseExpected(71 /* DefaultKeyword */); parseExpected(50 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); return finishNode(node); } function parseCaseOrDefaultClause() { @@ -4660,18 +4263,8 @@ var ts; node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); parseExpected(13 /* OpenBraceToken */); - var saveInSwitchStatement = inSwitchStatement; - inSwitchStatement = 1 /* Nested */; node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); - inSwitchStatement = saveInSwitchStatement; parseExpected(14 /* CloseBraceToken */); - var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 176 /* DefaultClause */; }); - for (var i = 1, n = defaultClauses.length; i < n; i++) { - var clause = defaultClauses[i]; - var start = ts.skipTrivia(file.text, clause.pos); - var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; - grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); - } return finishNode(node); } function parseThrowStatement() { @@ -4711,20 +4304,13 @@ var ts; parseExpected(66 /* CatchKeyword */); parseExpected(15 /* OpenParenToken */); var variable = parseIdentifier(); - var typeAnnotationColonStart = scanner.getTokenPos(); - var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; var typeAnnotation = parseTypeAnnotation(); parseExpected(16 /* CloseParenToken */); var result = parseBlock(false, false); result.kind = 181 /* CatchBlock */; result.pos = pos; result.variable = variable; - if (typeAnnotation) { - errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { - reportInvalidUseInStrictMode(variable); - } + result.type = typeAnnotation; return result; } function parseDebuggerStatement() { @@ -4736,24 +4322,14 @@ var ts; function isIterationStatementStart() { return token === 98 /* WhileKeyword */ || token === 73 /* DoKeyword */ || token === 80 /* ForKeyword */; } - function parseStatementWithLabelSet(allowLetAndConstDeclarations) { - labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); - var statement = parseStatement(allowLetAndConstDeclarations); - labelledStatementInfo.pop(); - return statement; - } function isLabel() { return isIdentifier() && lookAhead(function () { return nextToken() === 50 /* ColonToken */; }); } - function parseLabeledStatement(allowLetAndConstDeclarations) { + function parseLabeledStatement() { var node = createNode(177 /* LabeledStatement */); node.label = parseIdentifier(); parseExpected(50 /* ColonToken */); - if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { - grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); - } - labelledStatementInfo.addLabel(node.label); - node.statement = isLabel() ? parseLabeledStatement(allowLetAndConstDeclarations) : parseStatementWithLabelSet(allowLetAndConstDeclarations); + node.statement = isLabel() ? parseLabeledStatement() : parseStatement(); return finishNode(node); } function parseExpressionStatement() { @@ -4807,14 +4383,14 @@ var ts; return isStartOfExpression(); } } - function parseStatement(allowLetAndConstDeclarations) { + function parseStatement() { switch (token) { case 13 /* OpenBraceToken */: return parseBlock(false, false); case 96 /* VarKeyword */: case 102 /* LetKeyword */: case 68 /* ConstKeyword */: - return parseVariableStatement(allowLetAndConstDeclarations); + return parseVariableStatement(); case 81 /* FunctionKeyword */: return parseFunctionDeclaration(); case 21 /* SemicolonToken */: @@ -4846,22 +4422,12 @@ var ts; case 70 /* DebuggerKeyword */: return parseDebuggerStatement(); default: - if (isLabel()) { - return parseLabeledStatement(allowLetAndConstDeclarations); - } - return parseExpressionStatement(); + return isLabel() ? parseLabeledStatement() : parseExpressionStatement(); } } - function parseAndCheckFunctionBody(isConstructor) { - var initialPosition = scanner.getTokenPos(); - var errorCountBeforeBody = file.syntacticErrors.length; + function parseFunctionBlockOrSemicolon() { if (token === 13 /* OpenBraceToken */) { - var body = parseBody(false); - if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { - var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; - grammarErrorAtPos(initialPosition, 1, diagnostic); - } - return body; + return parseFunctionBlock(false); } if (canParseSemicolon()) { parseSemicolon(); @@ -4872,64 +4438,34 @@ var ts; function parseVariableDeclaration(flags, noIn) { var node = createNode(184 /* VariableDeclaration */); node.flags = flags; - var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); var initializerStart = scanner.getTokenPos(); var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; node.initializer = parseInitializer(false, noIn); - if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } - if (!inAmbientContext && !node.initializer && flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - } return finishNode(node); } function parseVariableDeclarationList(flags, noIn) { - return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, false); + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }); } - function parseVariableStatement(allowLetAndConstDeclarations, pos, flags) { + function parseVariableStatement(pos, flags) { var node = createNode(162 /* VariableStatement */, pos); - if (flags) + if (flags) { node.flags = flags; - var errorCountBeforeVarStatement = file.syntacticErrors.length; + } if (token === 102 /* LetKeyword */) { node.flags |= 2048 /* Let */; } else if (token === 68 /* ConstKeyword */) { node.flags |= 4096 /* Const */; } - else if (token !== 96 /* VarKeyword */) { - error(ts.Diagnostics.var_let_or_const_expected); + else { + ts.Debug.assert(token === 96 /* VarKeyword */); } nextToken(); node.declarations = parseVariableDeclarationList(node.flags, false); parseSemicolon(); - finishNode(node); - if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { - grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - if (node.flags & 2048 /* Let */) { - grammarErrorOnNode(node, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - else if (node.flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - } - else if (!allowLetAndConstDeclarations) { - if (node.flags & 2048 /* Let */) { - grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block); - } - else if (node.flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block); - } - } - return node; + return finishNode(node); } function parseFunctionDeclaration(pos, flags) { var node = createNode(185 /* FunctionDeclaration */, pos); @@ -4941,119 +4477,65 @@ var ts; node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(false); - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name) && node.name.kind === 63 /* Identifier */) { - reportInvalidUseInStrictMode(node.name); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } - function parseConstructorDeclaration(pos, flags) { + function parseConstructorDeclaration(pos, modifiers) { var node = createNode(126 /* Constructor */, pos); - node.flags = flags; + setModifiers(node, modifiers); parseExpected(111 /* ConstructorKeyword */); var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(true); - if (node.typeParameters) { - grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); - } - if (node.type) { - grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } - function parsePropertyMemberDeclaration(pos, flags) { - var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; + function parsePropertyMemberDeclaration(pos, modifiers) { var name = parsePropertyName(); + var flags = modifiers ? modifiers.flags : 0; var questionStart = scanner.getTokenPos(); if (parseOptional(49 /* QuestionToken */)) { - errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional); + flags |= 4 /* QuestionMark */; } if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) { var method = createNode(125 /* Method */, pos); - method.flags = flags; + setModifiers(method, modifiers); + if (flags) { + method.flags = flags; + } method.name = name; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); method.typeParameters = sig.typeParameters; method.parameters = sig.parameters; method.type = sig.type; - method.body = parseAndCheckFunctionBody(false); + method.body = parseFunctionBlockOrSemicolon(); return finishNode(method); } else { var property = createNode(124 /* Property */, pos); - property.flags = flags; + setModifiers(property, modifiers); + if (flags) { + property.flags = flags; + } property.name = name; property.type = parseTypeAnnotation(); var initializerStart = scanner.getTokenPos(); var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; property.initializer = parseInitializer(false); parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } return finishNode(property); } } - function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) { - var errorCountBeforeAccessor = file.syntacticErrors.length; - var accessor = parseMemberAccessorDeclaration(kind, pos, flags); - if (errorCountBeforeAccessor === file.syntacticErrors.length) { - if (languageVersion < 1 /* ES5 */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); - } - else if (inAmbientContext) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); - } - else if (accessor.typeParameters) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); - } - else if (kind === 127 /* GetAccessor */ && accessor.parameters.length) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); - } - else if (kind === 128 /* SetAccessor */) { - if (accessor.type) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); - } - else if (accessor.parameters.length !== 1) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } - else { - var parameter = accessor.parameters[0]; - if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); - } - else if (parameter.flags & 243 /* Modifier */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); - } - else if (parameter.initializer) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); - } - } - } - } - return accessor; - } - function parseMemberAccessorDeclaration(kind, pos, flags) { + function parseMemberAccessorDeclaration(kind, pos, modifiers) { var node = createNode(kind, pos); - node.flags = flags; + setModifiers(node, modifiers); node.name = parsePropertyName(); var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - if (inAmbientContext && canParseSemicolon()) { - parseSemicolon(); - node.body = createMissingNode(); - } - else { - node.body = parseBody(false); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } function isClassMemberStart() { @@ -5086,177 +4568,55 @@ var ts; } return false; } - function parseAndCheckModifiers(context) { + function parseModifiers(context) { var flags = 0; - var lastStaticModifierStart; - var lastStaticModifierLength; - var lastDeclareModifierStart; - var lastDeclareModifierLength; - var lastPrivateModifierStart; - var lastPrivateModifierLength; - var lastProtectedModifierStart; - var lastProtectedModifierLength; + var modifiers; while (true) { var modifierStart = scanner.getTokenPos(); var modifierToken = token; if (!parseAnyContextualModifier()) break; - var modifierLength = scanner.getStartPos() - modifierStart; - switch (modifierToken) { - case 106 /* PublicKeyword */: - if (flags & 112 /* AccessibilityModifier */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); - } - flags |= 16 /* Public */; - break; - case 104 /* PrivateKeyword */: - if (flags & 112 /* AccessibilityModifier */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); - } - lastPrivateModifierStart = modifierStart; - lastPrivateModifierLength = modifierLength; - flags |= 32 /* Private */; - break; - case 105 /* ProtectedKeyword */: - if (flags & 16 /* Public */ || flags & 32 /* Private */ || flags & 64 /* Protected */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "protected", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "protected"); - } - lastProtectedModifierStart = modifierStart; - lastProtectedModifierLength = modifierLength; - flags |= 64 /* Protected */; - break; - case 107 /* StaticKeyword */: - if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); - } - lastStaticModifierStart = modifierStart; - lastStaticModifierLength = modifierLength; - flags |= 128 /* Static */; - break; - case 76 /* ExportKeyword */: - if (flags & 1 /* Export */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export"); - } - else if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); - } - flags |= 1 /* Export */; - break; - case 112 /* DeclareKeyword */: - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); - } - else if (inAmbientContext && context === 1 /* ModuleElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); - } - lastDeclareModifierStart = modifierStart; - lastDeclareModifierLength = modifierLength; - flags |= 2 /* Ambient */; - break; + if (!modifiers) { + modifiers = []; } + flags |= modifierToFlag(modifierToken); + modifiers.push(finishNode(createNode(modifierToken, modifierStart))); } - if (token === 111 /* ConstructorKeyword */ && flags & 128 /* Static */) { - grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + if (modifiers) { + modifiers.flags = flags; } - else if (token === 111 /* ConstructorKeyword */ && flags & 32 /* Private */) { - grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); - } - else if (token === 111 /* ConstructorKeyword */ && flags & 64 /* Protected */) { - grammarErrorAtPos(lastProtectedModifierStart, lastProtectedModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); - } - else if (token === 83 /* ImportKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); - } - } - else if (token === 101 /* InterfaceKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); - } - } - else if (token !== 76 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) { - var declarationStart = scanner.getTokenPos(); - var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; - grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); - } - return flags; + return modifiers; } function parseClassMemberDeclaration() { var pos = getNodePos(); - var flags = parseAndCheckModifiers(2 /* ClassMembers */); + var modifiers = parseModifiers(2 /* ClassMembers */); if (parseContextualModifier(113 /* GetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(127 /* GetAccessor */, pos, flags); + return parseMemberAccessorDeclaration(127 /* GetAccessor */, pos, modifiers); } if (parseContextualModifier(117 /* SetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(128 /* SetAccessor */, pos, flags); + return parseMemberAccessorDeclaration(128 /* SetAccessor */, pos, modifiers); } if (token === 111 /* ConstructorKeyword */) { - return parseConstructorDeclaration(pos, flags); + return parseConstructorDeclaration(pos, modifiers); } if (token >= 63 /* Identifier */ || token === 7 /* StringLiteral */ || token === 6 /* NumericLiteral */) { - return parsePropertyMemberDeclaration(pos, flags); + return parsePropertyMemberDeclaration(pos, modifiers); } if (token === 17 /* OpenBracketToken */) { - if (flags) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); - } - return parseIndexSignatureMember(); + return parseIndexSignatureMember(modifiers, pos); } ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassDeclaration(pos, flags) { var node = createNode(187 /* ClassDeclaration */, pos); node.flags = flags; - var errorCountBeforeClassDeclaration = file.syntacticErrors.length; parseExpected(67 /* ClassKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.baseType = parseOptional(77 /* ExtendsKeyword */) ? parseTypeReference() : undefined; - var implementsKeywordStart = scanner.getTokenPos(); - var implementsKeywordLength; if (parseOptional(100 /* ImplementsKeyword */)) { - implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference); } - var errorCountBeforeClassBody = file.syntacticErrors.length; if (parseExpected(13 /* OpenBraceToken */)) { node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration); parseExpected(14 /* CloseBraceToken */); @@ -5264,29 +4624,18 @@ var ts; else { node.members = createMissingList(); } - if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { - grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements"); - } return finishNode(node); } function parseInterfaceDeclaration(pos, flags) { var node = createNode(188 /* InterfaceDeclaration */, pos); node.flags = flags; - var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; parseExpected(101 /* InterfaceKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); - var extendsKeywordStart = scanner.getTokenPos(); - var extendsKeywordLength; if (parseOptional(77 /* ExtendsKeyword */)) { - extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference); } - var errorCountBeforeInterfaceBody = file.syntacticErrors.length; node.members = parseTypeLiteral().members; - if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { - grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends"); - } return finishNode(node); } function parseTypeAliasDeclaration(pos, flags) { @@ -5301,40 +4650,10 @@ var ts; } function parseAndCheckEnumDeclaration(pos, flags) { var enumIsConst = flags & 4096 /* Const */; - function isIntegerLiteral(expression) { - function isInteger(literalExpression) { - return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); - } - if (expression.kind === 154 /* PrefixOperator */) { - var unaryExpression = expression; - if (unaryExpression.operator === 32 /* PlusToken */ || unaryExpression.operator === 33 /* MinusToken */) { - expression = unaryExpression.operand; - } - } - if (expression.kind === 6 /* NumericLiteral */) { - return isInteger(expression); - } - return false; - } - var inConstantEnumMemberSection = true; - function parseAndCheckEnumMember() { + function parseEnumMember() { var node = createNode(195 /* EnumMember */); - var errorCountBeforeEnumMember = file.syntacticErrors.length; node.name = parsePropertyName(); node.initializer = parseInitializer(false); - if (!enumIsConst) { - if (inAmbientContext) { - if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); - } - } - else if (node.initializer) { - inConstantEnumMemberSection = isIntegerLiteral(node.initializer); - } - else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer); - } - } return finishNode(node); } var node = createNode(190 /* EnumDeclaration */, pos); @@ -5345,7 +4664,7 @@ var ts; parseExpected(75 /* EnumKeyword */); node.name = parseIdentifier(); if (parseExpected(13 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, true); + node.members = parseDelimitedList(7 /* EnumMembers */, parseEnumMember); parseExpected(14 /* CloseBraceToken */); } else { @@ -5373,14 +4692,6 @@ var ts; } else { node.body = parseModuleBody(); - ts.forEach(node.body.statements, function (s) { - if (s.kind === 194 /* ExportAssignment */) { - grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); - } - else if (s.kind === 193 /* ImportDeclaration */ && s.externalModuleName) { - grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); - } - }); } return finishNode(node); } @@ -5388,16 +4699,7 @@ var ts; var node = createNode(191 /* ModuleDeclaration */, pos); node.flags = flags; node.name = parseStringLiteral(); - if (!inAmbientContext) { - var errorCount = file.syntacticErrors.length; - if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { - grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); - } - } - var saveInAmbientContext = inAmbientContext; - inAmbientContext = true; node.body = parseModuleBody(); - inAmbientContext = saveInAmbientContext; return finishNode(node); } function parseModuleDeclaration(pos, flags) { @@ -5421,8 +4723,9 @@ var ts; parseSemicolon(); return finishNode(node); } - function parseExportAssignmentTail(pos) { + function parseExportAssignmentTail(pos, modifiers) { var node = createNode(194 /* ExportAssignment */, pos); + setModifiers(node, modifiers); node.exportName = parseIdentifier(); parseSemicolon(); return finishNode(node); @@ -5457,29 +4760,20 @@ var ts; } function parseDeclaration(modifierContext) { var pos = getNodePos(); - var errorCountBeforeModifiers = file.syntacticErrors.length; - var flags = parseAndCheckModifiers(modifierContext); + var modifiers = parseModifiers(modifierContext); if (token === 76 /* ExportKeyword */) { var modifiersEnd = scanner.getStartPos(); nextToken(); if (parseOptional(51 /* EqualsToken */)) { - var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { - var modifiersStart = ts.skipTrivia(sourceText, pos); - grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); - } - return exportAssignmentTail; + return parseExportAssignmentTail(pos, modifiers); } } - var saveInAmbientContext = inAmbientContext; - if (flags & 2 /* Ambient */) { - inAmbientContext = true; - } + var flags = modifiers ? modifiers.flags : 0; var result; switch (token) { case 96 /* VarKeyword */: case 102 /* LetKeyword */: - result = parseVariableStatement(true, pos, flags); + result = parseVariableStatement(pos, flags); break; case 68 /* ConstKeyword */: var isConstEnum = lookAhead(function () { return nextToken() === 75 /* EnumKeyword */; }); @@ -5487,7 +4781,7 @@ var ts; result = parseAndCheckEnumDeclaration(pos, flags | 4096 /* Const */); } else { - result = parseVariableStatement(true, pos, flags); + result = parseVariableStatement(pos, flags); } break; case 81 /* FunctionKeyword */: @@ -5514,7 +4808,9 @@ var ts; default: error(ts.Diagnostics.Declaration_expected); } - inAmbientContext = saveInAmbientContext; + if (modifiers) { + result.modifiers = modifiers; + } return result; } function isSourceElement(inErrorRecovery) { @@ -5527,17 +4823,7 @@ var ts; return parseSourceElementOrModuleElement(1 /* ModuleElements */); } function parseSourceElementOrModuleElement(modifierContext) { - if (isDeclarationStart()) { - return parseDeclaration(modifierContext); - } - var statementStart = scanner.getTokenPos(); - var statementFirstTokenLength = scanner.getTextPos() - statementStart; - var errorCountBeforeStatement = file.syntacticErrors.length; - var statement = parseStatement(true); - if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { - grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); - } - return statement; + return isDeclarationStart() ? parseDeclaration(modifierContext) : parseStatement(); } function processReferenceComments() { var referencedFiles = []; @@ -5586,11 +4872,24 @@ var ts; function getExternalModuleIndicator() { return ts.forEach(file.statements, function (node) { return node.flags & 1 /* Export */ || node.kind === 193 /* ImportDeclaration */ && node.externalModuleName || node.kind === 194 /* ExportAssignment */ ? node : undefined; }); } + var syntacticDiagnostics; + function getSyntacticDiagnostics() { + if (syntacticDiagnostics === undefined) { + if (file.parseDiagnostics.length > 0) { + syntacticDiagnostics = file.parseDiagnostics; + } + else { + syntacticDiagnostics = file.grammarDiagnostics; + checkGrammar(sourceText, languageVersion, file); + } + } + ts.Debug.assert(syntacticDiagnostics !== undefined); + return syntacticDiagnostics; + } scanner = ts.createScanner(languageVersion, true, sourceText, scanError, onComment); var rootNodeFlags = 0; if (ts.fileExtensionIs(filename, ".d.ts")) { rootNodeFlags = 1024 /* DeclarationFile */; - inAmbientContext = true; } file = createRootNode(196 /* SourceFile */, 0, sourceText.length, rootNodeFlags); file.filename = ts.normalizePath(filename); @@ -5598,8 +4897,10 @@ var ts; file.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.getLineStarts = getLineStarts; - file.syntacticErrors = []; - file.semanticErrors = []; + file.getSyntacticDiagnostics = getSyntacticDiagnostics; + file.parseDiagnostics = []; + file.grammarDiagnostics = []; + file.semanticDiagnostics = []; var referenceComments = processReferenceComments(); file.referencedFiles = referenceComments.referencedFiles; file.amdDependencies = referenceComments.amdDependencies; @@ -5615,6 +4916,901 @@ var ts; return file; } ts.createSourceFile = createSourceFile; + function isLeftHandSideExpression(expr) { + if (expr) { + switch (expr.kind) { + case 145 /* PropertyAccess */: + case 146 /* IndexedAccess */: + case 148 /* NewExpression */: + case 147 /* CallExpression */: + case 149 /* TaggedTemplateExpression */: + case 141 /* ArrayLiteral */: + case 151 /* ParenExpression */: + case 142 /* ObjectLiteral */: + case 152 /* FunctionExpression */: + case 63 /* Identifier */: + case 120 /* Missing */: + case 8 /* RegularExpressionLiteral */: + case 6 /* NumericLiteral */: + case 7 /* StringLiteral */: + case 9 /* NoSubstitutionTemplateLiteral */: + case 158 /* TemplateExpression */: + case 78 /* FalseKeyword */: + case 87 /* NullKeyword */: + case 91 /* ThisKeyword */: + case 93 /* TrueKeyword */: + case 89 /* SuperKeyword */: + return true; + } + } + return false; + } + function isAssignmentOperator(token) { + return token >= 51 /* FirstAssignment */ && token <= 62 /* LastAssignment */; + } + function checkGrammar(sourceText, languageVersion, file) { + var grammarDiagnostics = file.grammarDiagnostics; + var scanner = ts.createScanner(languageVersion, true, sourceText); + var inAmbientContext = ts.fileExtensionIs(file.filename, ".d.ts"); + var inFunctionBlock = false; + var parent; + visitNode(file); + function visitNode(node) { + var savedParent = parent; + node.parent = parent; + parent = node; + if (!checkModifiers(node)) { + var savedInFunctionBlock = inFunctionBlock; + if (node.kind === 186 /* FunctionBlock */) { + inFunctionBlock = true; + } + var savedInAmbientContext = inAmbientContext; + if (node.flags & 2 /* Ambient */) { + inAmbientContext = true; + } + checkNodeAndChildren(node); + inAmbientContext = savedInAmbientContext; + inFunctionBlock = savedInFunctionBlock; + } + parent = savedParent; + } + function checkNodeAndChildren(node) { + var nodeKind = node.kind; + if (inAmbientContext && checkForStatementInAmbientContext(node, nodeKind)) { + return; + } + if (checkNode(node, nodeKind)) { + return; + } + forEachChild(node, visitNode); + } + function checkNode(node, nodeKind) { + switch (nodeKind) { + case 153 /* ArrowFunction */: + case 129 /* CallSignature */: + case 134 /* ConstructorType */: + case 130 /* ConstructSignature */: + case 133 /* FunctionType */: + return checkAnyParsedSignature(node); + case 171 /* BreakStatement */: + case 170 /* ContinueStatement */: + return checkBreakOrContinueStatement(node); + case 147 /* CallExpression */: + case 148 /* NewExpression */: + return checkCallOrNewExpression(node); + case 190 /* EnumDeclaration */: return checkEnumDeclaration(node); + case 123 /* Parameter */: return checkParameter(node); + case 156 /* BinaryExpression */: return checkBinaryExpression(node); + case 181 /* CatchBlock */: return checkCatchBlock(node); + case 187 /* ClassDeclaration */: return checkClassDeclaration(node); + case 126 /* Constructor */: return checkConstructor(node); + case 194 /* ExportAssignment */: return checkExportAssignment(node); + case 169 /* ForInStatement */: return checkForInStatement(node); + case 168 /* ForStatement */: return checkForStatement(node); + case 185 /* FunctionDeclaration */: return checkFunctionDeclaration(node); + case 152 /* FunctionExpression */: return checkFunctionExpression(node); + case 127 /* GetAccessor */: return checkGetAccessor(node); + case 146 /* IndexedAccess */: return checkIndexedAccess(node); + case 131 /* IndexSignature */: return checkIndexSignature(node); + case 188 /* InterfaceDeclaration */: return checkInterfaceDeclaration(node); + case 177 /* LabeledStatement */: return checkLabeledStatement(node); + case 125 /* Method */: return checkMethod(node); + case 191 /* ModuleDeclaration */: return checkModuleDeclaration(node); + case 142 /* ObjectLiteral */: return checkObjectLiteral(node); + case 6 /* NumericLiteral */: return checkNumericLiteral(node); + case 155 /* PostfixOperator */: return checkPostfixOperator(node); + case 154 /* PrefixOperator */: return checkPrefixOperator(node); + case 124 /* Property */: return checkProperty(node); + case 143 /* PropertyAssignment */: return checkPropertyAssignment(node); + case 172 /* ReturnStatement */: return checkReturnStatement(node); + case 128 /* SetAccessor */: return checkSetAccessor(node); + case 196 /* SourceFile */: return checkSourceFile(node); + case 144 /* ShorthandPropertyAssignment */: return checkShorthandPropertyAssignment(node); + case 174 /* SwitchStatement */: return checkSwitchStatement(node); + case 149 /* TaggedTemplateExpression */: return checkTaggedTemplateExpression(node); + case 138 /* TupleType */: return checkTupleType(node); + case 122 /* TypeParameter */: return checkTypeParameter(node); + case 132 /* TypeReference */: return checkTypeReference(node); + case 184 /* VariableDeclaration */: return checkVariableDeclaration(node); + case 162 /* VariableStatement */: return checkVariableStatement(node); + case 173 /* WithStatement */: return checkWithStatement(node); + } + } + function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) { + var start = ts.skipTrivia(sourceText, node.pos); + scanner.setTextPos(start); + scanner.scan(); + var end = scanner.getTextPos(); + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, end - start, message, arg0, arg1, arg2)); + return true; + } + function grammarErrorOnNode(node, message, arg0, arg1, arg2) { + var span = getErrorSpanForNode(node); + var start = span.end > span.pos ? ts.skipTrivia(file.text, span.pos) : span.pos; + var length = span.end - start; + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; + } + function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; + } + function reportInvalidUseInStrictMode(node) { + var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + return grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); + } + function checkForStatementInAmbientContext(node, kind) { + switch (kind) { + case 161 /* Block */: + case 163 /* EmptyStatement */: + case 165 /* IfStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + case 170 /* ContinueStatement */: + case 171 /* BreakStatement */: + case 172 /* ReturnStatement */: + case 173 /* WithStatement */: + case 174 /* SwitchStatement */: + case 178 /* ThrowStatement */: + case 179 /* TryStatement */: + case 183 /* DebuggerStatement */: + case 177 /* LabeledStatement */: + case 164 /* ExpressionStatement */: + return grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); + } + } + function checkAnyParsedSignature(node) { + return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); + } + function checkBinaryExpression(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { + if (isEvalOrArgumentsIdentifier(node.left)) { + return reportInvalidUseInStrictMode(node.left); + } + } + } + } + function isIterationStatement(node, lookInLabeledStatements) { + switch (node.kind) { + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + return true; + case 177 /* LabeledStatement */: + return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); + } + return false; + } + function checkLabeledStatement(node) { + var current = node.parent; + while (current) { + if (isAnyFunction(current)) { + break; + } + if (current.kind === 177 /* LabeledStatement */ && current.label.text === node.label.text) { + return grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); + } + current = current.parent; + } + } + function checkBreakOrContinueStatement(node) { + var current = node; + while (current) { + if (isAnyFunction(current)) { + return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + } + switch (current.kind) { + case 177 /* LabeledStatement */: + if (node.label && current.label.text === node.label.text) { + var isMisplacedContinueLabel = node.kind === 170 /* ContinueStatement */ && !isIterationStatement(current.statement, true); + if (isMisplacedContinueLabel) { + return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + return false; + } + break; + case 174 /* SwitchStatement */: + if (node.kind === 171 /* BreakStatement */ && !node.label) { + return false; + } + break; + default: + if (isIterationStatement(current, false) && !node.label) { + return false; + } + break; + } + current = current.parent; + } + if (node.label) { + var message = node.kind === 171 /* BreakStatement */ ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } + else { + var message = node.kind === 171 /* BreakStatement */ ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } + } + function checkCallOrNewExpression(node) { + return checkTypeArguments(node.typeArguments) || checkArguments(node.arguments); + } + function checkArguments(arguments) { + return checkForDisallowedTrailingComma(arguments) || checkForOmittedArgument(arguments); + } + function checkTypeArguments(typeArguments) { + return checkForDisallowedTrailingComma(typeArguments) || checkForAtLeastOneTypeArgument(typeArguments) || checkForMissingTypeArgument(typeArguments); + } + function checkForOmittedArgument(arguments) { + if (arguments) { + for (var i = 0, n = arguments.length; i < n; i++) { + var arg = arguments[i]; + if (arg.kind === 160 /* OmittedExpression */) { + return grammarErrorAtPos(arg.pos, 0, ts.Diagnostics.Argument_expression_expected); + } + } + } + } + function checkForMissingTypeArgument(typeArguments) { + if (typeArguments) { + for (var i = 0, n = typeArguments.length; i < n; i++) { + var arg = typeArguments[i]; + if (arg.kind === 120 /* Missing */) { + return grammarErrorAtPos(arg.pos, 0, ts.Diagnostics.Type_expected); + } + } + } + } + function checkForAtLeastOneTypeArgument(typeArguments) { + if (typeArguments && typeArguments.length === 0) { + var start = typeArguments.pos - "<".length; + var end = ts.skipTrivia(sourceText, typeArguments.end) + ">".length; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty); + } + } + function checkForDisallowedTrailingComma(list) { + if (list && list.hasTrailingComma) { + var start = list.end - ",".length; + var end = list.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + function checkCatchBlock(node) { + if (node.type) { + var colonStart = ts.skipTrivia(sourceText, node.variable.end); + return grammarErrorAtPos(colonStart, ":".length, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + } + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.variable)) { + return reportInvalidUseInStrictMode(node.variable); + } + } + function checkClassDeclaration(node) { + return checkForDisallowedTrailingComma(node.implementedTypes) || checkForAtLeastOneHeritageClause(node.implementedTypes, "implements"); + } + function checkForAtLeastOneHeritageClause(types, listType) { + if (types && types.length === 0) { + return grammarErrorAtPos(types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType); + } + } + function checkConstructor(node) { + return checkAnyParsedSignature(node) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node) || checkForBodyInAmbientContext(node.body, true); + } + function checkConstructorTypeParameters(node) { + if (node.typeParameters) { + return grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + } + function checkConstructorTypeAnnotation(node) { + if (node.type) { + return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } + } + function checkEnumDeclaration(enumDecl) { + var enumIsConst = (enumDecl.flags & 4096 /* Const */) !== 0; + var hasError = false; + if (!enumIsConst) { + var inConstantEnumMemberSection = true; + for (var i = 0, n = enumDecl.members.length; i < n; i++) { + var node = enumDecl.members[i]; + if (inAmbientContext) { + if (node.initializer && !isIntegerLiteral(node.initializer)) { + hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError; + } + } + else if (node.initializer) { + inConstantEnumMemberSection = isIntegerLiteral(node.initializer); + } + else if (!inConstantEnumMemberSection) { + hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer) || hasError; + } + } + } + return hasError; + } + function isIntegerLiteral(expression) { + function isInteger(literalExpression) { + return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); + } + if (expression.kind === 154 /* PrefixOperator */) { + var unaryExpression = expression; + if (unaryExpression.operator === 32 /* PlusToken */ || unaryExpression.operator === 33 /* MinusToken */) { + expression = unaryExpression.operand; + } + } + if (expression.kind === 6 /* NumericLiteral */) { + return isInteger(expression); + } + return false; + } + function checkExportAssignment(node) { + if (node.flags & 243 /* Modifier */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); + } + } + function checkForInStatement(node) { + return checkVariableDeclarations(node.declarations) || checkForMoreThanOneDeclaration(node.declarations); + } + function checkForStatement(node) { + return checkVariableDeclarations(node.declarations); + } + function checkForMoreThanOneDeclaration(declarations) { + if (declarations && declarations.length > 1) { + return grammarErrorOnFirstToken(declarations[1], ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + } + } + function checkFunctionDeclaration(node) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name) || checkForBodyInAmbientContext(node.body, false); + } + function checkFunctionExpression(node) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name); + } + function checkFunctionName(name) { + if (name && name.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(name)) { + return reportInvalidUseInStrictMode(name); + } + } + function checkGetAccessor(node) { + return checkAnyParsedSignature(node) || checkAccessor(node); + } + function checkIndexedAccess(node) { + if (node.index.kind === 120 /* Missing */ && node.parent.kind === 148 /* NewExpression */ && node.parent.func === node) { + var start = ts.skipTrivia(sourceText, node.parent.pos); + var end = node.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + } + } + function checkIndexSignature(node) { + return checkIndexSignatureParameters(node) || checkForIndexSignatureModifiers(node); + } + function checkForIndexSignatureModifiers(node) { + if (node.flags & 243 /* Modifier */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); + } + } + function checkIndexSignatureParameters(node) { + var parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + if (parameter) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + else { + return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + } + else if (parameter.flags & 8 /* Rest */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); + } + else if (parameter.flags & 243 /* Modifier */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + } + else if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + } + else if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + } + else if (!parameter.type) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + } + else if (parameter.type.kind !== 118 /* StringKeyword */ && parameter.type.kind !== 116 /* NumberKeyword */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); + } + else if (!node.type) { + return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); + } + } + function checkInterfaceDeclaration(node) { + return checkForDisallowedTrailingComma(node.baseTypes) || checkForAtLeastOneHeritageClause(node.baseTypes, "extends"); + } + function checkMethod(node) { + return checkAnyParsedSignature(node) || checkForBodyInAmbientContext(node.body, false) || (node.parent.kind === 187 /* ClassDeclaration */ && checkForInvalidQuestionMark(node, ts.Diagnostics.A_class_member_cannot_be_declared_optional)); + } + function checkForBodyInAmbientContext(body, isConstructor) { + if (inAmbientContext && body && body.kind === 186 /* FunctionBlock */) { + var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; + return grammarErrorOnFirstToken(body, diagnostic); + } + } + function checkModuleDeclaration(node) { + return checkModuleDeclarationName(node) || checkModuleDeclarationStatements(node); + } + function checkModuleDeclarationName(node) { + if (!inAmbientContext && node.name.kind === 7 /* StringLiteral */) { + return grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + function checkModuleDeclarationStatements(node) { + if (node.name.kind === 63 /* Identifier */ && node.body.kind === 192 /* ModuleBlock */) { + var statements = node.body.statements; + for (var i = 0, n = statements.length; i < n; i++) { + var statement = statements[i]; + if (statement.kind === 194 /* ExportAssignment */) { + return grammarErrorOnNode(statement, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (statement.kind === 193 /* ImportDeclaration */ && statement.externalModuleName) { + return grammarErrorOnNode(statement.externalModuleName, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + } + } + } + function checkObjectLiteral(node) { + var seen = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccesor = 4; + var GetOrSetAccessor = GetAccessor | SetAccesor; + var inStrictMode = (node.flags & 8192 /* ParsedInStrictMode */) !== 0; + for (var i = 0, n = node.properties.length; i < n; i++) { + var prop = node.properties[i]; + if (prop.kind === 160 /* OmittedExpression */) { + continue; + } + var p = prop; + var name = p.name; + var currentKind; + if (p.kind === 143 /* PropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 144 /* ShorthandPropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 127 /* GetAccessor */) { + currentKind = GetAccessor; + } + else if (p.kind === 128 /* SetAccessor */) { + currentKind = SetAccesor; + } + else { + ts.Debug.fail("Unexpected syntax kind:" + p.kind); + } + if (!ts.hasProperty(seen, name.text)) { + seen[name.text] = currentKind; + } + else { + var existingKind = seen[name.text]; + if (currentKind === Property && existingKind === Property) { + if (inStrictMode) { + grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); + } + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[name.text] = currentKind | existingKind; + } + else { + return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + } + } + else { + return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + } + } + function checkNumericLiteral(node) { + if (node.flags & 16384 /* OctalLiteral */) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); + } + else if (languageVersion >= 1 /* ES5 */) { + return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); + } + } + } + function checkModifiers(node) { + switch (node.kind) { + case 127 /* GetAccessor */: + case 128 /* SetAccessor */: + case 126 /* Constructor */: + case 124 /* Property */: + case 125 /* Method */: + case 131 /* IndexSignature */: + case 187 /* ClassDeclaration */: + case 188 /* InterfaceDeclaration */: + case 191 /* ModuleDeclaration */: + case 190 /* EnumDeclaration */: + case 194 /* ExportAssignment */: + case 162 /* VariableStatement */: + case 185 /* FunctionDeclaration */: + case 189 /* TypeAliasDeclaration */: + case 193 /* ImportDeclaration */: + case 123 /* Parameter */: + break; + default: + return false; + } + if (!node.modifiers) { + return; + } + var lastStatic, lastPrivate, lastProtected, lastDeclare; + var flags = 0; + for (var i = 0, n = node.modifiers.length; i < n; i++) { + var modifier = node.modifiers[i]; + switch (modifier.kind) { + case 106 /* PublicKeyword */: + case 105 /* ProtectedKeyword */: + case 104 /* PrivateKeyword */: + var text; + if (modifier.kind === 106 /* PublicKeyword */) { + text = "public"; + } + else if (modifier.kind === 105 /* ProtectedKeyword */) { + text = "protected"; + lastProtected = modifier; + } + else { + text = "private"; + lastPrivate = modifier; + } + if (flags & 112 /* AccessibilityModifier */) { + return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 128 /* Static */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); + } + else if (node.parent.kind === 192 /* ModuleBlock */ || node.parent.kind === 196 /* SourceFile */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); + } + flags |= modifierToFlag(modifier.kind); + break; + case 107 /* StaticKeyword */: + if (flags & 128 /* Static */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static"); + } + else if (node.parent.kind === 192 /* ModuleBlock */ || node.parent.kind === 196 /* SourceFile */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } + flags |= 128 /* Static */; + lastStatic = modifier; + break; + case 76 /* ExportKeyword */: + if (flags & 1 /* Export */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export"); + } + else if (flags & 2 /* Ambient */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } + else if (node.parent.kind === 187 /* ClassDeclaration */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= 1 /* Export */; + break; + case 112 /* DeclareKeyword */: + if (flags & 2 /* Ambient */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare"); + } + else if (node.parent.kind === 187 /* ClassDeclaration */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (inAmbientContext && node.parent.kind === 192 /* ModuleBlock */) { + return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + flags |= 2 /* Ambient */; + lastDeclare = modifier; + break; + } + } + if (node.kind === 126 /* Constructor */) { + if (flags & 128 /* Static */) { + return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + } + else if (flags & 64 /* Protected */) { + return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); + } + else if (flags & 32 /* Private */) { + return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); + } + } + else if (node.kind === 193 /* ImportDeclaration */ && flags & 2 /* Ambient */) { + return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } + else if (node.kind === 188 /* InterfaceDeclaration */ && flags & 2 /* Ambient */) { + return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); + } + } + function checkParameter(node) { + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.name)) { + return reportInvalidUseInStrictMode(node.name); + } + } + function checkTypeParameterList(typeParameters) { + if (checkForDisallowedTrailingComma(typeParameters)) { + return true; + } + if (typeParameters && typeParameters.length === 0) { + var start = typeParameters.pos - "<".length; + var end = ts.skipTrivia(sourceText, typeParameters.end) + ">".length; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty); + } + } + function checkParameterList(parameters) { + if (checkForDisallowedTrailingComma(parameters)) { + return true; + } + var seenOptionalParameter = false; + var parameterCount = parameters.length; + for (var i = 0; i < parameterCount; i++) { + var parameter = parameters[i]; + if (parameter.flags & 8 /* Rest */) { + if (i !== (parameterCount - 1)) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + } + if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); + } + if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); + } + } + else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { + seenOptionalParameter = true; + if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + } + } + else { + if (seenOptionalParameter) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + } + } + } + } + function checkPostfixOperator(node) { + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.operand)) { + return reportInvalidUseInStrictMode(node.operand); + } + } + function checkPrefixOperator(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + if ((node.operator === 37 /* PlusPlusToken */ || node.operator === 38 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(node.operand)) { + return reportInvalidUseInStrictMode(node.operand); + } + else if (node.operator === 72 /* DeleteKeyword */ && node.operand.kind === 63 /* Identifier */) { + return grammarErrorOnNode(node.operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + } + } + } + function checkProperty(node) { + return (node.parent.kind === 187 /* ClassDeclaration */ && checkForInvalidQuestionMark(node, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) || checkForInitializerInAmbientContext(node); + } + function checkForInitializerInAmbientContext(node) { + if (inAmbientContext && node.initializer) { + return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + } + function checkPropertyAssignment(node) { + return checkForInvalidQuestionMark(node, ts.Diagnostics.An_object_member_cannot_be_declared_optional); + } + function checkForInvalidQuestionMark(node, message) { + if (node.flags & 4 /* QuestionMark */) { + var pos = ts.skipTrivia(sourceText, node.name.end); + return grammarErrorAtPos(pos, "?".length, message); + } + } + function checkReturnStatement(node) { + if (!inFunctionBlock) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + } + } + function checkSetAccessor(node) { + return checkAnyParsedSignature(node) || checkAccessor(node); + } + function checkAccessor(accessor) { + var kind = accessor.kind; + if (languageVersion < 1 /* ES5 */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); + } + else if (inAmbientContext) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); + } + else if (accessor.body === undefined) { + return grammarErrorAtPos(accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); + } + else if (accessor.typeParameters) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); + } + else if (kind === 127 /* GetAccessor */ && accessor.parameters.length) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + } + else if (kind === 128 /* SetAccessor */) { + if (accessor.type) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + else if (accessor.parameters.length !== 1) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else { + var parameter = accessor.parameters[0]; + if (parameter.flags & 8 /* Rest */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + else if (parameter.flags & 243 /* Modifier */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + else if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + else if (parameter.initializer) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } + } + } + function checkSourceFile(node) { + return inAmbientContext && checkTopLevelElementsForRequiredDeclareModifier(file); + } + function checkTopLevelElementsForRequiredDeclareModifier(file) { + for (var i = 0, n = file.statements.length; i < n; i++) { + var decl = file.statements[i]; + if (isDeclaration(decl) || decl.kind === 162 /* VariableStatement */) { + if (checkTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + } + function checkTopLevelElementForRequiredDeclareModifier(node) { + if (node.kind === 188 /* InterfaceDeclaration */ || node.kind === 193 /* ImportDeclaration */ || node.kind === 194 /* ExportAssignment */ || (node.flags & 2 /* Ambient */)) { + return false; + } + return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + function checkShorthandPropertyAssignment(node) { + return checkForInvalidQuestionMark(node, ts.Diagnostics.An_object_member_cannot_be_declared_optional); + } + function checkSwitchStatement(node) { + var firstDefaultClause; + for (var i = 0, n = node.clauses.length; i < n; i++) { + var clause = node.clauses[i]; + if (clause.kind === 176 /* DefaultClause */) { + if (firstDefaultClause === undefined) { + firstDefaultClause = clause; + } + else { + var start = ts.skipTrivia(file.text, clause.pos); + var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + } + } + } + } + function checkTaggedTemplateExpression(node) { + if (languageVersion < 2 /* ES6 */) { + return grammarErrorOnFirstToken(node.template, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } + function checkTupleType(node) { + return checkForDisallowedTrailingComma(node.elementTypes) || checkForAtLeastOneType(node); + } + function checkForAtLeastOneType(node) { + if (node.elementTypes.length === 0) { + return grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); + } + } + function checkTypeParameter(node) { + if (node.expression) { + return grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected); + } + } + function checkTypeReference(node) { + return checkTypeArguments(node.typeArguments); + } + function checkVariableDeclaration(node) { + if (inAmbientContext && node.initializer) { + var equalsPos = node.type ? ts.skipTrivia(sourceText, node.type.end) : ts.skipTrivia(sourceText, node.name.end); + return grammarErrorAtPos(equalsPos, "=".length, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + if (!inAmbientContext && !node.initializer && node.flags & 4096 /* Const */) { + return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized); + } + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.name)) { + return reportInvalidUseInStrictMode(node.name); + } + } + function checkVariableDeclarations(declarations) { + if (declarations) { + if (checkForDisallowedTrailingComma(declarations)) { + return true; + } + if (!declarations.length) { + return grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + var decl = declarations[0]; + if (languageVersion < 2 /* ES6 */) { + if (decl.flags & 2048 /* Let */) { + return grammarErrorOnFirstToken(decl, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + else if (decl.flags & 4096 /* Const */) { + return grammarErrorOnFirstToken(decl, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } + } + } + function checkVariableStatement(node) { + return checkVariableDeclarations(node.declarations) || checkForDisallowedLetOrConstStatement(node); + } + function checkForDisallowedLetOrConstStatement(node) { + if (!allowLetAndConstDeclarations(node.parent)) { + if (node.flags & 2048 /* Let */) { + return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block); + } + else if (node.flags & 4096 /* Const */) { + return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block); + } + } + } + function allowLetAndConstDeclarations(parent) { + switch (parent.kind) { + case 165 /* IfStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + case 173 /* WithStatement */: + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + return false; + case 177 /* LabeledStatement */: + return allowLetAndConstDeclarations(parent.parent); + } + return true; + } + function checkWithStatement(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } + } function createProgram(rootNames, options, host) { var program; var files = []; @@ -5712,7 +5908,7 @@ var ts; else { files.push(file); } - ts.forEach(file.syntacticErrors, function (e) { + ts.forEach(file.getSyntacticDiagnostics(), function (e) { errors.push(e); }); } @@ -5916,9 +6112,9 @@ var ts; } var message = symbol.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; ts.forEach(symbol.declarations, function (declaration) { - file.semanticErrors.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticErrors.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -5933,7 +6129,7 @@ var ts; if (node.name) { node.name.parent = node; } - file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); } symbol.exports[prototypeSymbol.name] = prototypeSymbol; prototypeSymbol.parent = symbol; @@ -6804,8 +7000,8 @@ var ts; return; } ts.Debug.assert(node.parent.kind !== 149 /* TaggedTemplateExpression */); - var templateNeedsParens = ts.isExpression(node.parent) && node.parent.kind !== 151 /* ParenExpression */ && comparePrecedenceToBinaryPlus(node.parent) !== -1 /* LessThan */; - if (templateNeedsParens) { + var emitOuterParens = ts.isExpression(node.parent) && templateNeedsParens(node, node.parent); + if (emitOuterParens) { write("("); } emitLiteral(node.head); @@ -6824,9 +7020,22 @@ var ts; emitLiteral(templateSpan.literal); } }); - if (templateNeedsParens) { + if (emitOuterParens) { write(")"); } + function templateNeedsParens(template, parent) { + switch (parent.kind) { + case 147 /* CallExpression */: + case 148 /* NewExpression */: + return parent.func === template; + case 151 /* ParenExpression */: + return false; + case 149 /* TaggedTemplateExpression */: + ts.Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6."); + default: + return comparePrecedenceToBinaryPlus(parent) !== -1 /* LessThan */; + } + } function comparePrecedenceToBinaryPlus(expression) { ts.Debug.assert(compilerOptions.target <= 1 /* ES5 */); switch (expression.kind) { @@ -7221,15 +7430,18 @@ var ts; var endPos = emitToken(80 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(15 /* OpenParenToken */, endPos); - if (node.declaration) { - if (node.declaration.flags & 2048 /* Let */) { - emitToken(102 /* LetKeyword */, endPos); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + if (decl.flags & 2048 /* Let */) { + emitToken(102 /* LetKeyword */, endPos); + } + else { + emitToken(96 /* VarKeyword */, endPos); + } + write(" "); + emit(decl); } - else { - emitToken(96 /* VarKeyword */, endPos); - } - write(" "); - emit(node.declaration); } else { emit(node.variable); @@ -10525,7 +10737,7 @@ var ts; type = setterParameterType; } else { - if (getter) { + if (getter && getter.body) { type = getReturnTypeFromBody(getter); } else { @@ -15041,10 +15253,13 @@ var ts; checkSourceElement(node.statement); } function checkForInStatement(node) { - if (node.declaration) { - checkVariableDeclaration(node.declaration); - if (node.declaration.type) { - error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + checkVariableDeclaration(decl); + if (decl.type) { + error(decl, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + } } } if (node.variable) { @@ -16335,7 +16550,7 @@ var ts; function initializeTypeChecker() { ts.forEach(program.getSourceFiles(), function (file) { ts.bindSourceFile(file); - ts.forEach(file.semanticErrors, addDiagnostic); + ts.forEach(file.semanticDiagnostics, addDiagnostic); }); ts.forEach(program.getSourceFiles(), function (file) { if (!ts.isExternalModule(file)) { diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js index ca2b7ec0318..367a79bd47a 100644 --- a/bin/typescriptServices.js +++ b/bin/typescriptServices.js @@ -712,7 +712,7 @@ var ts; Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: 1 /* Error */, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, Unterminated_template_literal: { code: 1160, category: 1 /* Error */, key: "Unterminated template literal." }, Unterminated_regular_expression_literal: { code: 1161, category: 1 /* Error */, key: "Unterminated regular expression literal." }, - A_object_member_cannot_be_declared_optional: { code: 1160, category: 1 /* Error */, key: "A object member cannot be declared optional." }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: 1 /* Error */, key: "An object member cannot be declared optional." }, Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, @@ -1786,11 +1786,11 @@ var ts; value = 0; } tokenValue = "" + value; - return 6 /* NumericLiteral */; + return token = 6 /* NumericLiteral */; } if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); - return 6 /* NumericLiteral */; + return token = 6 /* NumericLiteral */; } case 49 /* _1 */: case 50 /* _2 */: @@ -2241,7 +2241,7 @@ var ts; case 168 /* ForStatement */: return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement); case 169 /* ForInStatement */: - return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement); + return children(node.declarations) || child(node.variable) || child(node.expression) || child(node.statement); case 170 /* ContinueStatement */: case 171 /* BreakStatement */: return child(node.label); @@ -2661,6 +2661,17 @@ var ts; return false; } ts.isModifier = isModifier; + function modifierToFlag(token) { + switch (token) { + case 107 /* StaticKeyword */: return 128 /* Static */; + case 106 /* PublicKeyword */: return 16 /* Public */; + case 105 /* ProtectedKeyword */: return 64 /* Protected */; + case 104 /* PrivateKeyword */: return 32 /* Private */; + case 76 /* ExportKeyword */: return 1 /* Export */; + case 112 /* DeclareKeyword */: return 2 /* Ambient */; + } + return 0; + } function createSourceFile(filename, sourceText, languageVersion, version, isOpen) { if (isOpen === void 0) { isOpen = false; } var file; @@ -2674,84 +2685,6 @@ var ts; var lineStarts; var isInStrictMode = false; var lookAheadMode = 0 /* NotLookingAhead */; - var inAmbientContext = false; - var inFunctionBody = false; - var inSwitchStatement = 0 /* NotNested */; - var inIterationStatement = 0 /* NotNested */; - var labelledStatementInfo = (function () { - var functionBoundarySentinel; - var currentLabelSet; - var labelSetStack; - var isIterationStack; - function addLabel(label) { - if (!currentLabelSet) { - currentLabelSet = {}; - } - currentLabelSet[label.text] = true; - } - function pushCurrentLabelSet(isIterationStatement) { - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - ts.Debug.assert(currentLabelSet !== undefined); - labelSetStack.push(currentLabelSet); - isIterationStack.push(isIterationStatement); - currentLabelSet = undefined; - } - function pushFunctionBoundary() { - if (!functionBoundarySentinel) { - functionBoundarySentinel = {}; - if (!labelSetStack && !isIterationStack) { - labelSetStack = []; - isIterationStack = []; - } - } - ts.Debug.assert(currentLabelSet === undefined); - labelSetStack.push(functionBoundarySentinel); - isIterationStack.push(false); - } - function pop() { - ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); - labelSetStack.pop(); - isIterationStack.pop(); - } - function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) { - if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) { - return 1 /* Nested */; - } - if (!labelSetStack) { - return 0 /* NotNested */; - } - var crossedFunctionBoundary = false; - for (var i = labelSetStack.length - 1; i >= 0; i--) { - var labelSet = labelSetStack[i]; - if (labelSet === functionBoundarySentinel) { - if (stopAtFunctionBoundary) { - break; - } - else { - crossedFunctionBoundary = true; - continue; - } - } - if (requireIterationStatement && isIterationStack[i] === false) { - continue; - } - if (ts.hasProperty(labelSet, label.text)) { - return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */; - } - } - return 0 /* NotNested */; - } - return { - addLabel: addLabel, - pushCurrentLabelSet: pushCurrentLabelSet, - pushFunctionBoundary: pushFunctionBoundary, - pop: pop, - nodeIsNestedInLabel: nodeIsNestedInLabel - }; - })(); function getLineStarts() { return lineStarts || (lineStarts = ts.computeLineStarts(sourceText)); } @@ -2766,25 +2699,12 @@ var ts; var length = scanner.getTextPos() - start; errorAtPos(start, length, message, arg0, arg1, arg2); } - function grammarErrorOnNode(node, message, arg0, arg1, arg2) { - var span = getErrorSpanForNode(node); - var start = span.end > span.pos ? ts.skipTrivia(file.text, span.pos) : span.pos; - var length = span.end - start; - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } - function reportInvalidUseInStrictMode(node) { - var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); - grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); - } - function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { - file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); - } function errorAtPos(start, length, message, arg0, arg1, arg2) { - var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1; + var lastErrorPos = file.parseDiagnostics.length ? file.parseDiagnostics[file.parseDiagnostics.length - 1].start : -1; if (start !== lastErrorPos) { var diagnostic = ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); diagnostic.isParseError = true; - file.syntacticErrors.push(diagnostic); + file.parseDiagnostics.push(diagnostic); } if (lookAheadMode === 1 /* NoErrorYet */) { lookAheadMode = 2 /* Error */; @@ -2821,7 +2741,7 @@ var ts; } function lookAheadHelper(callback, alwaysResetState) { var saveToken = token; - var saveSyntacticErrorsLength = file.syntacticErrors.length; + var saveSyntacticErrorsLength = file.parseDiagnostics.length; var saveLookAheadMode = lookAheadMode; lookAheadMode = 1 /* NoErrorYet */; var result = callback(); @@ -2832,7 +2752,7 @@ var ts; lookAheadMode = saveLookAheadMode; if (!result || alwaysResetState) { token = saveToken; - file.syntacticErrors.length = saveSyntacticErrorsLength; + file.parseDiagnostics.length = saveSyntacticErrorsLength; } return result; } @@ -2884,18 +2804,22 @@ var ts; function createNode(kind, pos) { nodeCount++; var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))(); - if (!(pos >= 0)) + if (!(pos >= 0)) { pos = scanner.getStartPos(); + } node.pos = pos; node.end = pos; return node; } function finishNode(node) { node.end = scanner.getStartPos(); + if (isInStrictMode) { + node.flags |= 8192 /* ParsedInStrictMode */; + } return node; } - function createMissingNode() { - return createNode(120 /* Missing */); + function createMissingNode(pos) { + return createNode(120 /* Missing */, pos); } function internIdentifier(text) { text = escapeIdentifier(text); @@ -3064,12 +2988,11 @@ var ts; parsingContext = saveParsingContext; return result; } - function parseDelimitedList(kind, parseElement, allowTrailingComma) { + function parseDelimitedList(kind, parseElement) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var result = []; result.pos = getNodePos(); - var errorCountBeforeParsingList = file.syntacticErrors.length; var commaStart = -1; while (true) { if (isListElement(kind, false)) { @@ -3096,11 +3019,6 @@ var ts; } } if (commaStart >= 0) { - if (!allowTrailingComma) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); - } - } result.hasTrailingComma = true; } result.end = getNodeEnd(); @@ -3122,7 +3040,7 @@ var ts; } function parseBracketedList(kind, parseElement, startToken, endToken) { if (parseExpected(startToken)) { - var result = parseDelimitedList(kind, parseElement, false); + var result = parseDelimitedList(kind, parseElement); parseExpected(endToken); return result; } @@ -3180,12 +3098,7 @@ var ts; nextToken(); finishNode(node); if (node.kind === 6 /* NumericLiteral */ && sourceText.charCodeAt(tokenPos) === 48 /* _0 */ && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { - if (isInStrictMode) { - grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); - } - else if (languageVersion >= 1 /* ES5 */) { - grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); - } + node.flags |= 16384 /* OctalLiteral */; } return node; } @@ -3218,22 +3131,14 @@ var ts; node.constraint = parseType(); } else { - var expr = parseUnaryExpression(); - grammarErrorOnNode(expr, ts.Diagnostics.Type_expected); + node.expression = parseUnaryExpression(); } } return finishNode(node); } function parseTypeParameters() { if (token === 23 /* LessThanToken */) { - var pos = getNodePos(); - var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 23 /* LessThanToken */, 24 /* GreaterThanToken */); - if (!result.length) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty); - } - return result; + return parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 23 /* LessThanToken */, 24 /* GreaterThanToken */); } } function parseParameterType() { @@ -3242,10 +3147,17 @@ var ts; function isStartOfParameter() { return token === 20 /* DotDotDotToken */ || isIdentifier() || isModifier(token); } + function setModifiers(node, modifiers) { + if (modifiers) { + node.flags |= modifiers.flags; + node.modifiers = modifiers; + } + } function parseParameter(flags) { if (flags === void 0) { flags = 0; } var node = createNode(123 /* Parameter */); - node.flags |= parseAndCheckModifiers(3 /* Parameters */); + var modifiers = parseModifiers(3 /* Parameters */); + setModifiers(node, modifiers); if (parseOptional(20 /* DotDotDotToken */)) { node.flags |= 8 /* Rest */; } @@ -3266,7 +3178,6 @@ var ts; } var typeParameters = parseTypeParameters(); var parameters = parseParameterList(15 /* OpenParenToken */, 16 /* CloseParenToken */); - checkParameterList(parameters); var type; if (returnTokenRequired) { parseExpected(returnToken); @@ -3284,44 +3195,6 @@ var ts; function parseParameterList(startDelimiter, endDelimiter) { return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter); } - function checkParameterList(parameters) { - var seenOptionalParameter = false; - var parameterCount = parameters.length; - for (var i = 0; i < parameterCount; i++) { - var parameter = parameters[i]; - if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { - reportInvalidUseInStrictMode(parameter.name); - return; - } - else if (parameter.flags & 8 /* Rest */) { - if (i !== (parameterCount - 1)) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); - return; - } - if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); - return; - } - if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); - return; - } - } - else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { - seenOptionalParameter = true; - if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); - return; - } - } - else { - if (seenOptionalParameter) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); - return; - } - } - } - } function parseSignatureMember(kind, returnToken) { var node = createNode(kind); var sig = parseSignature(kind, returnToken, false); @@ -3331,60 +3204,14 @@ var ts; parseSemicolon(); return finishNode(node); } - function parseIndexSignatureMember() { - var node = createNode(131 /* IndexSignature */); - var errorCountBeforeIndexSignature = file.syntacticErrors.length; - var indexerStart = scanner.getTokenPos(); + function parseIndexSignatureMember(modifiers, pos) { + var node = createNode(131 /* IndexSignature */, pos); + setModifiers(node, modifiers); node.parameters = parseParameterList(17 /* OpenBracketToken */, 18 /* CloseBracketToken */); - var indexerLength = scanner.getStartPos() - indexerStart; node.type = parseTypeAnnotation(); parseSemicolon(); - if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { - checkIndexSignature(node, indexerStart, indexerLength); - } return finishNode(node); } - function checkIndexSignature(node, indexerStart, indexerLength) { - var parameter = node.parameters[0]; - if (node.parameters.length !== 1) { - var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter; - if (parameter) { - grammarErrorOnNode(parameter.name, arityDiagnostic); - } - else { - grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); - } - return; - } - else if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); - return; - } - else if (parameter.flags & 243 /* Modifier */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); - return; - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); - return; - } - else if (parameter.initializer) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); - return; - } - else if (!parameter.type) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); - return; - } - else if (parameter.type.kind !== 118 /* StringKeyword */ && parameter.type.kind !== 116 /* NumberKeyword */) { - grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); - return; - } - else if (!node.type) { - grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); - return; - } - } function parsePropertyOrMethod() { var node = createNode(0 /* Unknown */); node.name = parsePropertyName(); @@ -3421,7 +3248,7 @@ var ts; case 23 /* LessThanToken */: return parseSignatureMember(129 /* CallSignature */, 50 /* ColonToken */); case 17 /* OpenBracketToken */: - return parseIndexSignatureMember(); + return parseIndexSignatureMember(undefined); case 86 /* NewKeyword */: if (lookAhead(function () { return nextToken() === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */; })) { return parseSignatureMember(130 /* ConstructSignature */, 50 /* ColonToken */); @@ -3448,12 +3275,7 @@ var ts; } function parseTupleType() { var node = createNode(138 /* TupleType */); - var startTokenPos = scanner.getTokenPos(); - var startErrorCount = file.syntacticErrors.length; node.elementTypes = parseBracketedList(16 /* TupleElementTypes */, parseType, 17 /* OpenBracketToken */, 18 /* CloseBracketToken */); - if (!node.elementTypes.length && file.syntacticErrors.length === startErrorCount) { - grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); - } return finishNode(node); } function parseParenType() { @@ -3643,45 +3465,13 @@ var ts; if (expr.kind === 63 /* Identifier */ && token === 31 /* EqualsGreaterThanToken */) { return parseSimpleArrowFunctionExpression(expr); } - if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } + if (isLeftHandSideExpression(expr) && isAssignmentOperator(token)) { var operator = token; nextToken(); return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); } return expr; } - function isLeftHandSideExpression(expr) { - if (expr) { - switch (expr.kind) { - case 145 /* PropertyAccess */: - case 146 /* IndexedAccess */: - case 148 /* NewExpression */: - case 147 /* CallExpression */: - case 149 /* TaggedTemplateExpression */: - case 141 /* ArrayLiteral */: - case 151 /* ParenExpression */: - case 142 /* ObjectLiteral */: - case 152 /* FunctionExpression */: - case 63 /* Identifier */: - case 120 /* Missing */: - case 8 /* RegularExpressionLiteral */: - case 6 /* NumericLiteral */: - case 7 /* StringLiteral */: - case 9 /* NoSubstitutionTemplateLiteral */: - case 158 /* TemplateExpression */: - case 78 /* FalseKeyword */: - case 87 /* NullKeyword */: - case 91 /* ThisKeyword */: - case 93 /* TrueKeyword */: - case 89 /* SuperKeyword */: - return true; - } - } - return false; - } function parseSimpleArrowFunctionExpression(identifier) { ts.Debug.assert(token === 31 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(31 /* EqualsGreaterThanToken */); @@ -3773,19 +3563,16 @@ var ts; function parseArrowExpressionTail(pos, sig, noIn) { var body; if (token === 13 /* OpenBraceToken */) { - body = parseBody(false); + body = parseFunctionBlock(false); } else if (isStatement(true) && !isStartOfExpressionStatement() && token !== 81 /* FunctionKeyword */) { - body = parseBody(true); + body = parseFunctionBlock(true); } else { body = parseAssignmentExpression(noIn); } return makeFunctionExpression(153 /* ArrowFunction */, pos, undefined, sig, body); } - function isAssignmentOperator() { - return token >= 51 /* FirstAssignment */ && token <= 62 /* LastAssignment */; - } function parseConditionalExpression(noIn) { var expr = parseBinaryExpression(noIn); while (parseOptional(49 /* QuestionToken */)) { @@ -3873,16 +3660,7 @@ var ts; case 38 /* MinusMinusToken */: var operator = token; nextToken(); - var operand = parseUnaryExpression(); - if (isInStrictMode) { - if ((operator === 37 /* PlusPlusToken */ || operator === 38 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { - reportInvalidUseInStrictMode(operand); - } - else if (operator === 72 /* DeleteKeyword */ && operand.kind === 63 /* Identifier */) { - grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); - } - } - return makeUnaryExpression(154 /* PrefixOperator */, pos, operator, operand); + return makeUnaryExpression(154 /* PrefixOperator */, pos, operator, parseUnaryExpression()); case 23 /* LessThanToken */: return parseTypeAssertion(); } @@ -3894,9 +3672,6 @@ var ts; var expr = parseCallAndAccess(primaryExpression, false); ts.Debug.assert(isLeftHandSideExpression(expr)); if ((token === 37 /* PlusPlusToken */ || token === 38 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { - reportInvalidUseInStrictMode(expr); - } var operator = token; nextToken(); expr = makeUnaryExpression(155 /* PostfixOperator */, expr.pos, operator, expr); @@ -3922,15 +3697,19 @@ var ts; var dotOrBracketStart = scanner.getTokenPos(); if (parseOptional(19 /* DotToken */)) { var propertyAccess = createNode(145 /* PropertyAccess */, expr.pos); - if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord() && lookAhead(function () { return scanner.isReservedWord(); })) { - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.Identifier_expected); - var id = createMissingNode(); - } - else { - var id = parseIdentifierName(); + var id; + if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) { + var matchesPattern = lookAhead(function () { + nextToken(); + return !scanner.hasPrecedingLineBreak() && (scanner.isIdentifier() || scanner.isReservedWord); + }); + if (matchesPattern) { + errorAtPos(dotOrBracketStart + 1, 0, ts.Diagnostics.Identifier_expected); + id = createMissingNode(); + } } propertyAccess.left = expr; - propertyAccess.right = id; + propertyAccess.right = id || parseIdentifierName(); expr = finishNode(propertyAccess); continue; } @@ -3939,7 +3718,6 @@ var ts; indexedAccess.object = expr; if (inNewExpression && parseOptional(18 /* CloseBracketToken */)) { indexedAccess.index = createMissingNode(); - grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); } else { indexedAccess.index = parseExpression(); @@ -3962,7 +3740,7 @@ var ts; else { parseExpected(15 /* OpenParenToken */); } - callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression); parseExpected(16 /* CloseParenToken */); expr = finishNode(callExpr); continue; @@ -3972,9 +3750,6 @@ var ts; tagExpression.tag = expr; tagExpression.template = token === 9 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() : parseTemplateExpression(); expr = finishNode(tagExpression); - if (languageVersion < 2 /* ES6 */) { - grammarErrorOnNode(expr, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); - } continue; } return expr; @@ -3986,19 +3761,10 @@ var ts; return result; } function parseTypeArguments() { - var typeArgumentListStart = scanner.getTokenPos(); - var errorCountBeforeTypeParameterList = file.syntacticErrors.length; - var result = parseBracketedList(15 /* TypeArguments */, parseSingleTypeArgument, 23 /* LessThanToken */, 24 /* GreaterThanToken */); - if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { - grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty); - } - return result; + return parseBracketedList(15 /* TypeArguments */, parseSingleTypeArgument, 23 /* LessThanToken */, 24 /* GreaterThanToken */); } function parseSingleTypeArgument() { if (token === 22 /* CommaToken */) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, ts.Diagnostics.Type_expected); return createNode(120 /* Missing */); } return parseType(); @@ -4048,34 +3814,27 @@ var ts; parseExpected(16 /* CloseParenToken */); return finishNode(node); } - function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic) { - if (token === 22 /* CommaToken */) { - if (omittedExpressionDiagnostic) { - var errorStart = scanner.getTokenPos(); - var errorLength = scanner.getTextPos() - errorStart; - grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic); - } - return createNode(160 /* OmittedExpression */); - } - return parseAssignmentExpression(); + function parseAssignmentExpressionOrOmittedExpression() { + return token === 22 /* CommaToken */ ? createNode(160 /* OmittedExpression */) : parseAssignmentExpression(); } function parseArrayLiteralElement() { - return parseAssignmentExpressionOrOmittedExpression(undefined); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArgumentExpression() { - return parseAssignmentExpressionOrOmittedExpression(ts.Diagnostics.Argument_expression_expected); + return parseAssignmentExpressionOrOmittedExpression(); } function parseArrayLiteral() { var node = createNode(141 /* ArrayLiteral */); parseExpected(17 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) node.flags |= 256 /* MultiLine */; - node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, true); + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement); parseExpected(18 /* CloseBracketToken */); return finishNode(node); } function parsePropertyAssignment() { var nodePos = scanner.getStartPos(); + var tokenIsIdentifier = isIdentifier(); var nameToken = token; var propertyName = parsePropertyName(); var node; @@ -4083,16 +3842,16 @@ var ts; node = createNode(143 /* PropertyAssignment */, nodePos); node.name = propertyName; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); - var body = parseBody(false); + var body = parseFunctionBlock(false); node.initializer = makeFunctionExpression(152 /* FunctionExpression */, node.pos, undefined, sig, body); return finishNode(node); } + var flags = 0; if (token === 49 /* QuestionToken */) { - var questionStart = scanner.getTokenPos(); - grammarErrorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_object_member_cannot_be_declared_optional); + flags |= 4 /* QuestionMark */; nextToken(); } - if (token !== 50 /* ColonToken */ && nameToken === 63 /* Identifier */) { + if ((token === 22 /* CommaToken */ || token === 14 /* CloseBraceToken */) && tokenIsIdentifier) { node = createNode(144 /* ShorthandPropertyAssignment */, nodePos); node.name = propertyName; } @@ -4102,6 +3861,7 @@ var ts; parseExpected(50 /* ColonToken */); node.initializer = parseAssignmentExpression(false); } + node.flags = flags; return finishNode(node); } function parseObjectLiteralMember() { @@ -4109,7 +3869,7 @@ var ts; var initialToken = token; if (parseContextualModifier(113 /* GetKeyword */) || parseContextualModifier(117 /* SetKeyword */)) { var kind = initialToken === 113 /* GetKeyword */ ? 127 /* GetAccessor */ : 128 /* SetAccessor */; - return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); + return parseMemberAccessorDeclaration(kind, initialPos, undefined); } return parsePropertyAssignment(); } @@ -4119,57 +3879,8 @@ var ts; if (scanner.hasPrecedingLineBreak()) { node.flags |= 256 /* MultiLine */; } - node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, true); + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember); parseExpected(14 /* CloseBraceToken */); - var seen = {}; - var Property = 1; - var GetAccessor = 2; - var SetAccesor = 4; - var GetOrSetAccessor = GetAccessor | SetAccesor; - ts.forEach(node.properties, function (p) { - if (p.kind === 160 /* OmittedExpression */) { - return; - } - var name = p.name; - var currentKind; - if (p.kind === 143 /* PropertyAssignment */) { - currentKind = Property; - } - else if (p.kind === 144 /* ShorthandPropertyAssignment */) { - currentKind = Property; - } - else if (p.kind === 127 /* GetAccessor */) { - currentKind = GetAccessor; - } - else if (p.kind === 128 /* SetAccessor */) { - currentKind = SetAccesor; - } - else { - ts.Debug.fail("Unexpected syntax kind:" + p.kind); - } - if (!ts.hasProperty(seen, name.text)) { - seen[name.text] = currentKind; - } - else { - var existingKind = seen[name.text]; - if (currentKind === Property && existingKind === Property) { - if (isInStrictMode) { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); - } - } - else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { - if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { - seen[name.text] = currentKind | existingKind; - } - else { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); - } - } - else { - grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); - } - } - }); return finishNode(node); } function parseFunctionExpression() { @@ -4177,10 +3888,7 @@ var ts; parseExpected(81 /* FunctionKeyword */); var name = isIdentifier() ? parseIdentifier() : undefined; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); - var body = parseBody(false); - if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { - reportInvalidUseInStrictMode(name); - } + var body = parseFunctionBlock(false); return makeFunctionExpression(152 /* FunctionExpression */, pos, name, sig, body); } function makeFunctionExpression(kind, pos, name, sig, body) { @@ -4197,18 +3905,15 @@ var ts; parseExpected(86 /* NewKeyword */); node.func = parseCallAndAccess(parsePrimaryExpression(), true); if (parseOptional(15 /* OpenParenToken */) || token === 23 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false); + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression); parseExpected(16 /* CloseParenToken */); } return finishNode(node); } - function parseStatementAllowingLetDeclaration() { - return parseStatement(true); - } function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) { var node = createNode(161 /* Block */); if (parseExpected(13 /* OpenBraceToken */) || ignoreMissingOpenBrace) { - node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatementAllowingLetDeclaration); + node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); parseExpected(14 /* CloseBraceToken */); } else { @@ -4216,24 +3921,9 @@ var ts; } return finishNode(node); } - function parseBody(ignoreMissingOpenBrace) { - var saveInFunctionBody = inFunctionBody; - var saveInSwitchStatement = inSwitchStatement; - var saveInIterationStatement = inIterationStatement; - inFunctionBody = true; - if (inSwitchStatement === 1 /* Nested */) { - inSwitchStatement = 2 /* CrossingFunctionBoundary */; - } - if (inIterationStatement === 1 /* Nested */) { - inIterationStatement = 2 /* CrossingFunctionBoundary */; - } - labelledStatementInfo.pushFunctionBoundary(); + function parseFunctionBlock(ignoreMissingOpenBrace) { var block = parseBlock(ignoreMissingOpenBrace, true); block.kind = 186 /* FunctionBlock */; - labelledStatementInfo.pop(); - inFunctionBody = saveInFunctionBody; - inSwitchStatement = saveInSwitchStatement; - inIterationStatement = saveInIterationStatement; return block; } function parseEmptyStatement() { @@ -4247,17 +3937,14 @@ var ts; parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - node.thenStatement = parseStatement(false); - node.elseStatement = parseOptional(74 /* ElseKeyword */) ? parseStatement(false) : undefined; + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(74 /* ElseKeyword */) ? parseStatement() : undefined; return finishNode(node); } function parseDoStatement() { var node = createNode(166 /* DoStatement */); parseExpected(73 /* DoKeyword */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + node.statement = parseStatement(); parseExpected(98 /* WhileKeyword */); parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); @@ -4271,10 +3958,7 @@ var ts; parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - node.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + node.statement = parseStatement(); return finishNode(node); } function parseForOrForInStatement() { @@ -4284,27 +3968,12 @@ var ts; if (token !== 21 /* SemicolonToken */) { if (parseOptional(96 /* VarKeyword */)) { var declarations = parseVariableDeclarationList(0, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } } else if (parseOptional(102 /* LetKeyword */)) { var declarations = parseVariableDeclarationList(2048 /* Let */, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else if (parseOptional(68 /* ConstKeyword */)) { var declarations = parseVariableDeclarationList(4096 /* Const */, true); - if (!declarations.length) { - error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } } else { var varOrInit = parseExpression(true); @@ -4314,10 +3983,7 @@ var ts; if (parseOptional(84 /* InKeyword */)) { var forInStatement = createNode(169 /* ForInStatement */, pos); if (declarations) { - if (declarations.length > 1) { - error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); - } - forInStatement.declaration = declarations[0]; + forInStatement.declarations = declarations; } else { forInStatement.variable = varOrInit; @@ -4328,10 +3994,12 @@ var ts; } else { var forStatement = createNode(168 /* ForStatement */, pos); - if (declarations) + if (declarations) { forStatement.declarations = declarations; - if (varOrInit) + } + if (varOrInit) { forStatement.initializer = varOrInit; + } parseExpected(21 /* SemicolonToken */); if (token !== 21 /* SemicolonToken */ && token !== 16 /* CloseParenToken */) { forStatement.condition = parseExpression(); @@ -4343,116 +4011,51 @@ var ts; parseExpected(16 /* CloseParenToken */); forOrForInStatement = forStatement; } - var saveInIterationStatement = inIterationStatement; - inIterationStatement = 1 /* Nested */; - forOrForInStatement.statement = parseStatement(false); - inIterationStatement = saveInIterationStatement; + forOrForInStatement.statement = parseStatement(); return finishNode(forOrForInStatement); } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - var errorCountBeforeStatement = file.syntacticErrors.length; parseExpected(kind === 171 /* BreakStatement */ ? 64 /* BreakKeyword */ : 69 /* ContinueKeyword */); - if (!canParseSemicolon()) + if (!canParseSemicolon()) { node.label = parseIdentifier(); + } parseSemicolon(); - finishNode(node); - if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { - if (node.label) { - checkBreakOrContinueStatementWithLabel(node); - } - else { - checkBareBreakOrContinueStatement(node); - } - } - return node; - } - function checkBareBreakOrContinueStatement(node) { - if (node.kind === 171 /* BreakStatement */) { - if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); - return; - } - } - else if (node.kind === 170 /* ContinueStatement */) { - if (inIterationStatement === 1 /* Nested */) { - return; - } - else if (inIterationStatement === 0 /* NotNested */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); - return; - } - } - else { - ts.Debug.fail("checkAnonymousBreakOrContinueStatement"); - } - ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */); - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - } - function checkBreakOrContinueStatementWithLabel(node) { - var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 170 /* ContinueStatement */, false); - if (nodeIsNestedInLabel === 1 /* Nested */) { - return; - } - if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) { - grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); - return; - } - if (node.kind === 170 /* ContinueStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); - } - else if (node.kind === 171 /* BreakStatement */) { - grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); - } - else { - ts.Debug.fail("checkBreakOrContinueStatementWithLabel"); - } + return finishNode(node); } function parseReturnStatement() { var node = createNode(172 /* ReturnStatement */); - var errorCountBeforeReturnStatement = file.syntacticErrors.length; var returnTokenStart = scanner.getTokenPos(); var returnTokenLength = scanner.getTextPos() - returnTokenStart; parseExpected(88 /* ReturnKeyword */); - if (!canParseSemicolon()) + if (!canParseSemicolon()) { node.expression = parseExpression(); - parseSemicolon(); - if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { - grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); } + parseSemicolon(); return finishNode(node); } function parseWithStatement() { var node = createNode(173 /* WithStatement */); - var startPos = scanner.getTokenPos(); parseExpected(99 /* WithKeyword */); - var endPos = scanner.getStartPos(); parseExpected(15 /* OpenParenToken */); node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); - node.statement = parseStatement(false); - node = finishNode(node); - if (isInStrictMode) { - grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); - } - return node; + node.statement = parseStatement(); + return finishNode(node); } function parseCaseClause() { var node = createNode(175 /* CaseClause */); parseExpected(65 /* CaseKeyword */); node.expression = parseExpression(); parseExpected(50 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); return finishNode(node); } function parseDefaultClause() { var node = createNode(176 /* DefaultClause */); parseExpected(71 /* DefaultKeyword */); parseExpected(50 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); return finishNode(node); } function parseCaseOrDefaultClause() { @@ -4465,18 +4068,8 @@ var ts; node.expression = parseExpression(); parseExpected(16 /* CloseParenToken */); parseExpected(13 /* OpenBraceToken */); - var saveInSwitchStatement = inSwitchStatement; - inSwitchStatement = 1 /* Nested */; node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); - inSwitchStatement = saveInSwitchStatement; parseExpected(14 /* CloseBraceToken */); - var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 176 /* DefaultClause */; }); - for (var i = 1, n = defaultClauses.length; i < n; i++) { - var clause = defaultClauses[i]; - var start = ts.skipTrivia(file.text, clause.pos); - var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; - grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); - } return finishNode(node); } function parseThrowStatement() { @@ -4516,20 +4109,13 @@ var ts; parseExpected(66 /* CatchKeyword */); parseExpected(15 /* OpenParenToken */); var variable = parseIdentifier(); - var typeAnnotationColonStart = scanner.getTokenPos(); - var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; var typeAnnotation = parseTypeAnnotation(); parseExpected(16 /* CloseParenToken */); var result = parseBlock(false, false); result.kind = 181 /* CatchBlock */; result.pos = pos; result.variable = variable; - if (typeAnnotation) { - errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { - reportInvalidUseInStrictMode(variable); - } + result.type = typeAnnotation; return result; } function parseDebuggerStatement() { @@ -4541,24 +4127,14 @@ var ts; function isIterationStatementStart() { return token === 98 /* WhileKeyword */ || token === 73 /* DoKeyword */ || token === 80 /* ForKeyword */; } - function parseStatementWithLabelSet(allowLetAndConstDeclarations) { - labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); - var statement = parseStatement(allowLetAndConstDeclarations); - labelledStatementInfo.pop(); - return statement; - } function isLabel() { return isIdentifier() && lookAhead(function () { return nextToken() === 50 /* ColonToken */; }); } - function parseLabeledStatement(allowLetAndConstDeclarations) { + function parseLabeledStatement() { var node = createNode(177 /* LabeledStatement */); node.label = parseIdentifier(); parseExpected(50 /* ColonToken */); - if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { - grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); - } - labelledStatementInfo.addLabel(node.label); - node.statement = isLabel() ? parseLabeledStatement(allowLetAndConstDeclarations) : parseStatementWithLabelSet(allowLetAndConstDeclarations); + node.statement = isLabel() ? parseLabeledStatement() : parseStatement(); return finishNode(node); } function parseExpressionStatement() { @@ -4612,14 +4188,14 @@ var ts; return isStartOfExpression(); } } - function parseStatement(allowLetAndConstDeclarations) { + function parseStatement() { switch (token) { case 13 /* OpenBraceToken */: return parseBlock(false, false); case 96 /* VarKeyword */: case 102 /* LetKeyword */: case 68 /* ConstKeyword */: - return parseVariableStatement(allowLetAndConstDeclarations); + return parseVariableStatement(); case 81 /* FunctionKeyword */: return parseFunctionDeclaration(); case 21 /* SemicolonToken */: @@ -4651,22 +4227,12 @@ var ts; case 70 /* DebuggerKeyword */: return parseDebuggerStatement(); default: - if (isLabel()) { - return parseLabeledStatement(allowLetAndConstDeclarations); - } - return parseExpressionStatement(); + return isLabel() ? parseLabeledStatement() : parseExpressionStatement(); } } - function parseAndCheckFunctionBody(isConstructor) { - var initialPosition = scanner.getTokenPos(); - var errorCountBeforeBody = file.syntacticErrors.length; + function parseFunctionBlockOrSemicolon() { if (token === 13 /* OpenBraceToken */) { - var body = parseBody(false); - if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { - var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; - grammarErrorAtPos(initialPosition, 1, diagnostic); - } - return body; + return parseFunctionBlock(false); } if (canParseSemicolon()) { parseSemicolon(); @@ -4677,64 +4243,34 @@ var ts; function parseVariableDeclaration(flags, noIn) { var node = createNode(184 /* VariableDeclaration */); node.flags = flags; - var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); var initializerStart = scanner.getTokenPos(); var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; node.initializer = parseInitializer(false, noIn); - if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } - if (!inAmbientContext && !node.initializer && flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized); - } - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { - reportInvalidUseInStrictMode(node.name); - } return finishNode(node); } function parseVariableDeclarationList(flags, noIn) { - return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, false); + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }); } - function parseVariableStatement(allowLetAndConstDeclarations, pos, flags) { + function parseVariableStatement(pos, flags) { var node = createNode(162 /* VariableStatement */, pos); - if (flags) + if (flags) { node.flags = flags; - var errorCountBeforeVarStatement = file.syntacticErrors.length; + } if (token === 102 /* LetKeyword */) { node.flags |= 2048 /* Let */; } else if (token === 68 /* ConstKeyword */) { node.flags |= 4096 /* Const */; } - else if (token !== 96 /* VarKeyword */) { - error(ts.Diagnostics.var_let_or_const_expected); + else { + ts.Debug.assert(token === 96 /* VarKeyword */); } nextToken(); node.declarations = parseVariableDeclarationList(node.flags, false); parseSemicolon(); - finishNode(node); - if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { - grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); - } - if (languageVersion < 2 /* ES6 */) { - if (node.flags & 2048 /* Let */) { - grammarErrorOnNode(node, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - else if (node.flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); - } - } - else if (!allowLetAndConstDeclarations) { - if (node.flags & 2048 /* Let */) { - grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block); - } - else if (node.flags & 4096 /* Const */) { - grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block); - } - } - return node; + return finishNode(node); } function parseFunctionDeclaration(pos, flags) { var node = createNode(185 /* FunctionDeclaration */, pos); @@ -4746,119 +4282,65 @@ var ts; node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(false); - if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name) && node.name.kind === 63 /* Identifier */) { - reportInvalidUseInStrictMode(node.name); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } - function parseConstructorDeclaration(pos, flags) { + function parseConstructorDeclaration(pos, modifiers) { var node = createNode(126 /* Constructor */, pos); - node.flags = flags; + setModifiers(node, modifiers); parseExpected(111 /* ConstructorKeyword */); var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - node.body = parseAndCheckFunctionBody(true); - if (node.typeParameters) { - grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); - } - if (node.type) { - grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } - function parsePropertyMemberDeclaration(pos, flags) { - var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; + function parsePropertyMemberDeclaration(pos, modifiers) { var name = parsePropertyName(); + var flags = modifiers ? modifiers.flags : 0; var questionStart = scanner.getTokenPos(); if (parseOptional(49 /* QuestionToken */)) { - errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional); + flags |= 4 /* QuestionMark */; } if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) { var method = createNode(125 /* Method */, pos); - method.flags = flags; + setModifiers(method, modifiers); + if (flags) { + method.flags = flags; + } method.name = name; var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); method.typeParameters = sig.typeParameters; method.parameters = sig.parameters; method.type = sig.type; - method.body = parseAndCheckFunctionBody(false); + method.body = parseFunctionBlockOrSemicolon(); return finishNode(method); } else { var property = createNode(124 /* Property */, pos); - property.flags = flags; + setModifiers(property, modifiers); + if (flags) { + property.flags = flags; + } property.name = name; property.type = parseTypeAnnotation(); var initializerStart = scanner.getTokenPos(); var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; property.initializer = parseInitializer(false); parseSemicolon(); - if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { - grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); - } return finishNode(property); } } - function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) { - var errorCountBeforeAccessor = file.syntacticErrors.length; - var accessor = parseMemberAccessorDeclaration(kind, pos, flags); - if (errorCountBeforeAccessor === file.syntacticErrors.length) { - if (languageVersion < 1 /* ES5 */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); - } - else if (inAmbientContext) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); - } - else if (accessor.typeParameters) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); - } - else if (kind === 127 /* GetAccessor */ && accessor.parameters.length) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); - } - else if (kind === 128 /* SetAccessor */) { - if (accessor.type) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); - } - else if (accessor.parameters.length !== 1) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } - else { - var parameter = accessor.parameters[0]; - if (parameter.flags & 8 /* Rest */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); - } - else if (parameter.flags & 243 /* Modifier */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } - else if (parameter.flags & 4 /* QuestionMark */) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); - } - else if (parameter.initializer) { - grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); - } - } - } - } - return accessor; - } - function parseMemberAccessorDeclaration(kind, pos, flags) { + function parseMemberAccessorDeclaration(kind, pos, modifiers) { var node = createNode(kind, pos); - node.flags = flags; + setModifiers(node, modifiers); node.name = parsePropertyName(); var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false); node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; node.type = sig.type; - if (inAmbientContext && canParseSemicolon()) { - parseSemicolon(); - node.body = createMissingNode(); - } - else { - node.body = parseBody(false); - } + node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } function isClassMemberStart() { @@ -4891,177 +4373,55 @@ var ts; } return false; } - function parseAndCheckModifiers(context) { + function parseModifiers(context) { var flags = 0; - var lastStaticModifierStart; - var lastStaticModifierLength; - var lastDeclareModifierStart; - var lastDeclareModifierLength; - var lastPrivateModifierStart; - var lastPrivateModifierLength; - var lastProtectedModifierStart; - var lastProtectedModifierLength; + var modifiers; while (true) { var modifierStart = scanner.getTokenPos(); var modifierToken = token; if (!parseAnyContextualModifier()) break; - var modifierLength = scanner.getStartPos() - modifierStart; - switch (modifierToken) { - case 106 /* PublicKeyword */: - if (flags & 112 /* AccessibilityModifier */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); - } - flags |= 16 /* Public */; - break; - case 104 /* PrivateKeyword */: - if (flags & 112 /* AccessibilityModifier */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); - } - lastPrivateModifierStart = modifierStart; - lastPrivateModifierLength = modifierLength; - flags |= 32 /* Private */; - break; - case 105 /* ProtectedKeyword */: - if (flags & 16 /* Public */ || flags & 32 /* Private */ || flags & 64 /* Protected */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); - } - else if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "protected", "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "protected"); - } - lastProtectedModifierStart = modifierStart; - lastProtectedModifierLength = modifierLength; - flags |= 64 /* Protected */; - break; - case 107 /* StaticKeyword */: - if (flags & 128 /* Static */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static"); - } - else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); - } - lastStaticModifierStart = modifierStart; - lastStaticModifierLength = modifierLength; - flags |= 128 /* Static */; - break; - case 76 /* ExportKeyword */: - if (flags & 1 /* Export */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export"); - } - else if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); - } - flags |= 1 /* Export */; - break; - case 112 /* DeclareKeyword */: - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare"); - } - else if (context === 2 /* ClassMembers */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); - } - else if (context === 3 /* Parameters */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); - } - else if (inAmbientContext && context === 1 /* ModuleElements */) { - grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); - } - lastDeclareModifierStart = modifierStart; - lastDeclareModifierLength = modifierLength; - flags |= 2 /* Ambient */; - break; + if (!modifiers) { + modifiers = []; } + flags |= modifierToFlag(modifierToken); + modifiers.push(finishNode(createNode(modifierToken, modifierStart))); } - if (token === 111 /* ConstructorKeyword */ && flags & 128 /* Static */) { - grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + if (modifiers) { + modifiers.flags = flags; } - else if (token === 111 /* ConstructorKeyword */ && flags & 32 /* Private */) { - grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); - } - else if (token === 111 /* ConstructorKeyword */ && flags & 64 /* Protected */) { - grammarErrorAtPos(lastProtectedModifierStart, lastProtectedModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); - } - else if (token === 83 /* ImportKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); - } - } - else if (token === 101 /* InterfaceKeyword */) { - if (flags & 2 /* Ambient */) { - grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); - } - } - else if (token !== 76 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) { - var declarationStart = scanner.getTokenPos(); - var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; - grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); - } - return flags; + return modifiers; } function parseClassMemberDeclaration() { var pos = getNodePos(); - var flags = parseAndCheckModifiers(2 /* ClassMembers */); + var modifiers = parseModifiers(2 /* ClassMembers */); if (parseContextualModifier(113 /* GetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(127 /* GetAccessor */, pos, flags); + return parseMemberAccessorDeclaration(127 /* GetAccessor */, pos, modifiers); } if (parseContextualModifier(117 /* SetKeyword */)) { - return parseAndCheckMemberAccessorDeclaration(128 /* SetAccessor */, pos, flags); + return parseMemberAccessorDeclaration(128 /* SetAccessor */, pos, modifiers); } if (token === 111 /* ConstructorKeyword */) { - return parseConstructorDeclaration(pos, flags); + return parseConstructorDeclaration(pos, modifiers); } if (token >= 63 /* Identifier */ || token === 7 /* StringLiteral */ || token === 6 /* NumericLiteral */) { - return parsePropertyMemberDeclaration(pos, flags); + return parsePropertyMemberDeclaration(pos, modifiers); } if (token === 17 /* OpenBracketToken */) { - if (flags) { - var start = getTokenPos(pos); - var length = getNodePos() - start; - errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); - } - return parseIndexSignatureMember(); + return parseIndexSignatureMember(modifiers, pos); } ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassDeclaration(pos, flags) { var node = createNode(187 /* ClassDeclaration */, pos); node.flags = flags; - var errorCountBeforeClassDeclaration = file.syntacticErrors.length; parseExpected(67 /* ClassKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.baseType = parseOptional(77 /* ExtendsKeyword */) ? parseTypeReference() : undefined; - var implementsKeywordStart = scanner.getTokenPos(); - var implementsKeywordLength; if (parseOptional(100 /* ImplementsKeyword */)) { - implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; - node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference); } - var errorCountBeforeClassBody = file.syntacticErrors.length; if (parseExpected(13 /* OpenBraceToken */)) { node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration); parseExpected(14 /* CloseBraceToken */); @@ -5069,29 +4429,18 @@ var ts; else { node.members = createMissingList(); } - if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { - grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements"); - } return finishNode(node); } function parseInterfaceDeclaration(pos, flags) { var node = createNode(188 /* InterfaceDeclaration */, pos); node.flags = flags; - var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; parseExpected(101 /* InterfaceKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); - var extendsKeywordStart = scanner.getTokenPos(); - var extendsKeywordLength; if (parseOptional(77 /* ExtendsKeyword */)) { - extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; - node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false); + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference); } - var errorCountBeforeInterfaceBody = file.syntacticErrors.length; node.members = parseTypeLiteral().members; - if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { - grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends"); - } return finishNode(node); } function parseTypeAliasDeclaration(pos, flags) { @@ -5106,40 +4455,10 @@ var ts; } function parseAndCheckEnumDeclaration(pos, flags) { var enumIsConst = flags & 4096 /* Const */; - function isIntegerLiteral(expression) { - function isInteger(literalExpression) { - return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); - } - if (expression.kind === 154 /* PrefixOperator */) { - var unaryExpression = expression; - if (unaryExpression.operator === 32 /* PlusToken */ || unaryExpression.operator === 33 /* MinusToken */) { - expression = unaryExpression.operand; - } - } - if (expression.kind === 6 /* NumericLiteral */) { - return isInteger(expression); - } - return false; - } - var inConstantEnumMemberSection = true; - function parseAndCheckEnumMember() { + function parseEnumMember() { var node = createNode(195 /* EnumMember */); - var errorCountBeforeEnumMember = file.syntacticErrors.length; node.name = parsePropertyName(); node.initializer = parseInitializer(false); - if (!enumIsConst) { - if (inAmbientContext) { - if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); - } - } - else if (node.initializer) { - inConstantEnumMemberSection = isIntegerLiteral(node.initializer); - } - else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { - grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer); - } - } return finishNode(node); } var node = createNode(190 /* EnumDeclaration */, pos); @@ -5150,7 +4469,7 @@ var ts; parseExpected(75 /* EnumKeyword */); node.name = parseIdentifier(); if (parseExpected(13 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, true); + node.members = parseDelimitedList(7 /* EnumMembers */, parseEnumMember); parseExpected(14 /* CloseBraceToken */); } else { @@ -5178,14 +4497,6 @@ var ts; } else { node.body = parseModuleBody(); - ts.forEach(node.body.statements, function (s) { - if (s.kind === 194 /* ExportAssignment */) { - grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); - } - else if (s.kind === 193 /* ImportDeclaration */ && s.externalModuleName) { - grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); - } - }); } return finishNode(node); } @@ -5193,16 +4504,7 @@ var ts; var node = createNode(191 /* ModuleDeclaration */, pos); node.flags = flags; node.name = parseStringLiteral(); - if (!inAmbientContext) { - var errorCount = file.syntacticErrors.length; - if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { - grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); - } - } - var saveInAmbientContext = inAmbientContext; - inAmbientContext = true; node.body = parseModuleBody(); - inAmbientContext = saveInAmbientContext; return finishNode(node); } function parseModuleDeclaration(pos, flags) { @@ -5226,8 +4528,9 @@ var ts; parseSemicolon(); return finishNode(node); } - function parseExportAssignmentTail(pos) { + function parseExportAssignmentTail(pos, modifiers) { var node = createNode(194 /* ExportAssignment */, pos); + setModifiers(node, modifiers); node.exportName = parseIdentifier(); parseSemicolon(); return finishNode(node); @@ -5262,29 +4565,20 @@ var ts; } function parseDeclaration(modifierContext) { var pos = getNodePos(); - var errorCountBeforeModifiers = file.syntacticErrors.length; - var flags = parseAndCheckModifiers(modifierContext); + var modifiers = parseModifiers(modifierContext); if (token === 76 /* ExportKeyword */) { var modifiersEnd = scanner.getStartPos(); nextToken(); if (parseOptional(51 /* EqualsToken */)) { - var exportAssignmentTail = parseExportAssignmentTail(pos); - if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { - var modifiersStart = ts.skipTrivia(sourceText, pos); - grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); - } - return exportAssignmentTail; + return parseExportAssignmentTail(pos, modifiers); } } - var saveInAmbientContext = inAmbientContext; - if (flags & 2 /* Ambient */) { - inAmbientContext = true; - } + var flags = modifiers ? modifiers.flags : 0; var result; switch (token) { case 96 /* VarKeyword */: case 102 /* LetKeyword */: - result = parseVariableStatement(true, pos, flags); + result = parseVariableStatement(pos, flags); break; case 68 /* ConstKeyword */: var isConstEnum = lookAhead(function () { return nextToken() === 75 /* EnumKeyword */; }); @@ -5292,7 +4586,7 @@ var ts; result = parseAndCheckEnumDeclaration(pos, flags | 4096 /* Const */); } else { - result = parseVariableStatement(true, pos, flags); + result = parseVariableStatement(pos, flags); } break; case 81 /* FunctionKeyword */: @@ -5319,7 +4613,9 @@ var ts; default: error(ts.Diagnostics.Declaration_expected); } - inAmbientContext = saveInAmbientContext; + if (modifiers) { + result.modifiers = modifiers; + } return result; } function isSourceElement(inErrorRecovery) { @@ -5332,17 +4628,7 @@ var ts; return parseSourceElementOrModuleElement(1 /* ModuleElements */); } function parseSourceElementOrModuleElement(modifierContext) { - if (isDeclarationStart()) { - return parseDeclaration(modifierContext); - } - var statementStart = scanner.getTokenPos(); - var statementFirstTokenLength = scanner.getTextPos() - statementStart; - var errorCountBeforeStatement = file.syntacticErrors.length; - var statement = parseStatement(true); - if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { - grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); - } - return statement; + return isDeclarationStart() ? parseDeclaration(modifierContext) : parseStatement(); } function processReferenceComments() { var referencedFiles = []; @@ -5391,11 +4677,24 @@ var ts; function getExternalModuleIndicator() { return ts.forEach(file.statements, function (node) { return node.flags & 1 /* Export */ || node.kind === 193 /* ImportDeclaration */ && node.externalModuleName || node.kind === 194 /* ExportAssignment */ ? node : undefined; }); } + var syntacticDiagnostics; + function getSyntacticDiagnostics() { + if (syntacticDiagnostics === undefined) { + if (file.parseDiagnostics.length > 0) { + syntacticDiagnostics = file.parseDiagnostics; + } + else { + syntacticDiagnostics = file.grammarDiagnostics; + checkGrammar(sourceText, languageVersion, file); + } + } + ts.Debug.assert(syntacticDiagnostics !== undefined); + return syntacticDiagnostics; + } scanner = ts.createScanner(languageVersion, true, sourceText, scanError, onComment); var rootNodeFlags = 0; if (ts.fileExtensionIs(filename, ".d.ts")) { rootNodeFlags = 1024 /* DeclarationFile */; - inAmbientContext = true; } file = createRootNode(196 /* SourceFile */, 0, sourceText.length, rootNodeFlags); file.filename = ts.normalizePath(filename); @@ -5403,8 +4702,10 @@ var ts; file.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; file.getLineStarts = getLineStarts; - file.syntacticErrors = []; - file.semanticErrors = []; + file.getSyntacticDiagnostics = getSyntacticDiagnostics; + file.parseDiagnostics = []; + file.grammarDiagnostics = []; + file.semanticDiagnostics = []; var referenceComments = processReferenceComments(); file.referencedFiles = referenceComments.referencedFiles; file.amdDependencies = referenceComments.amdDependencies; @@ -5420,6 +4721,901 @@ var ts; return file; } ts.createSourceFile = createSourceFile; + function isLeftHandSideExpression(expr) { + if (expr) { + switch (expr.kind) { + case 145 /* PropertyAccess */: + case 146 /* IndexedAccess */: + case 148 /* NewExpression */: + case 147 /* CallExpression */: + case 149 /* TaggedTemplateExpression */: + case 141 /* ArrayLiteral */: + case 151 /* ParenExpression */: + case 142 /* ObjectLiteral */: + case 152 /* FunctionExpression */: + case 63 /* Identifier */: + case 120 /* Missing */: + case 8 /* RegularExpressionLiteral */: + case 6 /* NumericLiteral */: + case 7 /* StringLiteral */: + case 9 /* NoSubstitutionTemplateLiteral */: + case 158 /* TemplateExpression */: + case 78 /* FalseKeyword */: + case 87 /* NullKeyword */: + case 91 /* ThisKeyword */: + case 93 /* TrueKeyword */: + case 89 /* SuperKeyword */: + return true; + } + } + return false; + } + function isAssignmentOperator(token) { + return token >= 51 /* FirstAssignment */ && token <= 62 /* LastAssignment */; + } + function checkGrammar(sourceText, languageVersion, file) { + var grammarDiagnostics = file.grammarDiagnostics; + var scanner = ts.createScanner(languageVersion, true, sourceText); + var inAmbientContext = ts.fileExtensionIs(file.filename, ".d.ts"); + var inFunctionBlock = false; + var parent; + visitNode(file); + function visitNode(node) { + var savedParent = parent; + node.parent = parent; + parent = node; + if (!checkModifiers(node)) { + var savedInFunctionBlock = inFunctionBlock; + if (node.kind === 186 /* FunctionBlock */) { + inFunctionBlock = true; + } + var savedInAmbientContext = inAmbientContext; + if (node.flags & 2 /* Ambient */) { + inAmbientContext = true; + } + checkNodeAndChildren(node); + inAmbientContext = savedInAmbientContext; + inFunctionBlock = savedInFunctionBlock; + } + parent = savedParent; + } + function checkNodeAndChildren(node) { + var nodeKind = node.kind; + if (inAmbientContext && checkForStatementInAmbientContext(node, nodeKind)) { + return; + } + if (checkNode(node, nodeKind)) { + return; + } + forEachChild(node, visitNode); + } + function checkNode(node, nodeKind) { + switch (nodeKind) { + case 153 /* ArrowFunction */: + case 129 /* CallSignature */: + case 134 /* ConstructorType */: + case 130 /* ConstructSignature */: + case 133 /* FunctionType */: + return checkAnyParsedSignature(node); + case 171 /* BreakStatement */: + case 170 /* ContinueStatement */: + return checkBreakOrContinueStatement(node); + case 147 /* CallExpression */: + case 148 /* NewExpression */: + return checkCallOrNewExpression(node); + case 190 /* EnumDeclaration */: return checkEnumDeclaration(node); + case 123 /* Parameter */: return checkParameter(node); + case 156 /* BinaryExpression */: return checkBinaryExpression(node); + case 181 /* CatchBlock */: return checkCatchBlock(node); + case 187 /* ClassDeclaration */: return checkClassDeclaration(node); + case 126 /* Constructor */: return checkConstructor(node); + case 194 /* ExportAssignment */: return checkExportAssignment(node); + case 169 /* ForInStatement */: return checkForInStatement(node); + case 168 /* ForStatement */: return checkForStatement(node); + case 185 /* FunctionDeclaration */: return checkFunctionDeclaration(node); + case 152 /* FunctionExpression */: return checkFunctionExpression(node); + case 127 /* GetAccessor */: return checkGetAccessor(node); + case 146 /* IndexedAccess */: return checkIndexedAccess(node); + case 131 /* IndexSignature */: return checkIndexSignature(node); + case 188 /* InterfaceDeclaration */: return checkInterfaceDeclaration(node); + case 177 /* LabeledStatement */: return checkLabeledStatement(node); + case 125 /* Method */: return checkMethod(node); + case 191 /* ModuleDeclaration */: return checkModuleDeclaration(node); + case 142 /* ObjectLiteral */: return checkObjectLiteral(node); + case 6 /* NumericLiteral */: return checkNumericLiteral(node); + case 155 /* PostfixOperator */: return checkPostfixOperator(node); + case 154 /* PrefixOperator */: return checkPrefixOperator(node); + case 124 /* Property */: return checkProperty(node); + case 143 /* PropertyAssignment */: return checkPropertyAssignment(node); + case 172 /* ReturnStatement */: return checkReturnStatement(node); + case 128 /* SetAccessor */: return checkSetAccessor(node); + case 196 /* SourceFile */: return checkSourceFile(node); + case 144 /* ShorthandPropertyAssignment */: return checkShorthandPropertyAssignment(node); + case 174 /* SwitchStatement */: return checkSwitchStatement(node); + case 149 /* TaggedTemplateExpression */: return checkTaggedTemplateExpression(node); + case 138 /* TupleType */: return checkTupleType(node); + case 122 /* TypeParameter */: return checkTypeParameter(node); + case 132 /* TypeReference */: return checkTypeReference(node); + case 184 /* VariableDeclaration */: return checkVariableDeclaration(node); + case 162 /* VariableStatement */: return checkVariableStatement(node); + case 173 /* WithStatement */: return checkWithStatement(node); + } + } + function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) { + var start = ts.skipTrivia(sourceText, node.pos); + scanner.setTextPos(start); + scanner.scan(); + var end = scanner.getTextPos(); + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, end - start, message, arg0, arg1, arg2)); + return true; + } + function grammarErrorOnNode(node, message, arg0, arg1, arg2) { + var span = getErrorSpanForNode(node); + var start = span.end > span.pos ? ts.skipTrivia(file.text, span.pos) : span.pos; + var length = span.end - start; + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; + } + function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { + grammarDiagnostics.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + return true; + } + function reportInvalidUseInStrictMode(node) { + var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + return grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); + } + function checkForStatementInAmbientContext(node, kind) { + switch (kind) { + case 161 /* Block */: + case 163 /* EmptyStatement */: + case 165 /* IfStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + case 170 /* ContinueStatement */: + case 171 /* BreakStatement */: + case 172 /* ReturnStatement */: + case 173 /* WithStatement */: + case 174 /* SwitchStatement */: + case 178 /* ThrowStatement */: + case 179 /* TryStatement */: + case 183 /* DebuggerStatement */: + case 177 /* LabeledStatement */: + case 164 /* ExpressionStatement */: + return grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); + } + } + function checkAnyParsedSignature(node) { + return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); + } + function checkBinaryExpression(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { + if (isEvalOrArgumentsIdentifier(node.left)) { + return reportInvalidUseInStrictMode(node.left); + } + } + } + } + function isIterationStatement(node, lookInLabeledStatements) { + switch (node.kind) { + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + return true; + case 177 /* LabeledStatement */: + return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); + } + return false; + } + function checkLabeledStatement(node) { + var current = node.parent; + while (current) { + if (isAnyFunction(current)) { + break; + } + if (current.kind === 177 /* LabeledStatement */ && current.label.text === node.label.text) { + return grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); + } + current = current.parent; + } + } + function checkBreakOrContinueStatement(node) { + var current = node; + while (current) { + if (isAnyFunction(current)) { + return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + } + switch (current.kind) { + case 177 /* LabeledStatement */: + if (node.label && current.label.text === node.label.text) { + var isMisplacedContinueLabel = node.kind === 170 /* ContinueStatement */ && !isIterationStatement(current.statement, true); + if (isMisplacedContinueLabel) { + return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + return false; + } + break; + case 174 /* SwitchStatement */: + if (node.kind === 171 /* BreakStatement */ && !node.label) { + return false; + } + break; + default: + if (isIterationStatement(current, false) && !node.label) { + return false; + } + break; + } + current = current.parent; + } + if (node.label) { + var message = node.kind === 171 /* BreakStatement */ ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } + else { + var message = node.kind === 171 /* BreakStatement */ ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } + } + function checkCallOrNewExpression(node) { + return checkTypeArguments(node.typeArguments) || checkArguments(node.arguments); + } + function checkArguments(arguments) { + return checkForDisallowedTrailingComma(arguments) || checkForOmittedArgument(arguments); + } + function checkTypeArguments(typeArguments) { + return checkForDisallowedTrailingComma(typeArguments) || checkForAtLeastOneTypeArgument(typeArguments) || checkForMissingTypeArgument(typeArguments); + } + function checkForOmittedArgument(arguments) { + if (arguments) { + for (var i = 0, n = arguments.length; i < n; i++) { + var arg = arguments[i]; + if (arg.kind === 160 /* OmittedExpression */) { + return grammarErrorAtPos(arg.pos, 0, ts.Diagnostics.Argument_expression_expected); + } + } + } + } + function checkForMissingTypeArgument(typeArguments) { + if (typeArguments) { + for (var i = 0, n = typeArguments.length; i < n; i++) { + var arg = typeArguments[i]; + if (arg.kind === 120 /* Missing */) { + return grammarErrorAtPos(arg.pos, 0, ts.Diagnostics.Type_expected); + } + } + } + } + function checkForAtLeastOneTypeArgument(typeArguments) { + if (typeArguments && typeArguments.length === 0) { + var start = typeArguments.pos - "<".length; + var end = ts.skipTrivia(sourceText, typeArguments.end) + ">".length; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty); + } + } + function checkForDisallowedTrailingComma(list) { + if (list && list.hasTrailingComma) { + var start = list.end - ",".length; + var end = list.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + function checkCatchBlock(node) { + if (node.type) { + var colonStart = ts.skipTrivia(sourceText, node.variable.end); + return grammarErrorAtPos(colonStart, ":".length, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + } + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.variable)) { + return reportInvalidUseInStrictMode(node.variable); + } + } + function checkClassDeclaration(node) { + return checkForDisallowedTrailingComma(node.implementedTypes) || checkForAtLeastOneHeritageClause(node.implementedTypes, "implements"); + } + function checkForAtLeastOneHeritageClause(types, listType) { + if (types && types.length === 0) { + return grammarErrorAtPos(types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType); + } + } + function checkConstructor(node) { + return checkAnyParsedSignature(node) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node) || checkForBodyInAmbientContext(node.body, true); + } + function checkConstructorTypeParameters(node) { + if (node.typeParameters) { + return grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + } + function checkConstructorTypeAnnotation(node) { + if (node.type) { + return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } + } + function checkEnumDeclaration(enumDecl) { + var enumIsConst = (enumDecl.flags & 4096 /* Const */) !== 0; + var hasError = false; + if (!enumIsConst) { + var inConstantEnumMemberSection = true; + for (var i = 0, n = enumDecl.members.length; i < n; i++) { + var node = enumDecl.members[i]; + if (inAmbientContext) { + if (node.initializer && !isIntegerLiteral(node.initializer)) { + hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError; + } + } + else if (node.initializer) { + inConstantEnumMemberSection = isIntegerLiteral(node.initializer); + } + else if (!inConstantEnumMemberSection) { + hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer) || hasError; + } + } + } + return hasError; + } + function isIntegerLiteral(expression) { + function isInteger(literalExpression) { + return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); + } + if (expression.kind === 154 /* PrefixOperator */) { + var unaryExpression = expression; + if (unaryExpression.operator === 32 /* PlusToken */ || unaryExpression.operator === 33 /* MinusToken */) { + expression = unaryExpression.operand; + } + } + if (expression.kind === 6 /* NumericLiteral */) { + return isInteger(expression); + } + return false; + } + function checkExportAssignment(node) { + if (node.flags & 243 /* Modifier */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); + } + } + function checkForInStatement(node) { + return checkVariableDeclarations(node.declarations) || checkForMoreThanOneDeclaration(node.declarations); + } + function checkForStatement(node) { + return checkVariableDeclarations(node.declarations); + } + function checkForMoreThanOneDeclaration(declarations) { + if (declarations && declarations.length > 1) { + return grammarErrorOnFirstToken(declarations[1], ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + } + } + function checkFunctionDeclaration(node) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name) || checkForBodyInAmbientContext(node.body, false); + } + function checkFunctionExpression(node) { + return checkAnyParsedSignature(node) || checkFunctionName(node.name); + } + function checkFunctionName(name) { + if (name && name.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(name)) { + return reportInvalidUseInStrictMode(name); + } + } + function checkGetAccessor(node) { + return checkAnyParsedSignature(node) || checkAccessor(node); + } + function checkIndexedAccess(node) { + if (node.index.kind === 120 /* Missing */ && node.parent.kind === 148 /* NewExpression */ && node.parent.func === node) { + var start = ts.skipTrivia(sourceText, node.parent.pos); + var end = node.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + } + } + function checkIndexSignature(node) { + return checkIndexSignatureParameters(node) || checkForIndexSignatureModifiers(node); + } + function checkForIndexSignatureModifiers(node) { + if (node.flags & 243 /* Modifier */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); + } + } + function checkIndexSignatureParameters(node) { + var parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + if (parameter) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + else { + return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + } + else if (parameter.flags & 8 /* Rest */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); + } + else if (parameter.flags & 243 /* Modifier */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + } + else if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + } + else if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + } + else if (!parameter.type) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + } + else if (parameter.type.kind !== 118 /* StringKeyword */ && parameter.type.kind !== 116 /* NumberKeyword */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); + } + else if (!node.type) { + return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); + } + } + function checkInterfaceDeclaration(node) { + return checkForDisallowedTrailingComma(node.baseTypes) || checkForAtLeastOneHeritageClause(node.baseTypes, "extends"); + } + function checkMethod(node) { + return checkAnyParsedSignature(node) || checkForBodyInAmbientContext(node.body, false) || (node.parent.kind === 187 /* ClassDeclaration */ && checkForInvalidQuestionMark(node, ts.Diagnostics.A_class_member_cannot_be_declared_optional)); + } + function checkForBodyInAmbientContext(body, isConstructor) { + if (inAmbientContext && body && body.kind === 186 /* FunctionBlock */) { + var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; + return grammarErrorOnFirstToken(body, diagnostic); + } + } + function checkModuleDeclaration(node) { + return checkModuleDeclarationName(node) || checkModuleDeclarationStatements(node); + } + function checkModuleDeclarationName(node) { + if (!inAmbientContext && node.name.kind === 7 /* StringLiteral */) { + return grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + function checkModuleDeclarationStatements(node) { + if (node.name.kind === 63 /* Identifier */ && node.body.kind === 192 /* ModuleBlock */) { + var statements = node.body.statements; + for (var i = 0, n = statements.length; i < n; i++) { + var statement = statements[i]; + if (statement.kind === 194 /* ExportAssignment */) { + return grammarErrorOnNode(statement, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (statement.kind === 193 /* ImportDeclaration */ && statement.externalModuleName) { + return grammarErrorOnNode(statement.externalModuleName, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + } + } + } + function checkObjectLiteral(node) { + var seen = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccesor = 4; + var GetOrSetAccessor = GetAccessor | SetAccesor; + var inStrictMode = (node.flags & 8192 /* ParsedInStrictMode */) !== 0; + for (var i = 0, n = node.properties.length; i < n; i++) { + var prop = node.properties[i]; + if (prop.kind === 160 /* OmittedExpression */) { + continue; + } + var p = prop; + var name = p.name; + var currentKind; + if (p.kind === 143 /* PropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 144 /* ShorthandPropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 127 /* GetAccessor */) { + currentKind = GetAccessor; + } + else if (p.kind === 128 /* SetAccessor */) { + currentKind = SetAccesor; + } + else { + ts.Debug.fail("Unexpected syntax kind:" + p.kind); + } + if (!ts.hasProperty(seen, name.text)) { + seen[name.text] = currentKind; + } + else { + var existingKind = seen[name.text]; + if (currentKind === Property && existingKind === Property) { + if (inStrictMode) { + grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); + } + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[name.text] = currentKind | existingKind; + } + else { + return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + } + } + else { + return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + } + } + function checkNumericLiteral(node) { + if (node.flags & 16384 /* OctalLiteral */) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); + } + else if (languageVersion >= 1 /* ES5 */) { + return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); + } + } + } + function checkModifiers(node) { + switch (node.kind) { + case 127 /* GetAccessor */: + case 128 /* SetAccessor */: + case 126 /* Constructor */: + case 124 /* Property */: + case 125 /* Method */: + case 131 /* IndexSignature */: + case 187 /* ClassDeclaration */: + case 188 /* InterfaceDeclaration */: + case 191 /* ModuleDeclaration */: + case 190 /* EnumDeclaration */: + case 194 /* ExportAssignment */: + case 162 /* VariableStatement */: + case 185 /* FunctionDeclaration */: + case 189 /* TypeAliasDeclaration */: + case 193 /* ImportDeclaration */: + case 123 /* Parameter */: + break; + default: + return false; + } + if (!node.modifiers) { + return; + } + var lastStatic, lastPrivate, lastProtected, lastDeclare; + var flags = 0; + for (var i = 0, n = node.modifiers.length; i < n; i++) { + var modifier = node.modifiers[i]; + switch (modifier.kind) { + case 106 /* PublicKeyword */: + case 105 /* ProtectedKeyword */: + case 104 /* PrivateKeyword */: + var text; + if (modifier.kind === 106 /* PublicKeyword */) { + text = "public"; + } + else if (modifier.kind === 105 /* ProtectedKeyword */) { + text = "protected"; + lastProtected = modifier; + } + else { + text = "private"; + lastPrivate = modifier; + } + if (flags & 112 /* AccessibilityModifier */) { + return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 128 /* Static */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); + } + else if (node.parent.kind === 192 /* ModuleBlock */ || node.parent.kind === 196 /* SourceFile */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); + } + flags |= modifierToFlag(modifier.kind); + break; + case 107 /* StaticKeyword */: + if (flags & 128 /* Static */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static"); + } + else if (node.parent.kind === 192 /* ModuleBlock */ || node.parent.kind === 196 /* SourceFile */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } + flags |= 128 /* Static */; + lastStatic = modifier; + break; + case 76 /* ExportKeyword */: + if (flags & 1 /* Export */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export"); + } + else if (flags & 2 /* Ambient */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } + else if (node.parent.kind === 187 /* ClassDeclaration */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= 1 /* Export */; + break; + case 112 /* DeclareKeyword */: + if (flags & 2 /* Ambient */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare"); + } + else if (node.parent.kind === 187 /* ClassDeclaration */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (node.kind === 123 /* Parameter */) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (inAmbientContext && node.parent.kind === 192 /* ModuleBlock */) { + return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + flags |= 2 /* Ambient */; + lastDeclare = modifier; + break; + } + } + if (node.kind === 126 /* Constructor */) { + if (flags & 128 /* Static */) { + return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + } + else if (flags & 64 /* Protected */) { + return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); + } + else if (flags & 32 /* Private */) { + return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); + } + } + else if (node.kind === 193 /* ImportDeclaration */ && flags & 2 /* Ambient */) { + return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } + else if (node.kind === 188 /* InterfaceDeclaration */ && flags & 2 /* Ambient */) { + return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); + } + } + function checkParameter(node) { + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.name)) { + return reportInvalidUseInStrictMode(node.name); + } + } + function checkTypeParameterList(typeParameters) { + if (checkForDisallowedTrailingComma(typeParameters)) { + return true; + } + if (typeParameters && typeParameters.length === 0) { + var start = typeParameters.pos - "<".length; + var end = ts.skipTrivia(sourceText, typeParameters.end) + ">".length; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty); + } + } + function checkParameterList(parameters) { + if (checkForDisallowedTrailingComma(parameters)) { + return true; + } + var seenOptionalParameter = false; + var parameterCount = parameters.length; + for (var i = 0; i < parameterCount; i++) { + var parameter = parameters[i]; + if (parameter.flags & 8 /* Rest */) { + if (i !== (parameterCount - 1)) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + } + if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); + } + if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); + } + } + else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { + seenOptionalParameter = true; + if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + } + } + else { + if (seenOptionalParameter) { + return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + } + } + } + } + function checkPostfixOperator(node) { + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.operand)) { + return reportInvalidUseInStrictMode(node.operand); + } + } + function checkPrefixOperator(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + if ((node.operator === 37 /* PlusPlusToken */ || node.operator === 38 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(node.operand)) { + return reportInvalidUseInStrictMode(node.operand); + } + else if (node.operator === 72 /* DeleteKeyword */ && node.operand.kind === 63 /* Identifier */) { + return grammarErrorOnNode(node.operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + } + } + } + function checkProperty(node) { + return (node.parent.kind === 187 /* ClassDeclaration */ && checkForInvalidQuestionMark(node, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) || checkForInitializerInAmbientContext(node); + } + function checkForInitializerInAmbientContext(node) { + if (inAmbientContext && node.initializer) { + return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + } + function checkPropertyAssignment(node) { + return checkForInvalidQuestionMark(node, ts.Diagnostics.An_object_member_cannot_be_declared_optional); + } + function checkForInvalidQuestionMark(node, message) { + if (node.flags & 4 /* QuestionMark */) { + var pos = ts.skipTrivia(sourceText, node.name.end); + return grammarErrorAtPos(pos, "?".length, message); + } + } + function checkReturnStatement(node) { + if (!inFunctionBlock) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + } + } + function checkSetAccessor(node) { + return checkAnyParsedSignature(node) || checkAccessor(node); + } + function checkAccessor(accessor) { + var kind = accessor.kind; + if (languageVersion < 1 /* ES5 */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); + } + else if (inAmbientContext) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); + } + else if (accessor.body === undefined) { + return grammarErrorAtPos(accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); + } + else if (accessor.typeParameters) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); + } + else if (kind === 127 /* GetAccessor */ && accessor.parameters.length) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + } + else if (kind === 128 /* SetAccessor */) { + if (accessor.type) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + else if (accessor.parameters.length !== 1) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else { + var parameter = accessor.parameters[0]; + if (parameter.flags & 8 /* Rest */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + else if (parameter.flags & 243 /* Modifier */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + else if (parameter.flags & 4 /* QuestionMark */) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + else if (parameter.initializer) { + return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } + } + } + function checkSourceFile(node) { + return inAmbientContext && checkTopLevelElementsForRequiredDeclareModifier(file); + } + function checkTopLevelElementsForRequiredDeclareModifier(file) { + for (var i = 0, n = file.statements.length; i < n; i++) { + var decl = file.statements[i]; + if (isDeclaration(decl) || decl.kind === 162 /* VariableStatement */) { + if (checkTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + } + function checkTopLevelElementForRequiredDeclareModifier(node) { + if (node.kind === 188 /* InterfaceDeclaration */ || node.kind === 193 /* ImportDeclaration */ || node.kind === 194 /* ExportAssignment */ || (node.flags & 2 /* Ambient */)) { + return false; + } + return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + function checkShorthandPropertyAssignment(node) { + return checkForInvalidQuestionMark(node, ts.Diagnostics.An_object_member_cannot_be_declared_optional); + } + function checkSwitchStatement(node) { + var firstDefaultClause; + for (var i = 0, n = node.clauses.length; i < n; i++) { + var clause = node.clauses[i]; + if (clause.kind === 176 /* DefaultClause */) { + if (firstDefaultClause === undefined) { + firstDefaultClause = clause; + } + else { + var start = ts.skipTrivia(file.text, clause.pos); + var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; + return grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + } + } + } + } + function checkTaggedTemplateExpression(node) { + if (languageVersion < 2 /* ES6 */) { + return grammarErrorOnFirstToken(node.template, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } + function checkTupleType(node) { + return checkForDisallowedTrailingComma(node.elementTypes) || checkForAtLeastOneType(node); + } + function checkForAtLeastOneType(node) { + if (node.elementTypes.length === 0) { + return grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); + } + } + function checkTypeParameter(node) { + if (node.expression) { + return grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected); + } + } + function checkTypeReference(node) { + return checkTypeArguments(node.typeArguments); + } + function checkVariableDeclaration(node) { + if (inAmbientContext && node.initializer) { + var equalsPos = node.type ? ts.skipTrivia(sourceText, node.type.end) : ts.skipTrivia(sourceText, node.name.end); + return grammarErrorAtPos(equalsPos, "=".length, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + if (!inAmbientContext && !node.initializer && node.flags & 4096 /* Const */) { + return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized); + } + if (node.flags & 8192 /* ParsedInStrictMode */ && isEvalOrArgumentsIdentifier(node.name)) { + return reportInvalidUseInStrictMode(node.name); + } + } + function checkVariableDeclarations(declarations) { + if (declarations) { + if (checkForDisallowedTrailingComma(declarations)) { + return true; + } + if (!declarations.length) { + return grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + var decl = declarations[0]; + if (languageVersion < 2 /* ES6 */) { + if (decl.flags & 2048 /* Let */) { + return grammarErrorOnFirstToken(decl, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + else if (decl.flags & 4096 /* Const */) { + return grammarErrorOnFirstToken(decl, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + } + } + } + function checkVariableStatement(node) { + return checkVariableDeclarations(node.declarations) || checkForDisallowedLetOrConstStatement(node); + } + function checkForDisallowedLetOrConstStatement(node) { + if (!allowLetAndConstDeclarations(node.parent)) { + if (node.flags & 2048 /* Let */) { + return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block); + } + else if (node.flags & 4096 /* Const */) { + return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block); + } + } + } + function allowLetAndConstDeclarations(parent) { + switch (parent.kind) { + case 165 /* IfStatement */: + case 166 /* DoStatement */: + case 167 /* WhileStatement */: + case 173 /* WithStatement */: + case 168 /* ForStatement */: + case 169 /* ForInStatement */: + return false; + case 177 /* LabeledStatement */: + return allowLetAndConstDeclarations(parent.parent); + } + return true; + } + function checkWithStatement(node) { + if (node.flags & 8192 /* ParsedInStrictMode */) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } + } function createProgram(rootNames, options, host) { var program; var files = []; @@ -5517,7 +5713,7 @@ var ts; else { files.push(file); } - ts.forEach(file.syntacticErrors, function (e) { + ts.forEach(file.getSyntacticDiagnostics(), function (e) { errors.push(e); }); } @@ -5721,9 +5917,9 @@ var ts; } var message = symbol.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; ts.forEach(symbol.declarations, function (declaration) { - file.semanticErrors.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticErrors.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -5738,7 +5934,7 @@ var ts; if (node.name) { node.name.parent = node; } - file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + file.semanticDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); } symbol.exports[prototypeSymbol.name] = prototypeSymbol; prototypeSymbol.parent = symbol; @@ -6609,8 +6805,8 @@ var ts; return; } ts.Debug.assert(node.parent.kind !== 149 /* TaggedTemplateExpression */); - var templateNeedsParens = ts.isExpression(node.parent) && node.parent.kind !== 151 /* ParenExpression */ && comparePrecedenceToBinaryPlus(node.parent) !== -1 /* LessThan */; - if (templateNeedsParens) { + var emitOuterParens = ts.isExpression(node.parent) && templateNeedsParens(node, node.parent); + if (emitOuterParens) { write("("); } emitLiteral(node.head); @@ -6629,9 +6825,22 @@ var ts; emitLiteral(templateSpan.literal); } }); - if (templateNeedsParens) { + if (emitOuterParens) { write(")"); } + function templateNeedsParens(template, parent) { + switch (parent.kind) { + case 147 /* CallExpression */: + case 148 /* NewExpression */: + return parent.func === template; + case 151 /* ParenExpression */: + return false; + case 149 /* TaggedTemplateExpression */: + ts.Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6."); + default: + return comparePrecedenceToBinaryPlus(parent) !== -1 /* LessThan */; + } + } function comparePrecedenceToBinaryPlus(expression) { ts.Debug.assert(compilerOptions.target <= 1 /* ES5 */); switch (expression.kind) { @@ -7026,15 +7235,18 @@ var ts; var endPos = emitToken(80 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(15 /* OpenParenToken */, endPos); - if (node.declaration) { - if (node.declaration.flags & 2048 /* Let */) { - emitToken(102 /* LetKeyword */, endPos); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + if (decl.flags & 2048 /* Let */) { + emitToken(102 /* LetKeyword */, endPos); + } + else { + emitToken(96 /* VarKeyword */, endPos); + } + write(" "); + emit(decl); } - else { - emitToken(96 /* VarKeyword */, endPos); - } - write(" "); - emit(node.declaration); } else { emit(node.variable); @@ -10330,7 +10542,7 @@ var ts; type = setterParameterType; } else { - if (getter) { + if (getter && getter.body) { type = getReturnTypeFromBody(getter); } else { @@ -14846,10 +15058,13 @@ var ts; checkSourceElement(node.statement); } function checkForInStatement(node) { - if (node.declaration) { - checkVariableDeclaration(node.declaration); - if (node.declaration.type) { - error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + if (node.declarations) { + if (node.declarations.length >= 1) { + var decl = node.declarations[0]; + checkVariableDeclaration(decl); + if (decl.type) { + error(decl, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + } } } if (node.variable) { @@ -16140,7 +16355,7 @@ var ts; function initializeTypeChecker() { ts.forEach(program.getSourceFiles(), function (file) { ts.bindSourceFile(file); - ts.forEach(file.semanticErrors, addDiagnostic); + ts.forEach(file.semanticDiagnostics, addDiagnostic); }); ts.forEach(program.getSourceFiles(), function (file) { if (!ts.isExternalModule(file)) { @@ -17189,7 +17404,7 @@ var ts; if (node.parent) { switch (node.parent.kind) { case 132 /* TypeReference */: - if (node.parent.typeArguments) { + if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { return node.parent.typeArguments; } break; @@ -17203,16 +17418,24 @@ var ts; case 125 /* Method */: case 129 /* CallSignature */: case 130 /* ConstructSignature */: - if (node.parent.typeParameters && node.end < node.parent.typeParameters.end) { + var start = node.getStart(sourceFile); + if (node.parent.typeParameters && ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { return node.parent.typeParameters; } - return node.parent.parameters; + if (ts.rangeContainsStartEnd(node.parent.parameters, start, node.getEnd())) { + return node.parent.parameters; + } + break; case 148 /* NewExpression */: case 147 /* CallExpression */: - if (node.parent.typeArguments && node.end < node.parent.typeArguments.end) { + var start = node.getStart(sourceFile); + if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { return node.parent.typeArguments; } - return node.parent.arguments; + if (ts.rangeContainsStartEnd(node.parent.arguments, start, node.getEnd())) { + return node.parent.arguments; + } + break; } } return undefined; @@ -18599,7 +18822,7 @@ var ts; return precedingToken ? precedingToken.end : enclosingNode.pos; } function formatSpan(originalRange, sourceFile, options, rulesProvider, requestKind) { - var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.syntacticErrors, originalRange); + var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.getSyntacticDiagnostics(), originalRange); var formattingContext = new formatting.FormattingContext(sourceFile, requestKind); var enclosingNode = findEnclosingNode(originalRange, sourceFile); var formattingScanner = formatting.getFormattingScanner(sourceFile, getScanStartPosition(enclosingNode, originalRange, sourceFile), originalRange.end); @@ -19568,6 +19791,9 @@ var ts; SourceFileObject.prototype.getLineStarts = function () { return undefined; }; + SourceFileObject.prototype.getSyntacticDiagnostics = function () { + return undefined; + }; SourceFileObject.prototype.getScriptSnapshot = function () { return this.scriptSnapshot; }; @@ -20830,7 +21056,7 @@ var ts; while (true) { node = node.parent; if (!node) { - return node; + return undefined; } switch (node.kind) { case 196 /* SourceFile */: @@ -21803,6 +22029,9 @@ var ts; if (declarations) { for (var i = 0, n = declarations.length; i < n; i++) { var container = getContainerNode(declarations[i]); + if (!container) { + return undefined; + } if (scope && scope !== container) { return undefined; } @@ -22190,8 +22419,8 @@ var ts; matchKind: MatchKind[matchKind], fileName: filename, textSpan: ts.TextSpan.fromBounds(declaration.getStart(), declaration.getEnd()), - containerName: container.name ? container.name.text : "", - containerKind: container.name ? getNodeKind(container) : "" + containerName: container && container.name ? container.name.text : "", + containerKind: container && container.name ? getNodeKind(container) : "" }); } } @@ -22306,9 +22535,10 @@ var ts; else { return 4 /* Namespace */; } - break; case 193 /* ImportDeclaration */: return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + case 196 /* SourceFile */: + return 4 /* Namespace */ | 1 /* Value */; } ts.Debug.fail("Unknown declaration type"); } From 7d103a1a4526240031c9a2bd9eeb33dbb1b7ecab Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 20 Nov 2014 15:43:07 -0800 Subject: [PATCH 120/178] Remove the --noResolve check when finding the file. --noResolve is only for ///reference and import file resolution to resolve files from disk but the file identity is always determined before creating duplicate source file for same file paths --- src/compiler/parser.ts | 18 ++++++++---------- .../amd/diskFile0.js | 5 +++++ .../amd/diskFile1.d.ts | 2 ++ .../amd/referenceResolutionSameFileTwice.json | 18 ++++++++++++++++++ .../node/diskFile0.js | 5 +++++ .../node/diskFile1.d.ts | 2 ++ .../node/referenceResolutionSameFileTwice.json | 18 ++++++++++++++++++ .../amd/diskFile0.js | 5 +++++ .../amd/diskFile1.d.ts | 2 ++ ...erenceResolutionSameFileTwiceNoResolve.json | 18 ++++++++++++++++++ .../node/diskFile0.js | 5 +++++ .../node/diskFile1.d.ts | 2 ++ ...erenceResolutionSameFileTwiceNoResolve.json | 18 ++++++++++++++++++ .../referenceResolutionSameFileTwice.json | 10 ++++++++++ ...erenceResolutionSameFileTwiceNoResolve.json | 11 +++++++++++ .../cases/projects/ReferenceResolution/test.ts | 2 ++ 16 files changed, 131 insertions(+), 10 deletions(-) create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/referenceResolutionSameFileTwice.json create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwice/node/referenceResolutionSameFileTwice.json create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/referenceResolutionSameFileTwiceNoResolve.json create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile0.js create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile1.d.ts create mode 100644 tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/referenceResolutionSameFileTwiceNoResolve.json create mode 100644 tests/cases/project/referenceResolutionSameFileTwice.json create mode 100644 tests/cases/project/referenceResolutionSameFileTwiceNoResolve.json create mode 100644 tests/cases/projects/ReferenceResolution/test.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 3939270a96a..b8f3623ee42 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4427,13 +4427,10 @@ module ts { return getSourceFileFromCache(filename, canonicalName, /*useAbsolutePath*/ false); } else { - // if --noResolve is not specified check if we have file for absolute path - if (!options.noResolve) { - var normalizedAbsolutePath = getNormalizedAbsolutePath(filename, host.getCurrentDirectory()); - var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath); - if (hasProperty(filesByName, canonicalAbsolutePath)) { - return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, /*useAbsolutePath*/ true); - } + var normalizedAbsolutePath = getNormalizedAbsolutePath(filename, host.getCurrentDirectory()); + var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath); + if (hasProperty(filesByName, canonicalAbsolutePath)) { + return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, /*useAbsolutePath*/ true); } // We haven't looked for this file, do so now and cache result @@ -4443,10 +4440,11 @@ module ts { }); if (file) { seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; - if (!options.noResolve) { - // Set the source file for normalized absolute path - filesByName[canonicalAbsolutePath] = file; + // Set the source file for normalized absolute path + filesByName[canonicalAbsolutePath] = file; + + if (!options.noResolve) { var basePath = getDirectoryPath(filename); processReferencedFiles(file, basePath); processImportedModules(file, basePath); diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile0.js new file mode 100644 index 00000000000..c82f04ec515 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile0.js @@ -0,0 +1,5 @@ +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile1.d.ts new file mode 100644 index 00000000000..be748d27cfd --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class test { +} diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/referenceResolutionSameFileTwice.json b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/referenceResolutionSameFileTwice.json new file mode 100644 index 00000000000..9334271f8eb --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/amd/referenceResolutionSameFileTwice.json @@ -0,0 +1,18 @@ +{ + "scenario": "referenceResolutionSameFileTwice", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "test.ts" + ], + "emittedFiles": [ + "test.js", + "test.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile0.js new file mode 100644 index 00000000000..c82f04ec515 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile0.js @@ -0,0 +1,5 @@ +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile1.d.ts new file mode 100644 index 00000000000..be748d27cfd --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class test { +} diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/referenceResolutionSameFileTwice.json b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/referenceResolutionSameFileTwice.json new file mode 100644 index 00000000000..9334271f8eb --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwice/node/referenceResolutionSameFileTwice.json @@ -0,0 +1,18 @@ +{ + "scenario": "referenceResolutionSameFileTwice", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "test.ts" + ], + "emittedFiles": [ + "test.js", + "test.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile0.js b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile0.js new file mode 100644 index 00000000000..c82f04ec515 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile0.js @@ -0,0 +1,5 @@ +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile1.d.ts new file mode 100644 index 00000000000..be748d27cfd --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class test { +} diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/referenceResolutionSameFileTwiceNoResolve.json b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/referenceResolutionSameFileTwiceNoResolve.json new file mode 100644 index 00000000000..b22aefac3ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/amd/referenceResolutionSameFileTwiceNoResolve.json @@ -0,0 +1,18 @@ +{ + "scenario": "referenceResolutionSameFileTwice_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "test.ts" + ], + "emittedFiles": [ + "test.js", + "test.d.ts" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile0.js b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile0.js new file mode 100644 index 00000000000..c82f04ec515 --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile0.js @@ -0,0 +1,5 @@ +var test = (function () { + function test() { + } + return test; +})(); diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile1.d.ts b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile1.d.ts new file mode 100644 index 00000000000..be748d27cfd --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/diskFile1.d.ts @@ -0,0 +1,2 @@ +declare class test { +} diff --git a/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/referenceResolutionSameFileTwiceNoResolve.json b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/referenceResolutionSameFileTwiceNoResolve.json new file mode 100644 index 00000000000..b22aefac3ef --- /dev/null +++ b/tests/baselines/reference/project/referenceResolutionSameFileTwiceNoResolve/node/referenceResolutionSameFileTwiceNoResolve.json @@ -0,0 +1,18 @@ +{ + "scenario": "referenceResolutionSameFileTwice_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "declaration": true, + "baselineCheck": true, + "resolvedInputFiles": [ + "lib.d.ts", + "test.ts" + ], + "emittedFiles": [ + "test.js", + "test.d.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionSameFileTwice.json b/tests/cases/project/referenceResolutionSameFileTwice.json new file mode 100644 index 00000000000..00a8f6e103e --- /dev/null +++ b/tests/cases/project/referenceResolutionSameFileTwice.json @@ -0,0 +1,10 @@ +{ + "scenario": "referenceResolutionSameFileTwice", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "declaration": true, + "baselineCheck": true +} \ No newline at end of file diff --git a/tests/cases/project/referenceResolutionSameFileTwiceNoResolve.json b/tests/cases/project/referenceResolutionSameFileTwiceNoResolve.json new file mode 100644 index 00000000000..8c77bd038cf --- /dev/null +++ b/tests/cases/project/referenceResolutionSameFileTwiceNoResolve.json @@ -0,0 +1,11 @@ +{ + "scenario": "referenceResolutionSameFileTwice_NoResolve", + "projectRoot": "tests/cases/projects/ReferenceResolution/", + "inputFiles": [ + "test.ts", + "../ReferenceResolution/test.ts" + ], + "noResolve": true, + "declaration": true, + "baselineCheck": true +} \ No newline at end of file diff --git a/tests/cases/projects/ReferenceResolution/test.ts b/tests/cases/projects/ReferenceResolution/test.ts new file mode 100644 index 00000000000..212b620415e --- /dev/null +++ b/tests/cases/projects/ReferenceResolution/test.ts @@ -0,0 +1,2 @@ +class test { +} \ No newline at end of file From b8a8c35f3fd1f64c844c7b93842bc5453bfe83bb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 16:19:19 -0800 Subject: [PATCH 121/178] Have the parser give real positions for empty tokens. Previously this was difficult because we didn't know where empty tokens would go due to the presense of skipped tokens. Thanks to the recent work i did to place skipped tokens on the *next* real token we hit, this became much simpler. --- src/services/syntax/incrementalParser.ts | 1 + src/services/syntax/parser.ts | 32 ++++++++-- src/services/syntax/syntaxToken.ts | 80 ++---------------------- 3 files changed, 34 insertions(+), 79 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index b234b77e03f..be0b26cf302 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -592,6 +592,7 @@ module TypeScript.IncrementalParser { text: text, fileName: fileName, languageVersion: languageVersion, + absolutePosition: absolutePosition, currentNode: currentNode, currentToken: currentToken, currentContextualToken: currentContextualToken, diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 80c813ca162..b1b197cd1ea 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -45,6 +45,9 @@ module TypeScript.Parser { // but can affect the diagnostics produced while parsing. languageVersion: ts.ScriptTarget; + // The place in the source text that we're currently pointing at. + absolutePosition(): number; + // The current syntax node the source is pointing at. Only available in incremental settings. // The source can point at a node if that node doesn't intersect any of the text changes in // the file, and doesn't contain certain unacceptable constructs. For example, if the node @@ -541,13 +544,32 @@ module TypeScript.Parser { return eatToken(SyntaxKind.SemicolonToken); } + function createEmptyToken(kind: SyntaxKind): ISyntaxToken { + // The position of the empty token we're creating is not necessarily the position that + // the parser is at now. This is because we may have seen some existing missing tokens + // before finally deciding we needed a missing token. For example, if you have: + // + // Foo(a, # + // + // We will need to create a empty token for the missing ")". However, we will have + // skipped the "#" token, and thus will be right after the "#". Because the "#" token + // will actually become *skipped* trivia on the *next* token we see, the close paren + // should not be considered to be after #, and should instead be after the ",". + // + // So, if we have any skipped tokens, then the position of the empty token should be + // the position of the first skipped token we have. Otherwise it's just at the position + // of the parser. + var fullStart = _skippedTokens ? _skippedTokens[0].fullStart() : source.absolutePosition(); + return Syntax.emptyToken(kind, fullStart); + } + function createMissingToken(expectedKind: SyntaxKind, actual: ISyntaxToken, diagnosticCode?: string): ISyntaxToken { var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode); addDiagnostic(diagnostic); // The missing token will be at the full start of the current token. That way empty tokens // will always be between real tokens and not inside an actual token. - return Syntax.emptyToken(expectedKind); + return createEmptyToken(expectedKind); } function getExpectedTokenDiagnostic(expectedKind: SyntaxKind, actual?: ISyntaxToken, diagnosticCode?: string): Diagnostic { @@ -2871,7 +2893,7 @@ module TypeScript.Parser { addDiagnostic(diagnostic); return new ArgumentListSyntax(parseNodeData, typeArgumentList, - Syntax.emptyToken(SyntaxKind.OpenParenToken), [], Syntax.emptyToken(SyntaxKind.CloseParenToken)); + createEmptyToken(SyntaxKind.OpenParenToken), [], createEmptyToken(SyntaxKind.CloseParenToken)); } else { Debug.assert(token0.kind === SyntaxKind.OpenParenToken); @@ -2931,7 +2953,7 @@ module TypeScript.Parser { DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, undefined); addDiagnostic(diagnostic); - return Syntax.emptyToken(SyntaxKind.IdentifierName); + return createEmptyToken(SyntaxKind.IdentifierName); } else { return allowInAnd(parseExpression); @@ -3086,7 +3108,7 @@ module TypeScript.Parser { else { var diagnostic = getExpectedTokenDiagnostic(SyntaxKind.CloseBraceToken); addDiagnostic(diagnostic); - token = Syntax.emptyToken(SyntaxKind.TemplateEndToken); + token = createEmptyToken(SyntaxKind.TemplateEndToken); } return new TemplateClauseSyntax(parseNodeData, expression, token); @@ -4219,7 +4241,7 @@ module TypeScript.Parser { // consume the '}' just fine. So ASI doesn't apply. if (allowAutomaticSemicolonInsertion && canEatAutomaticSemicolon(/*allowWithoutNewline:*/ false)) { - var semicolonToken = eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) || Syntax.emptyToken(SyntaxKind.SemicolonToken); + var semicolonToken = eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) || createEmptyToken(SyntaxKind.SemicolonToken); nodesAndSeparators.push(semicolonToken); // Debug.assert(items.length % 2 === 0); continue; diff --git a/src/services/syntax/syntaxToken.ts b/src/services/syntax/syntaxToken.ts index 6b6854cd08e..9ddbc3a800c 100644 --- a/src/services/syntax/syntaxToken.ts +++ b/src/services/syntax/syntaxToken.ts @@ -290,8 +290,8 @@ module TypeScript.Syntax { return new RealizedToken(token.fullStart(), token.kind, token.isKeywordConvertedToIdentifier(), leadingTrivia, token.text()); } - export function emptyToken(kind: SyntaxKind): ISyntaxToken { - return new EmptyToken(kind); + export function emptyToken(kind: SyntaxKind, fullStart: number): ISyntaxToken { + return new EmptyToken(kind, fullStart); } class EmptyToken implements ISyntaxToken { @@ -300,17 +300,17 @@ module TypeScript.Syntax { public parent: ISyntaxElement; public childCount: number; - constructor(public kind: SyntaxKind) { + constructor(public kind: SyntaxKind, private _fullStart: number) { } public setFullStart(fullStart: number): void { - // An empty token is always at the -1 position. + this._fullStart = fullStart; } public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } public clone(): ISyntaxToken { - return new EmptyToken(this.kind); + return new EmptyToken(this.kind, this._fullStart); } // Empty tokens are never incrementally reusable. @@ -321,75 +321,7 @@ module TypeScript.Syntax { } public fullWidth() { return 0; } - - private position(): number { - // It's hard for us to tell the position of an empty token at the eact time we create - // it. For example, we may have: - // - // a / finally - // - // There will be a missing token detected after the forward slash, so it would be - // tempting to set its position as the full-end of hte slash token. However, - // immediately after that, the 'finally' token will be skipped and will be attached - // as skipped text to the forward slash. This means the 'full-end' of the forward - // slash will change, and thus the empty token will now appear to be embedded inside - // another token. This violates are rule that all tokens must only touch at the end, - // and makes enforcing invariants much harder. - // - // To address this we create the empty token with no known position, and then we - // determine what it's position should be based on where it lies in the tree. - // Specifically, we find the previous non-zero-width syntax element, and we consider - // the full-start of this token to be at the full-end of that element. - - var previousElement = this.previousNonZeroWidthElement(); - return !previousElement ? 0 : fullStart(previousElement) + fullWidth(previousElement); - } - - private previousNonZeroWidthElement(): ISyntaxElement { - var current: ISyntaxElement = this; - while (true) { - var parent = current.parent; - if (parent === undefined) { - Debug.assert(current.kind === SyntaxKind.SourceUnit, "We had a node without a parent that was not the root node!"); - - // We walked all the way to the top, and never found a previous element. This - // can happen with code like: - // - // / b; - // - // We will have an empty identifier token as the first token in the tree. In - // this case, return undefined so that the position of the empty token will be - // considered to be 0. - return undefined; - } - - // Ok. We have a parent. First, find out which slot we're at in the parent. - for (var i = 0, n = childCount(parent); i < n; i++) { - if (childAt(parent, i) === current) { - break; - } - } - - Debug.assert(i !== n, "Could not find current element in parent's child list!"); - - // Walk backward from this element, looking for a non-zero-width sibling. - for (var j = i - 1; j >= 0; j--) { - var sibling = childAt(parent, j); - if (sibling && fullWidth(sibling) > 0) { - return sibling; - } - } - - // We couldn't find a non-zero-width sibling. We were either the first element, or - // all preceding elements are empty. So, move up to our parent so we we can find - // its preceding sibling. - current = current.parent; - } - } - - public fullStart(): number { - return this.position(); - } + public fullStart(): number { return this._fullStart; } public text() { return ""; } public fullText(): string { return ""; } From 598fb71fe9d018aeaac1f9842d4fa57b6db74a54 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 16:30:30 -0800 Subject: [PATCH 122/178] Remove unnecessary 'do nothing' implementations in SourceFileObject. --- src/services/services.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 7f7a05cd3af..bf49a5ab5df 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -715,12 +715,12 @@ module ts { public filename: string; public text: string; - // These methods will have their implementation overridden with the implementation the + // These methods will have their implementation provided by the implementation the // compiler actually exports off of SourceFile. - public getLineAndCharacterFromPosition(position: number): { line: number; character: number } { return null; } - public getPositionFromLineAndCharacter(line: number, character: number): number { return -1; } - public getLineStarts(): number[] { return undefined; } - public getSyntacticDiagnostics(): Diagnostic[] { return undefined; } + public getLineAndCharacterFromPosition: (position: number) => LineAndCharacter; + public getPositionFromLineAndCharacter: (line: number, character: number) => number; + public getLineStarts: () => number[]; + public getSyntacticDiagnostics: () => Diagnostic[]; public amdDependencies: string[]; public amdModuleName: string; From b7600006fb517d9bfb22ce295dfde74328d3cb0b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 20 Nov 2014 16:38:57 -0800 Subject: [PATCH 123/178] Write constructor type and function type annotation to adapt to new SyntaxKind introduced --- src/compiler/emitter.ts | 64 +++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 18f0800440a..76674b83345 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2735,6 +2735,9 @@ module ts { return emitUnionType(type); case SyntaxKind.ParenType: return emitParenType(type); + case SyntaxKind.FunctionType: + case SyntaxKind.ConstructorType: + return emitSignatureDeclarationWithJsDocComments(type); case SyntaxKind.TypeLiteral: return emitTypeLiteral(type); case SyntaxKind.Identifier: @@ -2802,27 +2805,15 @@ module ts { } function emitTypeLiteral(type: TypeLiteralNode) { - if (getTokenPosOfNode(type, currentSourceFile) !== skipTrivia(currentSourceFile.text, type.members.pos)) { - write("{"); - if (type.members.length) { - writeLine(); - increaseIndent(); - // write members - emitLines(type.members); - decreaseIndent(); - } - write("}"); - } - else { - // Write call/construct signature as arrow style - var signature = type.members[0]; - if (signature.kind === SyntaxKind.CallSignature) { - emitSignatureDeclaration(signature, /*arrowStyle*/true); - } - else { - emitConstructSignatureDeclaration(signature, /*arrowStyle*/ true); - } + write("{"); + if (type.members.length) { + writeLine(); + increaseIndent(); + // write members + emitLines(type.members); + decreaseIndent(); } + write("}"); } } @@ -2993,8 +2984,12 @@ module ts { // If there is constraint present and this is not a type parameter of the private method emit the constraint if (node.constraint && (node.parent.kind !== SyntaxKind.Method || !(node.parent.flags & NodeFlags.Private))) { write(" extends "); - if (node.parent.parent && node.parent.parent.kind === SyntaxKind.TypeLiteral) { + if (node.parent.kind === SyntaxKind.FunctionType || + node.parent.kind === SyntaxKind.ConstructorType || + (node.parent.parent && node.parent.parent.kind === SyntaxKind.TypeLiteral)) { Debug.assert(node.parent.kind === SyntaxKind.Method || + node.parent.kind === SyntaxKind.FunctionType || + node.parent.kind === SyntaxKind.ConstructorType || node.parent.kind === SyntaxKind.CallSignature || node.parent.kind === SyntaxKind.ConstructSignature); emitType(node.constraint); @@ -3351,16 +3346,15 @@ module ts { } } - function emitConstructSignatureDeclaration(node: SignatureDeclaration, arrowStyle?: boolean) { + function emitSignatureDeclarationWithJsDocComments(node: SignatureDeclaration) { emitJsDocComments(node); - write("new "); - emitSignatureDeclaration(node, arrowStyle); + emitSignatureDeclaration(node); } - function emitSignatureDeclaration(node: SignatureDeclaration, arrowStyle?: boolean) { - if (node.kind === SyntaxKind.CallSignature || node.kind === SyntaxKind.IndexSignature) { - // Only index and call signatures are emitted directly, so emit their js doc comments, rest will do that in their own functions - emitJsDocComments(node); + function emitSignatureDeclaration(node: SignatureDeclaration) { + // Construct signature or constructor type write new Signature + if (node.kind === SyntaxKind.ConstructSignature || node.kind === SyntaxKind.ConstructorType) { + write("new "); } emitTypeParameters(node.typeParameters); if (node.kind === SyntaxKind.IndexSignature) { @@ -3384,10 +3378,11 @@ module ts { } // If this is not a constructor and is not private, emit the return type - if (node.parent.kind === SyntaxKind.TypeLiteral) { + var isFunctionTypeOrConstructorType = node.kind === SyntaxKind.FunctionType || node.kind === SyntaxKind.ConstructorType; + if (isFunctionTypeOrConstructorType || node.parent.kind === SyntaxKind.TypeLiteral) { // Emit type literal signature return type only if specified if (node.type) { - write(arrowStyle ? " => " : ": "); + write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } @@ -3397,7 +3392,7 @@ module ts { enclosingDeclaration = prevEnclosingDeclaration; - if (!arrowStyle) { + if (!isFunctionTypeOrConstructorType) { write(";"); writeLine(); } @@ -3480,7 +3475,9 @@ module ts { } decreaseIndent(); - if (node.parent.parent.kind === SyntaxKind.TypeLiteral) { + if (node.parent.kind === SyntaxKind.FunctionType || + node.parent.kind === SyntaxKind.ConstructorType || + node.parent.parent.kind === SyntaxKind.TypeLiteral) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.parent.flags & NodeFlags.Private)) { @@ -3562,10 +3559,9 @@ module ts { case SyntaxKind.Method: return emitFunctionDeclaration(node); case SyntaxKind.ConstructSignature: - return emitConstructSignatureDeclaration(node); case SyntaxKind.CallSignature: case SyntaxKind.IndexSignature: - return emitSignatureDeclaration(node); + return emitSignatureDeclarationWithJsDocComments(node); case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: return emitAccessorDeclaration(node); From 0404e8481e07a1017f91cb6298dc19dd026c78bc Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 20 Nov 2014 17:00:01 -0800 Subject: [PATCH 124/178] Addressed some CR feedback. --- src/services/signatureHelp.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 541e289037b..0f61a69d51f 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -210,12 +210,10 @@ module ts.SignatureHelp { return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); /** - * If node is an argument, returns its index in the argument list. - * If not, returns -1. + * Returns relevant information for the argument list and the current argument if we are + * in the argument of an invocation; returns undefined otherwise. */ function getImmediatelyContainingArgumentInfo(node: Node, position: number): ArgumentListInfo { - var callLikeExpr: CallLikeExpression; - if (node.parent.kind === SyntaxKind.CallExpression || node.parent.kind === SyntaxKind.NewExpression) { var callExpression = node.parent; // There are 3 cases to handle: @@ -329,14 +327,13 @@ module ts.SignatureHelp { // spanIndex is either the index for a given template span, or Constants.HeadSpanIndex for a template head. // This does not give appropriate results for a NoSubstitutionTemplateLiteral function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node, position: number): number { - // TemplateSpans are expression-template pairs, and ordered as such. - // Because of the TemplateStringsArray arg, we have to offset ourselves by 1 for substitution expressions. + // Because the TemplateStringsArray is the first argument, we have to offset each substitution expression by 1. // There are three cases we can encounter: - // 1. We are precisely in the template literal (argIndex = 0) - // 2. We are in or to the right of the substitution expression (argIndex = spanIndex + 1) - // 3. We are directly to the right of the template literal, but not - // enough to put us in the substitution expression; we should consider ourselves part of - // the *next* span's expression (argIndex = (spanIndex + 1) + 1). + // 1. We are precisely in the template literal (argIndex = 0). + // 2. We are in or to the right of the substitution expression (argIndex = spanIndex + 1). + // 3. We are directly to the right of the template literal, but because we look for the token on the left, + // not enough to put us in the substitution expression; we should consider ourselves part of + // the *next* span's expression by offsetting the index (argIndex = (spanIndex + 1) + 1). // // Example: f `# abcd $#{# 1 + 1# }# efghi ${ #"#hello"# } # ` // ^ ^ ^ ^ ^ ^ ^ ^ ^ @@ -352,6 +349,7 @@ module ts.SignatureHelp { } function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, argumentIndex: number): ArgumentListInfo { + // argumentCount is either 1 or (numSpans + 1) to account for the template strings array argument. var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral ? 1 : (tagExpression.template).templateSpans.length + 1; From 7211dfa84d190635265aa4a1a878967bbc3bc51b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 20 Nov 2014 17:54:46 -0800 Subject: [PATCH 125/178] Added test. --- ...eHelpTaggedTemplatesWithOverloadedTags9.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts new file mode 100644 index 00000000000..aee06c1df53 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts @@ -0,0 +1,20 @@ +/// + +//// function f(templateStrings: string[], p1_o1: string): number; +//// function f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string; +//// function f(templateStrings: string[], p1_o3: string, p2_o3: boolean, p3_o3: number): boolean; +//// function f(...foo[]: any) { return ""; } +//// +//// f `${/*1*/ /*2*/ /*3*/} ${ + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.signatureHelpCountIs(3); + verify.signatureHelpArgumentCountIs(3); + + verify.currentSignatureParameterCountIs(4); + verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); + verify.currentParameterHelpArgumentNameIs("p1_o2"); + verify.currentParameterSpanIs("p1_o2: number"); +}); \ No newline at end of file From a71c527a9ea7128681a47269db798a151ccfdf4f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 20 Nov 2014 17:56:24 -0800 Subject: [PATCH 126/178] Amended comment. --- src/compiler/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f7c9635eb04..a1e050b8fb1 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -822,7 +822,7 @@ module ts { return false; } - // We can only be unclosed if we have a tail or a no-sub template. + // The literal can only be unterminated if it is a template tail or a no-sub template. if (node.kind !== SyntaxKind.TemplateTail && node.kind !== SyntaxKind.NoSubstitutionTemplateLiteral) { return false; } From 161dc656cb9f5757ab517dd03db6f104966e4eb7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 20 Nov 2014 19:34:48 -0800 Subject: [PATCH 127/178] Simplify incremental parsing by moving old source tree nodes before doing anything. --- src/services/syntax/incrementalParser.ts | 430 +++++++++-------------- src/services/syntax/parser.ts | 9 +- src/services/syntax/scanner.ts | 42 +-- src/services/syntax/slidingWindow.ts | 8 + 4 files changed, 203 insertions(+), 286 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index be0b26cf302..29d3ac07024 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -4,8 +4,10 @@ module TypeScript.IncrementalParser { interface IParserRewindPoint { // Information used by the incremental parser source. oldSourceUnitCursor: SyntaxCursor; - changeDelta: number; - changeRange: TextChangeRange; + } + + interface ISyntaxElementInternal extends ISyntaxToken { + intersectsChange: boolean; } // Parser source used in incremental scenarios. This parser source wraps an old tree, text @@ -31,40 +33,15 @@ module TypeScript.IncrementalParser { // // This parser source also keeps track of the absolute position in the text that we're in, // and any token diagnostics produced. That way we dont' have to track that ourselves. - var _scannerParserSource: Scanner.IScannerParserSource; - - // The range of text in the *original* text that was changed, and the new length of it after - // the change. - var _changeRange: TextChangeRange; - - // Cached value of _changeRange.newSpan(). Cached for performance. - var _changeRangeNewSpan: TextSpan; - - // This number represents how our position in the old tree relates to the position we're - // pointing at in the new text. If it is 0 then our positions are in sync and we can read - // nodes or tokens from the old tree. If it is non-zero, then our positions are not in - // sync and we cannot use nodes or tokens from the old tree. - // - // Now, changeDelta could be negative or positive. Negative means 'the position we're at - // in the original tree is behind the position we're at in the text'. In this case we - // keep throwing out old nodes or tokens (and thus move forward in the original tree) until - // changeDelta becomes 0 again or positive. If it becomes 0 then we are resynched and can - // read nodes or tokesn from the tree. - // - // If changeDelta is positive, that means the current node or token we're pointing at in - // the old tree is at a further ahead position than the position we're pointing at in the - // new text. In this case we have no choice but to scan tokens from teh new text. We will - // continue to do so until, again, changeDelta becomes 0 and we've resynced, or change delta - // becomes negative and we need to skip nodes or tokes in the original tree. - var _changeDelta: number = 0; + var _scannerParserSource = Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); // The cursor we use to navigate through and retrieve nodes and tokens from the old tree. - var _oldSourceUnitCursor = getSyntaxCursor(); var oldSourceUnit = oldSyntaxTree.sourceUnit(); var _outstandingRewindPointCount = 0; // Start the cursor pointing at the first element in the source unit (if it exists). + var _oldSourceUnitCursor = getSyntaxCursor(); if (oldSourceUnit.moduleElements.length > 0) { _oldSourceUnitCursor.pushElement(childAt(oldSourceUnit.moduleElements, 0), /*indexInParent:*/ 0); } @@ -74,8 +51,10 @@ module TypeScript.IncrementalParser { // time this could be problematic would be if the user made a ton of discontinuous edits. // For example, doing a column select on a *large* section of a code. If this is a // problem, we can always update this code to handle multiple changes. - _changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); - _changeRangeNewSpan = _changeRange.newSpan(); + var _changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); + + // Cached value of _changeRange.newSpan(). Cached for performance. + var _changeRangeNewSpan = _changeRange.newSpan(); // The old tree's length, plus whatever length change was caused by the edit // Had better equal the new text's length! @@ -83,8 +62,25 @@ module TypeScript.IncrementalParser { Debug.assert((fullWidth(oldSourceUnit) - _changeRange.span().length() + _changeRange.newLength()) === text.length()); } - // Set up a scanner so that we can scan tokens out of the new text. - _scannerParserSource = Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); + var delta = _changeRange.newSpan().length() - _changeRange.span().length(); + if (delta !== 0) { + // If we added or removed characters during the edit, then we need to go and adjust all + // the nodes after the edit. Those nodes may move forward down (if we inserted chars) + // or they may move backward (if we deleted chars). + // + // Doing this helps us out in two ways. First, it means that any nodes/tokens we want + // to reuse are already at the appropriate position in the new text. That way when we + // reuse them, we don't have to figure out if they need to be adjusted. Second, it makes + // it very easy to determine if we can reuse a node. If the node's position is at where + // we are in the text, then we can reuse it. Otherwise we can't. If hte node's position + // is ahead of us, then we'll need to rescan tokens. If the node's position is behind + // us, then we'll need to skip it or crumble it as appropriate + // + // Also, mark any syntax elements that intersect the changed span. We know, up front, + // that we cannot reuse these elements. + updateTokenPositionsAndMarkElements(oldSourceUnit, + _changeRange.span().start(), _changeRange.span().end(),delta); + } function release() { _scannerParserSource.release(); @@ -93,8 +89,7 @@ module TypeScript.IncrementalParser { _outstandingRewindPointCount = 0; } - function extendToAffectedRange(changeRange: TextChangeRange, - sourceUnit: SourceUnitSyntax): TextChangeRange { + function extendToAffectedRange(changeRange: TextChangeRange, sourceUnit: SourceUnitSyntax): TextChangeRange { // Consider the following code: // void foo() { /; } // @@ -105,14 +100,6 @@ module TypeScript.IncrementalParser { // (as it does not intersect the actual original change range). Because an edit may // change the token touching it, we actually need to look back *at least* one token so // that the prior token sees that change. - // - // Note: i believe (outside of regex tokens) max lookahead is just one token for - // TypeScript. However, if this turns out to be wrong, we may have to increase how much - // futher we look back. - // - // Note: lookahead handling for regex characters is handled specially in during - // incremental parsing, and does not need to be handled here. - var maxLookahead = 1; var start = changeRange.span().start(); @@ -149,33 +136,27 @@ module TypeScript.IncrementalParser { // Get a rewind point for our new text reader and for our old source unit cursor. var rewindPoint = _scannerParserSource.getRewindPoint(); - // Clone our cursor. That way we can restore to that point if hte parser needs to rewind. + // Clone our cursor. That way we can restore to that point if the parser needs to rewind. var oldSourceUnitCursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); // Store where we were when the rewind point was created. - rewindPoint.changeDelta = _changeDelta; - rewindPoint.changeRange = _changeRange; rewindPoint.oldSourceUnitCursor = _oldSourceUnitCursor; _oldSourceUnitCursor = oldSourceUnitCursorClone; - // Debug.assert(rewindPoint.pinCount === _oldSourceUnitCursor.pinCount()); - _outstandingRewindPointCount++; return rewindPoint; } function rewind(rewindPoint: IParserRewindPoint): void { // Restore our state to the values when the rewind point was created. - _changeRange = rewindPoint.changeRange; - _changeDelta = rewindPoint.changeDelta; // Reset the cursor to what it was when we got the rewind point. Make sure to return // our existing cursor to the pool so it can be reused. returnSyntaxCursor(_oldSourceUnitCursor); _oldSourceUnitCursor = rewindPoint.oldSourceUnitCursor; - // Null out the cursor that the rewind point points to. This way we don't try + // Clear the cursor that the rewind point points to. This way we don't try // to return it in 'releaseRewindPoint'. rewindPoint.oldSourceUnitCursor = undefined; @@ -220,69 +201,23 @@ module TypeScript.IncrementalParser { // If our current absolute position is in the middle of the changed range in the new text // then we definitely can't read from the old source unit right now. - if (_changeRange && _changeRangeNewSpan.intersectsWithPosition(absolutePosition())) { + var absolutePos = absolutePosition(); + if (_changeRangeNewSpan.intersectsWithPosition(absolutePos)) { return false; } // First, try to sync up with the new text if we're behind. syncCursorToNewTextIfBehind(); - // Now, if we're synced up *and* we're not currently pinned in the new text scanner, - // then we can read a node from the cursor. If we're pinned in the scanner then we - // can't read a node from the cursor because we will mess up the pinned scanner when - // we try to move it forward past this node. - return _changeDelta === 0 && - !_oldSourceUnitCursor.isFinished(); - } + // Now see what the position is of the node we're considering reusing. If it's at our + // current position then we can *potentialy* reuse it. We'll still need to do more + // viability checks later on. This will happen in tryGetNodeFromOldSourceUnit or + // tryGetTokenFromOldSourceUnit. + var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); - function updateTokenPosition(token: ISyntaxToken): void { - // If we got a node or token, and we're past the range of edited text, then walk its - // constituent tokens, making sure all their positions are correct. We don't need to - // do this for the tokens before the edited range (since their positions couldn't have - // been affected by the edit), and we don't need to do this for the tokens in the - // edited range, as their positions will be correct when the underlying parser source - // creates them. - - if (isPastChangeRange()) { - token.setFullStart(absolutePosition()); - } - } - - function updateNodePosition(node: ISyntaxNode): void { - // If we got a node or token, and we're past the range of edited text, then walk its - // constituent tokens, making sure all their positions are correct. We don't need to - // do this for the tokens before the edited range (since their positions couldn't have - // been affected by the edit), and we don't need to do this for the tokens in the - // edited range, as their positions will be correct when the underlying parser source - // creates them. - - if (isPastChangeRange()) { - var position = absolutePosition(); - - var tokens = getTokens(node); - - for (var i = 0, n = tokens.length; i < n; i++) { - var token = tokens[i]; - token.setFullStart(position); - - position += token.fullWidth(); - } - } - } - - function getTokens(node: ISyntaxNode): ISyntaxToken[] { - var tokens = node.__cachedTokens; - if (!tokens) { - tokens = []; - tokenCollectorWalker.tokens = tokens; - - visitNodeOrToken(tokenCollectorWalker, node); - - node.__cachedTokens = tokens; - tokenCollectorWalker.tokens = undefined; - } - - return tokens; + // we should never return a node or token that intersects the change range. + Debug.assert(currentNodeOrToken === undefined || !(currentNodeOrToken).intersectsChange); + return currentNodeOrToken && fullStart(currentNodeOrToken) === absolutePos; } function currentNode(): ISyntaxNode { @@ -291,8 +226,6 @@ module TypeScript.IncrementalParser { // to get a token. var node = tryGetNodeFromOldSourceUnit(); if (node) { - // Make sure the positions for the tokens in this node are correct. - updateNodePosition(node); return node; } } @@ -305,8 +238,6 @@ module TypeScript.IncrementalParser { if (canReadFromOldSourceUnit()) { var token = tryGetTokenFromOldSourceUnit(); if (token) { - // Make sure the token's position/text is correct. - updateTokenPosition(token); return token; } } @@ -325,53 +256,58 @@ module TypeScript.IncrementalParser { while (true) { if (_oldSourceUnitCursor.isFinished()) { // Can't sync up if the cursor is finished. - break; + return; } - if (_changeDelta >= 0) { - // Nothing to do if we're synced up or ahead of the text. - break; - } - - // We're behind in the original tree. Throw out a node or token in an attempt to - // catch up to the position we're at in the new text. - + // Start with the current node or token the cursor is pointing at. var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); - // If we're pointing at a node, and that node's width is less than our delta, - // then we can just skip that node. Otherwise, if we're pointing at a node - // whose width is greater than the delta, then crumble it and try again. - // Otherwise, we must be pointing at a token. Just skip it and try again. + // Node, move the cursor past any nodes or tokens that intersect the change range + // 1) they are never reusable. + // 2) their positions are wacky as they refer to the original text. + // + // We consider these nodes and tokens essentially invisible to all further parts + // of the incremental algorithm. + if ((currentNodeOrToken).intersectsChange) { + if (isNode(currentNodeOrToken)) { + _oldSourceUnitCursor.moveToFirstChild(); + } + else { + _oldSourceUnitCursor.moveToNextSibling(); + } + continue; + } - if (isNode(currentNodeOrToken) && (fullWidth(currentNodeOrToken) > Math.abs(_changeDelta))) { - // We were pointing at a node whose width was more than changeDelta. Crumble the - // node and try again. Note: we haven't changed changeDelta. So the callers loop - // will just repeat this until we get to a node or token that we can skip over. - _oldSourceUnitCursor.moveToFirstChild(); + var absolutePos = absolutePosition(); + + var currentNodeOrTokenFullStart = fullStart(currentNodeOrToken); + if (currentNodeOrTokenFullStart >= absolutePos) { + // The node or token is either where we're at, or ahead of where we're at. If + // it's where we're at, there's no work to be done. If it's ahead of where + // we're at, we need to rescan tokens until we catch up. in either case, + // we don't need to sync the cursor. + return; + } + + // The node or is behind the current position we're at in the text. + + var currentNodeOrTokenFullWidth = fullWidth(currentNodeOrToken); + var currentNodeOrTokenFullEnd = currentNodeOrTokenFullStart + currentNodeOrTokenFullWidth; + + // If we're pointing at a node, and that node ends before our current position, we + // can just skip the node entirely. Or, if we're pointing at a token, we won't be + // able to break up that token any further and we should just move to the next + // token. + if (currentNodeOrTokenFullEnd <= absolutePos || isToken(currentNodeOrToken)) { + _oldSourceUnitCursor.moveToNextSibling(); } else { - _oldSourceUnitCursor.moveToNextSibling(); - - // Get our change delta closer to 0 as we skip past this item. - _changeDelta += fullWidth(currentNodeOrToken); - - // If this was a node, then our changeDelta is 0 or negative. If this was a - // token, then we could still be negative (and we have to read another token), - // we could be zero (we're done), or we could be positive (we've moved ahead - // of the new text). Only if we're negative will we continue looping. + // We have a node, and it started before our absolute pos, and ended after our + // pos. Try to crumble this node to see if we'll be able to skip the first node + // or token contained within. + _oldSourceUnitCursor.moveToFirstChild(); } } - - // At this point, we must be either: - // a) done with the cursor - // b) (ideally) caught up to the new text position. - // c) ahead of the new text position. - // In case 'b' we can try to reuse a node from teh old tree. - // Debug.assert(_oldSourceUnitCursor.isFinished() || _changeDelta >= 0); - } - - function intersectsWithChangeRangeSpanInOriginalText(start: number, length: number) { - return !isPastChangeRange() && _changeRange.span().intersectsWith(start, length); } function tryGetNodeFromOldSourceUnit(): ISyntaxNode { @@ -379,11 +315,10 @@ module TypeScript.IncrementalParser { // Keep moving the cursor down to the first node that is safe to return. A node is // safe to return if: - // a) it does not intersect the changed text. - // b) it does not contain skipped text. - // c) it does not have any zero width tokens in it. - // d) it does not have a regex token in it. - // e) we are still in the same strict or non-strict state that the node was originally parsed in. + // a) it does not contain skipped text. + // b) it does not have any zero width tokens in it. + // c) it does not have a regex token in it. + // d) we are still in the same strict or non-strict state that the node was originally parsed in. while (true) { var node = _oldSourceUnitCursor.currentNode(); if (node === undefined) { @@ -391,15 +326,12 @@ module TypeScript.IncrementalParser { return undefined; } - if (!intersectsWithChangeRangeSpanInOriginalText(absolutePosition(), fullWidth(node))) { - // Didn't intersect with the change range. - var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node); - if (!isIncrementallyUnusuable) { + var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node); + if (!isIncrementallyUnusuable) { - // Didn't contain anything that would make it unusable. Awesome. This is - // a node we can reuse. - return node; - } + // Didn't contain anything that would make it unusable. Awesome. This is + // a node we can reuse. + return node; } // We couldn't use currentNode. Try to move to its first child (in case that's a @@ -411,10 +343,9 @@ module TypeScript.IncrementalParser { function canReuseTokenFromOldSourceUnit(position: number, token: ISyntaxToken): boolean { // A token is safe to return if: - // a) it does not intersect the changed text. - // b) it does not contain skipped text. - // c) it is not zero width. - // d) it is not a contextual parser token. + // a) it does not contain skipped text. + // b) it is not zero width. + // c) it is not a contextual parser token. // // NOTE: It is safe to get a token regardless of what our strict context was/is. That's // because the strict context doesn't change what tokens are scanned, only how the @@ -428,14 +359,12 @@ module TypeScript.IncrementalParser { // Converted identifiers can't ever be created by the scanner, and as such, should not // be returned by this source. if (token) { - if (!intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { - // Didn't intersect with the change range. - if (!token.isIncrementallyUnusable() && !Scanner.isContextualToken(token)) { + // Didn't intersect with the change range. + if (!token.isIncrementallyUnusable() && !Scanner.isContextualToken(token)) { - // Didn't contain anything that would make it unusable. Awesome. This is - // a token we can reuse. - return true; - } + // Didn't contain anything that would make it unusable. Awesome. This is + // a token we can reuse. + return true; } } @@ -506,86 +435,8 @@ module TypeScript.IncrementalParser { ? token : undefined; } - function consumeNode(node: ISyntaxNode): void { - // A node could have only come from the old source unit cursor. Update it and our - // current state. - // Debug.assert(_changeDelta === 0); - // Debug.assert(currentNode() === node); - - _oldSourceUnitCursor.moveToNextSibling(); - - // Update the underlying source with where it should now be currently pointin. - var _absolutePosition = absolutePosition() + fullWidth(node); - _scannerParserSource.resetToPosition(_absolutePosition); - - // Debug.assert(previousToken !== undefined); - // Debug.assert(previousToken.width() > 0); - - //if (!isPastChangeRange()) { - // // If we still have a change range, then this node must have ended before the - // // change range starts. Thus, we don't need to call 'skipPastChanges'. - // Debug.assert(absolutePosition() < _changeRange.span().start()); - //} - } - - function consumeToken(currentToken: ISyntaxToken): void { - // Debug.assert(currentToken.fullWidth() > 0 || currentToken.kind === SyntaxKind.EndOfFileToken); - - // This token may have come from the old source unit, or from the new text. Handle - // both accordingly. - - if (_oldSourceUnitCursor.currentToken() === currentToken) { - // The token came from the old source unit. So our tree and text must be in sync. - // Debug.assert(_changeDelta === 0); - - // Move the cursor past this token. - _oldSourceUnitCursor.moveToNextSibling(); - - // Debug.assert(!_normalParserSource.isPinned()); - - // Update the underlying source with where it should now be currently pointing. We - // don't need to do this when the token came from the new text as the source will - // automatically be placed in the right position. - var _absolutePosition = absolutePosition() + currentToken.fullWidth(); - _scannerParserSource.resetToPosition(_absolutePosition); - - // Debug.assert(previousToken !== undefined); - // Debug.assert(previousToken.width() > 0); - - //if (!isPastChangeRange()) { - // // If we still have a change range, then this token must have ended before the - // // change range starts. Thus, we don't need to call 'skipPastChanges'. - // Debug.assert(absolutePosition() < _changeRange.span().start()); - //} - } - else { - // the token came from the new text. That means the normal source moved forward, - // while the syntax cursor stayed in the same place. Thus our delta moves even - // further back. - _changeDelta -= currentToken.fullWidth(); - - // Move our underlying source forward. - _scannerParserSource.consumeToken(currentToken); - - // Because we read a token from the new text, we may have moved ourselves past the - // change range. If we did, then we may also have to update our change delta to - // compensate for the length change between the old and new text. - if (!isPastChangeRange()) { - // var changeEndInNewText = _changeRange.span().start() + _changeRange.newLength(); - if (absolutePosition() >= _changeRangeNewSpan.end()) { - _changeDelta += _changeRange.newLength() - _changeRange.span().length(); - - // Once we're past the change range, we no longer need it. Null it out. - // From now on we can check if we're past the change range just by seeing - // if this is undefined. - _changeRange = undefined; - } - } - } - } - - function isPastChangeRange(): boolean { - return _changeRange === undefined; + function consumeNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void { + _scannerParserSource.consumeNodeOrToken(nodeOrToken); } return { @@ -597,8 +448,7 @@ module TypeScript.IncrementalParser { currentToken: currentToken, currentContextualToken: currentContextualToken, peekToken: peekToken, - consumeNode: consumeNode, - consumeToken: consumeToken, + consumeNodeOrToken: consumeNodeOrToken, getRewindPoint: getRewindPoint, rewind: rewind, releaseRewindPoint: releaseRewindPoint, @@ -888,6 +738,76 @@ module TypeScript.IncrementalParser { } var tokenCollectorWalker = new TokenCollectorWalker(); + function updateTokenPositionsAndMarkElements(element: ISyntaxElementInternal, changeStart: number, changeRangeOldEnd: number, delta: number): void { + if (element) { + // First, try to skip past any elements that we dont' need to move. We don't need to + // move any elements that don't start on or after the end of the change range. + if (fullStart(element) >= changeRangeOldEnd) { + // This element started on or after the end of the edit. We need to move it. + forceUpdateTokenPositionsForElement(element, delta); + } + else { + // Check if the element intersects the change range. If it does, then it is not + // reusable. Also, we'll need to recurse to see what constituent portions we may + // be able to use. + if (fullEnd(element) >= changeStart) { + element.intersectsChange = true; + + for (var i = 0, n = childCount(element); i < n; i++) { + updateTokenPositionsAndMarkElements(childAt(element, i), changeStart, changeRangeOldEnd, delta); + } + } + // else { + // This element was totally before the edited range. We don't need to do anything + // with it. + // } + } + } + } + + function forceUpdateTokenPositionsForElement(element: ISyntaxElement, delta: number) { + if (isList(element)) { + var list = element; + for (var i = 0, n = list.length; i < n; i++) { + forceUpdateTokenPositionForNodeOrToken(list[i], delta); + } + } + else { + forceUpdateTokenPositionForNodeOrToken(element, delta); + } + } + + function forceUpdateTokenPosition(token: ISyntaxToken, delta: number) { + token.setFullStart(token.fullStart() + delta); + } + + function forceUpdateTokenPositionForNodeOrToken(nodeOrToken: ISyntaxNodeOrToken, delta: number) { + if (isToken(nodeOrToken)) { + forceUpdateTokenPosition(nodeOrToken, delta); + } + else { + var node = nodeOrToken; + var tokens = getTokens(node); + for (var i = 0, n = tokens.length; i < n; i++) { + forceUpdateTokenPosition(tokens[i], delta); + } + } + } + + function getTokens(node: ISyntaxNode): ISyntaxToken[] { + var tokens = node.__cachedTokens; + if (!tokens) { + tokens = []; + tokenCollectorWalker.tokens = tokens; + + visitNodeOrToken(tokenCollectorWalker, node); + + node.__cachedTokens = tokens; + tokenCollectorWalker.tokens = undefined; + } + + return tokens; + } export function parse(oldSyntaxTree: SyntaxTree, textChangeRange: TextChangeRange, newText: ISimpleText): SyntaxTree { if (textChangeRange.isUnchanged()) { diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index b1b197cd1ea..764963450cb 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -70,8 +70,7 @@ module TypeScript.Parser { // Called to move the source to the next node or token once the parser has consumed the // current one. - consumeNode(node: ISyntaxNode): void; - consumeToken(token: ISyntaxToken): void; + consumeNodeOrToken(node: ISyntaxNodeOrToken): void; // Gets a rewind point that the parser can use to move back to after it speculatively // parses something. The source guarantees that if the parser calls 'rewind' with that @@ -320,14 +319,14 @@ module TypeScript.Parser { // call 'consumeToken'. Doing so would attempt to add any previous skipped tokens // to this token we're skipping. We don't want to do that. Instead, we want to add // all the skipped tokens when we finally eat the next good token. - source.consumeToken(token) + source.consumeNodeOrToken(token) } function consumeToken(token: ISyntaxToken): ISyntaxToken { // Debug.assert(token.fullWidth() > 0 || token.kind === SyntaxKind.EndOfFileToken); // First, tell our source that the token has been consumed. - source.consumeToken(token); + source.consumeNodeOrToken(token); // Now, if we had any skipped tokens, we want to add them to the start of this token // we're consuming. @@ -385,7 +384,7 @@ module TypeScript.Parser { function consumeNode(node: ISyntaxNode): void { Debug.assert(_skippedTokens === undefined); - source.consumeNode(node); + source.consumeNodeOrToken(node); } //this method is called very frequently diff --git a/src/services/syntax/scanner.ts b/src/services/syntax/scanner.ts index 17b127eb6a9..14c73f2c6b4 100644 --- a/src/services/syntax/scanner.ts +++ b/src/services/syntax/scanner.ts @@ -1430,16 +1430,6 @@ module TypeScript.Scanner { return !hadError && SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && width(token) === text.length(); } - // A parser source that gets its data from an underlying scanner. - export interface IScannerParserSource extends Parser.IParserSource { - // The position that the scanner is currently at. - absolutePosition(): number; - - // Resets the source to this position. Any diagnostics produced after this point will be - // removed. - resetToPosition(absolutePosition: number): void; - } - interface IScannerRewindPoint extends Parser.IRewindPoint { // Information used by normal parser source. absolutePosition: number; @@ -1449,7 +1439,7 @@ module TypeScript.Scanner { // Parser source used in batch scenarios. Directly calls into an underlying text scanner and // supports none of the functionality to reuse nodes. Good for when you just want want to do // a single parse of a file. - export function createParserSource(fileName: string, text: ISimpleText, languageVersion: ts.ScriptTarget): IScannerParserSource { + export function createParserSource(fileName: string, text: ISimpleText, languageVersion: ts.ScriptTarget): Parser.IParserSource { // The absolute position we're at in the text we're reading from. var _absolutePosition: number = 0; @@ -1489,11 +1479,6 @@ module TypeScript.Scanner { return undefined; } - function consumeNode(node: ISyntaxNode): void { - // Should never get called. - throw Errors.invalidOperation(); - } - function absolutePosition() { return _absolutePosition; } @@ -1561,13 +1546,20 @@ module TypeScript.Scanner { return slidingWindow.peekItemN(n); } - function consumeToken(token: ISyntaxToken): void { - // Debug.assert(token.fullWidth() > 0 || token.kind === SyntaxKind.EndOfFileToken); - - // Debug.assert(currentToken() === token); - _absolutePosition += token.fullWidth(); - - slidingWindow.moveToNextItem(); + function consumeNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void { + if (nodeOrToken === slidingWindow.currentItemWithoutFetching()) { + // We're consuming the token that was just fetched from us by the parser. We just + // need to move ourselves forward and ditch this token from the sliding window. + _absolutePosition += (nodeOrToken).fullWidth(); + slidingWindow.moveToNextItem(); + } + else { + // We're either consuming a node, or we're consuming a token that wasn't from our + // sliding window. Both cases happen in incremental scenarios when the incremental + // parser uses a node or token from an older tree. In that case, we simply want to + // point ourselves at the end of the element that the parser just consumed. + resetToPosition(fullEnd(nodeOrToken)); + } } function currentToken(): ISyntaxToken { @@ -1644,15 +1636,13 @@ module TypeScript.Scanner { currentToken: currentToken, currentContextualToken: currentContextualToken, peekToken: peekToken, - consumeNode: consumeNode, - consumeToken: consumeToken, + consumeNodeOrToken: consumeNodeOrToken, getRewindPoint: getRewindPoint, rewind: rewind, releaseRewindPoint: releaseRewindPoint, tokenDiagnostics: tokenDiagnostics, release: release, absolutePosition: absolutePosition, - resetToPosition: resetToPosition, }; } diff --git a/src/services/syntax/slidingWindow.ts b/src/services/syntax/slidingWindow.ts index 4bb79023f2f..39502be24f3 100644 --- a/src/services/syntax/slidingWindow.ts +++ b/src/services/syntax/slidingWindow.ts @@ -163,6 +163,14 @@ module TypeScript { return this.window[this.currentRelativeItemIndex]; } + public currentItemWithoutFetching(): any { + if (this.currentRelativeItemIndex >= this.windowCount) { + return undefined; + } + + return this.window[this.currentRelativeItemIndex]; + } + public peekItemN(n: number): any { // Assert disabled because it is actually expensive enugh to affect perf. // Debug.assert(n >= 0); From c6088ce683d5017a4abe779ac13a273838026b91 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 01:28:42 -0800 Subject: [PATCH 128/178] Fix interface. --- src/services/syntax/incrementalParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 29d3ac07024..ae4d41346cf 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -6,7 +6,7 @@ module TypeScript.IncrementalParser { oldSourceUnitCursor: SyntaxCursor; } - interface ISyntaxElementInternal extends ISyntaxToken { + interface ISyntaxElementInternal extends ISyntaxElement { intersectsChange: boolean; } From 19198256fb6d7a4483c56fba251c8ad5075ae217 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 01:31:15 -0800 Subject: [PATCH 129/178] Simplify parser initializer. --- src/services/syntax/incrementalParser.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index ae4d41346cf..490d3550817 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -23,9 +23,6 @@ module TypeScript.IncrementalParser { // prevent this level of reuse include substantially destructive operations like introducing // "/*" without a "*/" nearby to terminate the comment. function createParserSource(oldSyntaxTree: SyntaxTree, textChangeRange: TextChangeRange, text: ISimpleText): Parser.IParserSource { - var fileName = oldSyntaxTree.fileName(); - var languageVersion = oldSyntaxTree.languageVersion(); - // The underlying source that we will use to scan tokens from any new text, or any tokens // from the old tree that we decide we can't use for any reason. We will also continue // scanning tokens from this source until we've decided that we're resynchronized and can @@ -441,8 +438,8 @@ module TypeScript.IncrementalParser { return { text: text, - fileName: fileName, - languageVersion: languageVersion, + fileName: oldSyntaxTree.fileName(), + languageVersion: oldSyntaxTree.languageVersion(), absolutePosition: absolutePosition, currentNode: currentNode, currentToken: currentToken, From 6afd5e4ad24c77ef5d07acef033415e0203cb90f Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 02:12:59 -0800 Subject: [PATCH 130/178] Simplify incremental code. --- src/services/syntax/incrementalParser.ts | 31 ++++++------------------ 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 490d3550817..3d2c33fd5e8 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -338,7 +338,7 @@ module TypeScript.IncrementalParser { } } - function canReuseTokenFromOldSourceUnit(position: number, token: ISyntaxToken): boolean { + function canReuseTokenFromOldSourceUnit(token: ISyntaxToken): boolean { // A token is safe to return if: // a) it does not contain skipped text. // b) it is not zero width. @@ -355,17 +355,10 @@ module TypeScript.IncrementalParser { // need to make sure that if that the parser asks for a *token* we don't return it. // Converted identifiers can't ever be created by the scanner, and as such, should not // be returned by this source. - if (token) { - // Didn't intersect with the change range. - if (!token.isIncrementallyUnusable() && !Scanner.isContextualToken(token)) { - - // Didn't contain anything that would make it unusable. Awesome. This is - // a token we can reuse. - return true; - } - } - - return false; + return token && + !(token).intersectsChange && + !token.isIncrementallyUnusable() && + !Scanner.isContextualToken(token); } function tryGetTokenFromOldSourceUnit(): ISyntaxToken { @@ -374,8 +367,7 @@ module TypeScript.IncrementalParser { // get the current token that the cursor is pointing at. var token = _oldSourceUnitCursor.currentToken(); - return canReuseTokenFromOldSourceUnit(absolutePosition(), token) - ? token : undefined; + return canReuseTokenFromOldSourceUnit(token) ? token : undefined; } function peekToken(n: number): ISyntaxToken { @@ -407,11 +399,6 @@ module TypeScript.IncrementalParser { } function tryPeekTokenFromOldSourceUnitWorker(n: number): ISyntaxToken { - // In order to peek the 'nth' token we need all the tokens up to that point. That way - // we know we know position that the nth token is at. The position is necessary so - // that we can test if this token (or any that precede it cross the change range). - var currentPosition = absolutePosition(); - // First, make sure the cursor is pointing at a token. _oldSourceUnitCursor.moveToFirstToken(); @@ -419,17 +406,15 @@ module TypeScript.IncrementalParser { for (var i = 0; i < n; i++) { var interimToken = _oldSourceUnitCursor.currentToken(); - if (!canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { + if (!canReuseTokenFromOldSourceUnit(interimToken)) { return undefined; } - currentPosition += interimToken.fullWidth(); _oldSourceUnitCursor.moveToNextSibling(); } var token = _oldSourceUnitCursor.currentToken(); - return canReuseTokenFromOldSourceUnit(currentPosition, token) - ? token : undefined; + return canReuseTokenFromOldSourceUnit(token) ? token : undefined; } function consumeNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void { From 3c3e3b23ddc3123f4c5c1f1a40f38dee91bc96a2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 14:24:31 -0800 Subject: [PATCH 131/178] Always mark nodes and tokens that cross the edited range. --- src/services/syntax/incrementalParser.ts | 66 ++++++++++++------------ 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 3d2c33fd5e8..b086b984926 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -60,24 +60,22 @@ module TypeScript.IncrementalParser { } var delta = _changeRange.newSpan().length() - _changeRange.span().length(); - if (delta !== 0) { - // If we added or removed characters during the edit, then we need to go and adjust all - // the nodes after the edit. Those nodes may move forward down (if we inserted chars) - // or they may move backward (if we deleted chars). - // - // Doing this helps us out in two ways. First, it means that any nodes/tokens we want - // to reuse are already at the appropriate position in the new text. That way when we - // reuse them, we don't have to figure out if they need to be adjusted. Second, it makes - // it very easy to determine if we can reuse a node. If the node's position is at where - // we are in the text, then we can reuse it. Otherwise we can't. If hte node's position - // is ahead of us, then we'll need to rescan tokens. If the node's position is behind - // us, then we'll need to skip it or crumble it as appropriate - // - // Also, mark any syntax elements that intersect the changed span. We know, up front, - // that we cannot reuse these elements. - updateTokenPositionsAndMarkElements(oldSourceUnit, - _changeRange.span().start(), _changeRange.span().end(),delta); - } + // If we added or removed characters during the edit, then we need to go and adjust all + // the nodes after the edit. Those nodes may move forward down (if we inserted chars) + // or they may move backward (if we deleted chars). + // + // Doing this helps us out in two ways. First, it means that any nodes/tokens we want + // to reuse are already at the appropriate position in the new text. That way when we + // reuse them, we don't have to figure out if they need to be adjusted. Second, it makes + // it very easy to determine if we can reuse a node. If the node's position is at where + // we are in the text, then we can reuse it. Otherwise we can't. If hte node's position + // is ahead of us, then we'll need to rescan tokens. If the node's position is behind + // us, then we'll need to skip it or crumble it as appropriate + // + // Also, mark any syntax elements that intersect the changed span. We know, up front, + // that we cannot reuse these elements. + updateTokenPositionsAndMarkElements(oldSourceUnit, + _changeRange.span().start(), _changeRange.span().end(), delta); function release() { _scannerParserSource.release(); @@ -199,9 +197,9 @@ module TypeScript.IncrementalParser { // If our current absolute position is in the middle of the changed range in the new text // then we definitely can't read from the old source unit right now. var absolutePos = absolutePosition(); - if (_changeRangeNewSpan.intersectsWithPosition(absolutePos)) { - return false; - } + //if (_changeRangeNewSpan.intersectsWithPosition(absolutePos)) { + // return false; + //} // First, try to sync up with the new text if we're behind. syncCursorToNewTextIfBehind(); @@ -723,9 +721,10 @@ module TypeScript.IncrementalParser { function updateTokenPositionsAndMarkElements(element: ISyntaxElementInternal, changeStart: number, changeRangeOldEnd: number, delta: number): void { if (element) { // First, try to skip past any elements that we dont' need to move. We don't need to - // move any elements that don't start on or after the end of the change range. - if (fullStart(element) >= changeRangeOldEnd) { - // This element started on or after the end of the edit. We need to move it. + // move any elements that don't start after the end of the change range. + if (fullStart(element) > changeRangeOldEnd) { + // Note, we only move elements that are truly after the end of the change range. + // We consider elements that are touching the end of the change range to be unusable. forceUpdateTokenPositionsForElement(element, delta); } else { @@ -740,7 +739,7 @@ module TypeScript.IncrementalParser { } } // else { - // This element was totally before the edited range. We don't need to do anything + // This element ended strictly before the edited range. We don't need to do anything // with it. // } } @@ -748,14 +747,17 @@ module TypeScript.IncrementalParser { } function forceUpdateTokenPositionsForElement(element: ISyntaxElement, delta: number) { - if (isList(element)) { - var list = element; - for (var i = 0, n = list.length; i < n; i++) { - forceUpdateTokenPositionForNodeOrToken(list[i], delta); + // No need to move anything if the delta is 0. + if (delta !== 0) { + if (isList(element)) { + var list = element; + for (var i = 0, n = list.length; i < n; i++) { + forceUpdateTokenPositionForNodeOrToken(list[i], delta); + } + } + else { + forceUpdateTokenPositionForNodeOrToken(element, delta); } - } - else { - forceUpdateTokenPositionForNodeOrToken(element, delta); } } From 45c3dffd4e257b3e3191072374bea71e831726a9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 14:39:06 -0800 Subject: [PATCH 132/178] Slightly speed up marking by avoiding calling fullStart on so many nodes and tokens. --- src/services/syntax/incrementalParser.ts | 43 +++++++++++++----------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index b086b984926..8af373ce5da 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -75,7 +75,7 @@ module TypeScript.IncrementalParser { // Also, mark any syntax elements that intersect the changed span. We know, up front, // that we cannot reuse these elements. updateTokenPositionsAndMarkElements(oldSourceUnit, - _changeRange.span().start(), _changeRange.span().end(), delta); + _changeRange.span().start(), _changeRange.span().end(), delta, /*fullStart:*/ 0); function release() { _scannerParserSource.release(); @@ -718,31 +718,34 @@ module TypeScript.IncrementalParser { } var tokenCollectorWalker = new TokenCollectorWalker(); - function updateTokenPositionsAndMarkElements(element: ISyntaxElementInternal, changeStart: number, changeRangeOldEnd: number, delta: number): void { - if (element) { + function updateTokenPositionsAndMarkElements(element: ISyntaxElementInternal, changeStart: number, changeRangeOldEnd: number, delta: number, fullStart: number): void { // First, try to skip past any elements that we dont' need to move. We don't need to // move any elements that don't start after the end of the change range. - if (fullStart(element) > changeRangeOldEnd) { - // Note, we only move elements that are truly after the end of the change range. - // We consider elements that are touching the end of the change range to be unusable. - forceUpdateTokenPositionsForElement(element, delta); - } - else { - // Check if the element intersects the change range. If it does, then it is not - // reusable. Also, we'll need to recurse to see what constituent portions we may - // be able to use. - if (fullEnd(element) >= changeStart) { - element.intersectsChange = true; + if (fullStart > changeRangeOldEnd) { + // Note, we only move elements that are truly after the end of the change range. + // We consider elements that are touching the end of the change range to be unusable. + forceUpdateTokenPositionsForElement(element, delta); + } + else { + // Check if the element intersects the change range. If it does, then it is not + // reusable. Also, we'll need to recurse to see what constituent portions we may + // be able to use. + var fullEnd = fullStart + fullWidth(element); + if (fullEnd >= changeStart) { + element.intersectsChange = true; - for (var i = 0, n = childCount(element); i < n; i++) { - updateTokenPositionsAndMarkElements(childAt(element, i), changeStart, changeRangeOldEnd, delta); + for (var i = 0, n = childCount(element); i < n; i++) { + var child = childAt(element, i); + if (child) { + updateTokenPositionsAndMarkElements(child, changeStart, changeRangeOldEnd, delta, fullStart); + fullStart += fullWidth(child); } } - // else { - // This element ended strictly before the edited range. We don't need to do anything - // with it. - // } } + // else { + // This element ended strictly before the edited range. We don't need to do anything + // with it. + // } } } From 7a1d2fbf7b5f56cf14d8273338f8a68756970513 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 14:59:45 -0800 Subject: [PATCH 133/178] Simplify incremental parser. --- src/services/syntax/incrementalParser.ts | 110 ++++++++++------------- 1 file changed, 46 insertions(+), 64 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 8af373ce5da..6b562e51c9d 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -172,7 +172,7 @@ module TypeScript.IncrementalParser { return _outstandingRewindPointCount > 0; } - function canReadFromOldSourceUnit() { + function trySynchronizeCursorToPosition() { // If we're currently pinned, then do not want to touch the cursor. Here's why. First, // recall that we're 'pinned' when we're speculatively parsing. So say we were to allow // returning old nodes/tokens while speculatively parsing. Then, the parser might start @@ -194,64 +194,11 @@ module TypeScript.IncrementalParser { return false; } - // If our current absolute position is in the middle of the changed range in the new text - // then we definitely can't read from the old source unit right now. var absolutePos = absolutePosition(); - //if (_changeRangeNewSpan.intersectsWithPosition(absolutePos)) { - // return false; - //} - - // First, try to sync up with the new text if we're behind. - syncCursorToNewTextIfBehind(); - - // Now see what the position is of the node we're considering reusing. If it's at our - // current position then we can *potentialy* reuse it. We'll still need to do more - // viability checks later on. This will happen in tryGetNodeFromOldSourceUnit or - // tryGetTokenFromOldSourceUnit. - var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); - - // we should never return a node or token that intersects the change range. - Debug.assert(currentNodeOrToken === undefined || !(currentNodeOrToken).intersectsChange); - return currentNodeOrToken && fullStart(currentNodeOrToken) === absolutePos; - } - - function currentNode(): ISyntaxNode { - if (canReadFromOldSourceUnit()) { - // Try to read a node. If we can't then our caller will call back in and just try - // to get a token. - var node = tryGetNodeFromOldSourceUnit(); - if (node) { - return node; - } - } - - // Either we were ahead of the old text, or we were pinned. No node can be read here. - return undefined; - } - - function currentToken(): ISyntaxToken { - if (canReadFromOldSourceUnit()) { - var token = tryGetTokenFromOldSourceUnit(); - if (token) { - return token; - } - } - - // Either we couldn't read from the old source unit, or we weren't able to successfully - // get a token from it. In this case we need to read a token from the underlying text. - return _scannerParserSource.currentToken(); - } - - function currentContextualToken(): ISyntaxToken { - // Just delegate to the underlying source to handle - return _scannerParserSource.currentContextualToken(); - } - - function syncCursorToNewTextIfBehind() { while (true) { if (_oldSourceUnitCursor.isFinished()) { - // Can't sync up if the cursor is finished. - return; + // Can't synchronize the cursor to the current position if the cursor is finished. + return false; } // Start with the current node or token the cursor is pointing at. @@ -273,15 +220,17 @@ module TypeScript.IncrementalParser { continue; } - var absolutePos = absolutePosition(); - var currentNodeOrTokenFullStart = fullStart(currentNodeOrToken); + if (currentNodeOrTokenFullStart === absolutePos) { + // We were able to synchronize the cursor to the current position. We can + // read from the cursor + return true; + } + if (currentNodeOrTokenFullStart >= absolutePos) { - // The node or token is either where we're at, or ahead of where we're at. If - // it's where we're at, there's no work to be done. If it's ahead of where - // we're at, we need to rescan tokens until we catch up. in either case, - // we don't need to sync the cursor. - return; + // The node or token is ahead of the current position. We'll need to rescan + // tokens until we catch up. + return false; } // The node or is behind the current position we're at in the text. @@ -305,6 +254,39 @@ module TypeScript.IncrementalParser { } } + + function currentNode(): ISyntaxNode { + if (trySynchronizeCursorToPosition()) { + // Try to read a node. If we can't then our caller will call back in and just try + // to get a token. + var node = tryGetNodeFromOldSourceUnit(); + if (node) { + return node; + } + } + + // Either we were ahead of the old text, or we were pinned. No node can be read here. + return undefined; + } + + function currentToken(): ISyntaxToken { + if (trySynchronizeCursorToPosition()) { + var token = tryGetTokenFromOldSourceUnit(); + if (token) { + return token; + } + } + + // Either we couldn't read from the old source unit, or we weren't able to successfully + // get a token from it. In this case we need to read a token from the underlying text. + return _scannerParserSource.currentToken(); + } + + function currentContextualToken(): ISyntaxToken { + // Just delegate to the underlying source to handle + return _scannerParserSource.currentContextualToken(); + } + function tryGetNodeFromOldSourceUnit(): ISyntaxNode { // Debug.assert(canReadFromOldSourceUnit()); @@ -369,7 +351,7 @@ module TypeScript.IncrementalParser { } function peekToken(n: number): ISyntaxToken { - if (canReadFromOldSourceUnit()) { + if (trySynchronizeCursorToPosition()) { var token = tryPeekTokenFromOldSourceUnit(n); if (token) { return token; From eb35cd5d592193182ed15b8e1a3640e8c303ef79 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 15:26:00 -0800 Subject: [PATCH 134/178] Speed up incremental parser. --- src/services/syntax/incrementalParser.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 6b562e51c9d..83637f37197 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -700,7 +700,7 @@ module TypeScript.IncrementalParser { } var tokenCollectorWalker = new TokenCollectorWalker(); - function updateTokenPositionsAndMarkElements(element: ISyntaxElementInternal, changeStart: number, changeRangeOldEnd: number, delta: number, fullStart: number): void { + function updateTokenPositionsAndMarkElements(element: ISyntaxElement, changeStart: number, changeRangeOldEnd: number, delta: number, fullStart: number): void { // First, try to skip past any elements that we dont' need to move. We don't need to // move any elements that don't start after the end of the change range. if (fullStart > changeRangeOldEnd) { @@ -714,15 +714,26 @@ module TypeScript.IncrementalParser { // be able to use. var fullEnd = fullStart + fullWidth(element); if (fullEnd >= changeStart) { - element.intersectsChange = true; + (element).intersectsChange = true; - for (var i = 0, n = childCount(element); i < n; i++) { - var child = childAt(element, i); - if (child) { + if (isList(element)) { + var list = element; + for (var i = 0, n = list.length; i < n; i++) { + var child: ISyntaxElement = list[i]; updateTokenPositionsAndMarkElements(child, changeStart, changeRangeOldEnd, delta, fullStart); fullStart += fullWidth(child); } } + else if (isNode(element)) { + var node = element; + for (var i = 0, n = node.childCount; i < n; i++) { + var child = node.childAt(i); + if (child) { + updateTokenPositionsAndMarkElements(child, changeStart, changeRangeOldEnd, delta, fullStart); + fullStart += fullWidth(child); + } + } + } } // else { // This element ended strictly before the edited range. We don't need to do anything From ca5a01b3aeb79703ebb691a99d02b8dd2da4fe06 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 15:29:13 -0800 Subject: [PATCH 135/178] Make 'kind' non-enumerable. --- src/services/syntax/syntaxList.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/syntax/syntaxList.ts b/src/services/syntax/syntaxList.ts index 4b11518c239..aa6d8112952 100644 --- a/src/services/syntax/syntaxList.ts +++ b/src/services/syntax/syntaxList.ts @@ -38,7 +38,7 @@ module TypeScript { module TypeScript.Syntax { function addArrayPrototypeValue(name: string, val: any) { if (Object.defineProperty && (Array.prototype)[name] === undefined) { - Object.defineProperty(Array.prototype, name, { value: val, writable: false }); + Object.defineProperty(Array.prototype, name, { value: val, writable: false, enumerable: false }); } else { (Array.prototype)[name] = val; From 3bcec5e3fdb31743e255ee03dabd9967ddbef6a0 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 15:48:06 -0800 Subject: [PATCH 136/178] Remove unused asserts. --- src/services/syntax/incrementalParser.ts | 39 +++--------------------- 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 83637f37197..f6288589698 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -104,10 +104,6 @@ module TypeScript.IncrementalParser { // start of the tree. for (var i = 0; start > 0 && i <= maxLookahead; i++) { var token = findToken(sourceUnit, start); - - // Debug.assert(token.kind !== SyntaxKind.None); - // Debug.assert(token.kind() === SyntaxKind.EndOfFileToken || token.fullWidth() > 0); - var position = token.fullStart(); start = Math.max(0, position - 1); @@ -254,7 +250,6 @@ module TypeScript.IncrementalParser { } } - function currentNode(): ISyntaxNode { if (trySynchronizeCursorToPosition()) { // Try to read a node. If we can't then our caller will call back in and just try @@ -288,8 +283,6 @@ module TypeScript.IncrementalParser { } function tryGetNodeFromOldSourceUnit(): ISyntaxNode { - // Debug.assert(canReadFromOldSourceUnit()); - // Keep moving the cursor down to the first node that is safe to return. A node is // safe to return if: // a) it does not contain skipped text. @@ -303,9 +296,7 @@ module TypeScript.IncrementalParser { return undefined; } - var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node); - if (!isIncrementallyUnusuable) { - + if (!TypeScript.isIncrementallyUnusable(node)) { // Didn't contain anything that would make it unusable. Awesome. This is // a node we can reuse. return node; @@ -320,9 +311,10 @@ module TypeScript.IncrementalParser { function canReuseTokenFromOldSourceUnit(token: ISyntaxToken): boolean { // A token is safe to return if: - // a) it does not contain skipped text. - // b) it is not zero width. - // c) it is not a contextual parser token. + // a) it did not intersect the change range. + // b) it does not contain skipped text. + // c) it is not zero width. + // d) it is not a contextual parser token. // // NOTE: It is safe to get a token regardless of what our strict context was/is. That's // because the strict context doesn't change what tokens are scanned, only how the @@ -342,8 +334,6 @@ module TypeScript.IncrementalParser { } function tryGetTokenFromOldSourceUnit(): ISyntaxToken { - // Debug.assert(canReadFromOldSourceUnit()); - // get the current token that the cursor is pointing at. var token = _oldSourceUnitCursor.currentToken(); @@ -363,8 +353,6 @@ module TypeScript.IncrementalParser { } function tryPeekTokenFromOldSourceUnit(n: number): ISyntaxToken { - // Debug.assert(canReadFromOldSourceUnit()); - // clone the existing cursor so we can move it forward and then restore ourselves back // to where we started from. @@ -512,7 +500,6 @@ module TypeScript.IncrementalParser { // Makes this cursor into a deep copy of the cursor passed in. function deepCopyFrom(other: SyntaxCursor): void { - // Debug.assert(currentPieceIndex === -1); for (var i = 0, n = other.pieces.length; i < n; i++) { var piece = other.pieces[i]; @@ -522,8 +509,6 @@ module TypeScript.IncrementalParser { pushElement(piece.element, piece.indexInParent); } - - // Debug.assert(currentPieceIndex === other.currentPieceIndex); } function isFinished(): boolean { @@ -538,9 +523,6 @@ module TypeScript.IncrementalParser { var result = pieces[currentPieceIndex].element; // The current element must always be a node or a token. - // Debug.assert(result !== undefined); - // Debug.assert(result.isNode() || result.isToken()); - return result; } @@ -564,9 +546,6 @@ module TypeScript.IncrementalParser { return; } - // The last element must be a token or a node. - // Debug.assert(isNode(nodeOrToken)); - // Either the node has some existent child, then move to it. if it doesn't, then it's // an empty node. Conceptually the first child of an empty node is really just the // next sibling of the empty node. @@ -585,8 +564,6 @@ module TypeScript.IncrementalParser { // This element must have been an empty node. Moving to its 'first child' is equivalent to just // moving to the next sibling. - - // Debug.assert(fullWidth(nodeOrToken) === 0); moveToNextSibling(); } @@ -630,15 +607,11 @@ module TypeScript.IncrementalParser { if (isList(element)) { // We cannot ever get an empty list in our piece path. Empty lists are 'shared' and // we make sure to filter that out before pushing any children. - // Debug.assert(childCount(element) > 0); - pushElement(childAt(element, 0), /*indexInParent:*/ 0); } } function pushElement(element: ISyntaxElement, indexInParent: number): void { - // Debug.assert(element !== undefined); - // Debug.assert(indexInParent >= 0); currentPieceIndex++; // Reuse an existing piece if we have one. Otherwise, push a new piece to our list. @@ -660,7 +633,6 @@ module TypeScript.IncrementalParser { continue; } - // Debug.assert(isToken(element)); return; } } @@ -669,7 +641,6 @@ module TypeScript.IncrementalParser { moveToFirstToken(); var element = currentNodeOrToken(); - // Debug.assert(element === undefined || element.isToken()); return element; } From b590ceb6b33c48acc7ba32e8c777c87162fd0e33 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 16:35:19 -0800 Subject: [PATCH 137/178] Fixing check. --- src/services/syntax/incrementalParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index f6288589698..68c492853dd 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -223,7 +223,7 @@ module TypeScript.IncrementalParser { return true; } - if (currentNodeOrTokenFullStart >= absolutePos) { + if (currentNodeOrTokenFullStart > absolutePos) { // The node or token is ahead of the current position. We'll need to rescan // tokens until we catch up. return false; From f10794be742c7fd5b24ab6db06b52f20389f5ee5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 16:42:49 -0800 Subject: [PATCH 138/178] Simplify rewind points. --- src/services/syntax/incrementalParser.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 68c492853dd..273b3eec5fe 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -128,12 +128,7 @@ module TypeScript.IncrementalParser { var rewindPoint = _scannerParserSource.getRewindPoint(); // Clone our cursor. That way we can restore to that point if the parser needs to rewind. - var oldSourceUnitCursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); - - // Store where we were when the rewind point was created. - rewindPoint.oldSourceUnitCursor = _oldSourceUnitCursor; - - _oldSourceUnitCursor = oldSourceUnitCursorClone; + rewindPoint.oldSourceUnitCursor = cloneSyntaxCursor(_oldSourceUnitCursor); _outstandingRewindPointCount++; return rewindPoint; From 7836ae82b799e2ee8e64b5b1fa3d9d7d6f12ce7a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 21 Nov 2014 16:50:39 -0800 Subject: [PATCH 139/178] Fixed issue where findAllRefs on identifiers starting with 2+ underscores failed. --- src/services/services.ts | 29 ++++++++++++++----- .../findAllRefsWithLeadingUnderscoreNames1.ts | 18 ++++++++++++ .../findAllRefsWithLeadingUnderscoreNames2.ts | 18 ++++++++++++ .../findAllRefsWithLeadingUnderscoreNames3.ts | 18 ++++++++++++ .../findAllRefsWithLeadingUnderscoreNames4.ts | 18 ++++++++++++ .../findAllRefsWithLeadingUnderscoreNames5.ts | 24 +++++++++++++++ .../findAllRefsWithLeadingUnderscoreNames6.ts | 24 +++++++++++++++ .../findAllRefsWithLeadingUnderscoreNames7.ts | 14 +++++++++ .../findAllRefsWithLeadingUnderscoreNames8.ts | 14 +++++++++ .../findAllRefsWithLeadingUnderscoreNames9.ts | 14 +++++++++ .../getOccurrencesOfAnonymousFunction.ts | 13 +++++++-- 11 files changed, 194 insertions(+), 10 deletions(-) create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts create mode 100644 tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts diff --git a/src/services/services.ts b/src/services/services.ts index cf5ca07132e..587b07390a2 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3887,39 +3887,54 @@ module ts { var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), declarations); // Get the text to search for, we need to normalize it as external module names will have quote - var symbolName = getNormalizedSymbolName(symbol.name, declarations); + var declaredName = getDeclaredName(symbol); - // Get syntactic diagnostics + // Try to get the smallest valid scope that we can limit our search to; + // otherwise we'll need to search globally (i.e. include each file). var scope = getSymbolScope(symbol); if (scope) { result = []; - getReferencesInNode(scope, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result); + getReferencesInNode(scope, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result); } else { + var internedName = getInternedName(symbol, declarations) forEach(sourceFiles, sourceFile => { cancellationToken.throwIfCancellationRequested(); - if (lookUp(sourceFile.identifiers, symbolName)) { + if (lookUp(sourceFile.identifiers, internedName)) { result = result || []; - getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result); + getReferencesInNode(sourceFile, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result); } }); } return result; - function getNormalizedSymbolName(symbolName: string, declarations: Declaration[]): string { + function getDeclaredName(symbol: Symbol) { + var name = typeInfoResolver.symbolToString(symbol); + + return stripQuotes(name); + } + + function getInternedName(symbol: Symbol, declarations: Declaration[]): string { // Special case for function expressions, whose names are solely local to their bodies. var functionExpression = forEach(declarations, d => d.kind === SyntaxKind.FunctionExpression ? d : undefined); + // When a name gets interned into a SourceFile's 'identifiers' Map, + // its name is escaped and stored in the same way its symbol name/identifier + // name should be stored. if (functionExpression && functionExpression.name) { var name = functionExpression.name.text; } else { - var name = symbolName; + var name = symbol.name; } + return stripQuotes(name); + } + + function stripQuotes(name: string) { var length = name.length; if (length >= 2 && name.charCodeAt(0) === CharacterCodes.doubleQuote && name.charCodeAt(length - 1) === CharacterCodes.doubleQuote) { return name.substring(1, length - 1); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts new file mode 100644 index 00000000000..369258832a9 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts @@ -0,0 +1,18 @@ +/// + +////class Foo { +//// public [|_bar|]() { return 0; } +////} +//// +////var x: Foo; +////x.[|_bar|]; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts new file mode 100644 index 00000000000..53adb8236a4 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts @@ -0,0 +1,18 @@ +/// + +////class Foo { +//// public [|__bar|]() { return 0; } +////} +//// +////var x: Foo; +////x.[|__bar|]; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts new file mode 100644 index 00000000000..1793ec6ddc4 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts @@ -0,0 +1,18 @@ +/// + +////class Foo { +//// public [|___bar|]() { return 0; } +////} +//// +////var x: Foo; +////x.[|___bar|]; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts new file mode 100644 index 00000000000..694ecdc79ab --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts @@ -0,0 +1,18 @@ +/// + +////class Foo { +//// public [|____bar|]() { return 0; } +////} +//// +////var x: Foo; +////x.[|____bar|]; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts new file mode 100644 index 00000000000..a110597f4b7 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts @@ -0,0 +1,24 @@ +/// + +////class Foo { +//// public _bar; +//// public __bar; +//// public [|___bar|]; +//// public ____bar; +////} +//// +////var x: Foo; +////x._bar; +////x.__bar; +////x.[|___bar|]; +////x.____bar; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts new file mode 100644 index 00000000000..97ed29eb178 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts @@ -0,0 +1,24 @@ +/// + +////class Foo { +//// public _bar; +//// public [|__bar|]; +//// public ___bar; +//// public ____bar; +////} +//// +////var x: Foo; +////x._bar; +////x.[|__bar|]; +////x.___bar; +////x.____bar; + + +test.ranges().forEach(r1 => { + goTo.position(r1.start); + verify.referencesCountIs(2); + + test.ranges().forEach(r2 => { + verify.referencesAtPositionContains(r2); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts new file mode 100644 index 00000000000..76adc714b2c --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts @@ -0,0 +1,14 @@ +/// + +////function [|__foo|]() { +//// [|__foo|](); +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + verify.referencesCountIs(2); + + test.ranges().forEach(range => { + verify.referencesAtPositionContains(range); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts new file mode 100644 index 00000000000..d25d6335f2b --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts @@ -0,0 +1,14 @@ +/// + +////(function [|__foo|]() { +//// [|__foo|](); +////}) + +test.ranges().forEach(r => { + goTo.position(r.start); + verify.referencesCountIs(2); + + test.ranges().forEach(range => { + verify.referencesAtPositionContains(range); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts new file mode 100644 index 00000000000..295344d23f9 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts @@ -0,0 +1,14 @@ +/// + +////(function [|___foo|]() { +//// [|___foo|](); +////}) + +test.ranges().forEach(r => { + goTo.position(r.start); + verify.referencesCountIs(2); + + test.ranges().forEach(range => { + verify.referencesAtPositionContains(range); + }); +}); \ No newline at end of file diff --git a/tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts b/tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts index 9e32b9c0357..96354df6b05 100644 --- a/tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts +++ b/tests/cases/fourslash/getOccurrencesOfAnonymousFunction.ts @@ -1,9 +1,16 @@ /// -////(function f/**/oo(): number { +////(function [|foo|](): number { +//// var x = [|foo|]; //// return 0; ////}) -goTo.marker(); -verify.occurrencesAtPositionCount(1); +test.ranges().forEach(r => { + goTo.position(r.start); + verify.occurrencesAtPositionCount(2); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range); + }); +}); \ No newline at end of file From 9781c05693d248b5d88e8e8f27a623aed75e61d0 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Fri, 21 Nov 2014 17:16:25 -0800 Subject: [PATCH 140/178] drop unused variables --- src/compiler/parser.ts | 8 -------- ...spaceBeforeQuestionMarkInPropertyAssignment.errors.txt | 7 +++++++ .../spaceBeforeQuestionMarkInPropertyAssignment.ts | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.errors.txt create mode 100644 tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f6c6dbf5d27..117de20dd5f 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2664,8 +2664,6 @@ module ts { function parseReturnStatement(): ReturnStatement { var node = createNode(SyntaxKind.ReturnStatement); - var returnTokenStart = scanner.getTokenPos(); - var returnTokenLength = scanner.getTextPos() - returnTokenStart; parseExpected(SyntaxKind.ReturnKeyword); if (!canParseSemicolon()) { @@ -2935,8 +2933,6 @@ module ts { node.type = parseTypeAnnotation(); // Issue any initializer-related errors on the equals token - var initializerStart = scanner.getTokenPos(); - var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; node.initializer = parseInitializer(/*inParameter*/ false, noIn); return finishNode(node); @@ -2998,7 +2994,6 @@ module ts { function parsePropertyMemberDeclaration(pos: number, modifiers: ModifiersArray): Declaration { var name = parsePropertyName(); var flags = modifiers ? modifiers.flags : 0; - var questionStart = scanner.getTokenPos(); if (parseOptional(SyntaxKind.QuestionToken)) { // Note: this is not legal as per the grammar. But we allow it in the parser and // report an error in the grammar checker. @@ -3031,8 +3026,6 @@ module ts { property.name = name; property.type = parseTypeAnnotation(); - var initializerStart = scanner.getTokenPos(); - var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; property.initializer = parseInitializer(/*inParameter*/ false); parseSemicolon(); @@ -3324,7 +3317,6 @@ module ts { var pos = getNodePos(); var modifiers = parseModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { - var modifiersEnd = scanner.getStartPos(); nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { return parseExportAssignmentTail(pos, modifiers); diff --git a/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.errors.txt b/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.errors.txt new file mode 100644 index 00000000000..d51b97546d4 --- /dev/null +++ b/tests/baselines/reference/spaceBeforeQuestionMarkInPropertyAssignment.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts(1,12): error TS1162: An object member cannot be declared optional. + + +==== tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts (1 errors) ==== + var x = {x ?: 1} // should not crash + ~ +!!! error TS1162: An object member cannot be declared optional. \ No newline at end of file diff --git a/tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts b/tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts new file mode 100644 index 00000000000..3a1492037e3 --- /dev/null +++ b/tests/cases/compiler/spaceBeforeQuestionMarkInPropertyAssignment.ts @@ -0,0 +1 @@ +var x = {x ?: 1} // should not crash \ No newline at end of file From 18377990488e21f81bb486db9e5972eaf0f6d6cd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 19:02:57 -0800 Subject: [PATCH 141/178] remove unneeded enum from the parser. --- src/compiler/parser.ts | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 117de20dd5f..c2159d920c0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -752,13 +752,6 @@ module ts { Error } - const enum ModifierContext { - SourceElements, // Top level elements in a source file - ModuleElements, // Elements in module declaration - ClassMembers, // Members in class declaration - Parameters, // Parameters in parameter list - } - export interface ReferencePathMatchResult { fileReference?: FileReference diagnostic?: DiagnosticMessage @@ -1494,7 +1487,7 @@ module ts { function parseParameter(flags: NodeFlags = 0): ParameterDeclaration { var node = createNode(SyntaxKind.Parameter); - var modifiers = parseModifiers(ModifierContext.Parameters); + var modifiers = parseModifiers(); setModifiers(node, modifiers); if (parseOptional(SyntaxKind.DotDotDotToken)) { node.flags |= NodeFlags.Rest; @@ -3096,7 +3089,7 @@ module ts { return false; } - function parseModifiers(context: ModifierContext): ModifiersArray { + function parseModifiers(): ModifiersArray { var flags = 0; var modifiers: ModifiersArray; while (true) { @@ -3119,7 +3112,7 @@ module ts { function parseClassMemberDeclaration(): Declaration { var pos = getNodePos(); - var modifiers = parseModifiers(ModifierContext.ClassMembers); + var modifiers = parseModifiers(); if (parseContextualModifier(SyntaxKind.GetKeyword)) { return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, modifiers); } @@ -3313,9 +3306,9 @@ module ts { } } - function parseDeclaration(modifierContext: ModifierContext): Statement { + function parseDeclaration(): Statement { var pos = getNodePos(); - var modifiers = parseModifiers(modifierContext); + var modifiers = parseModifiers(); if (token === SyntaxKind.ExportKeyword) { nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { @@ -3376,16 +3369,16 @@ module ts { } function parseSourceElement() { - return parseSourceElementOrModuleElement(ModifierContext.SourceElements); + return parseSourceElementOrModuleElement(); } function parseModuleElement() { - return parseSourceElementOrModuleElement(ModifierContext.ModuleElements); + return parseSourceElementOrModuleElement(); } - function parseSourceElementOrModuleElement(modifierContext: ModifierContext): Statement { + function parseSourceElementOrModuleElement(): Statement { return isDeclarationStart() - ? parseDeclaration(modifierContext) + ? parseDeclaration() : parseStatement(); } From f559effe5d626d7228b111f7e68a6a77a7e62571 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 19:50:08 -0800 Subject: [PATCH 142/178] Initial work on making all node construction in the parser consistent. --- src/compiler/parser.ts | 108 ++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 117de20dd5f..ea025bd2a62 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3140,14 +3140,14 @@ module ts { Debug.fail("Should not have attempted to parse class member declaration."); } - function parseClassDeclaration(pos: number, flags: NodeFlags): ClassDeclaration { - var node = createNode(SyntaxKind.ClassDeclaration, pos); - node.flags = flags; + function parseClassDeclaration(fullStart: number, modifiers: ModifiersArray): ClassDeclaration { + var node = createNode(SyntaxKind.ClassDeclaration, fullStart); + setModifiers(node, modifiers); parseExpected(SyntaxKind.ClassKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); - // TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates + // TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates node.baseType = parseOptional(SyntaxKind.ExtendsKeyword) ? parseTypeReference() : undefined; if (parseOptional(SyntaxKind.ImplementsKeyword)) { node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); @@ -3162,9 +3162,9 @@ module ts { return finishNode(node); } - function parseInterfaceDeclaration(pos: number, flags: NodeFlags): InterfaceDeclaration { - var node = createNode(SyntaxKind.InterfaceDeclaration, pos); - node.flags = flags; + function parseInterfaceDeclaration(fullStart: number, modifiers: ModifiersArray): InterfaceDeclaration { + var node = createNode(SyntaxKind.InterfaceDeclaration, fullStart); + setModifiers(node, modifiers); parseExpected(SyntaxKind.InterfaceKeyword); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); @@ -3176,9 +3176,9 @@ module ts { return finishNode(node); } - function parseTypeAliasDeclaration(pos: number, flags: NodeFlags): TypeAliasDeclaration { - var node = createNode(SyntaxKind.TypeAliasDeclaration, pos); - node.flags = flags; + function parseTypeAliasDeclaration(fullStart: number, modifiers: ModifiersArray): TypeAliasDeclaration { + var node = createNode(SyntaxKind.TypeAliasDeclaration, fullStart); + setModifiers(node, modifiers); parseExpected(SyntaxKind.TypeKeyword); node.name = parseIdentifier(); parseExpected(SyntaxKind.EqualsToken); @@ -3187,23 +3187,21 @@ module ts { return finishNode(node); } - function parseAndCheckEnumDeclaration(pos: number, flags: NodeFlags): EnumDeclaration { - var enumIsConst = flags & NodeFlags.Const; + // In an ambient declaration, the grammar only allows integer literals as initializers. + // In a non-ambient declaration, the grammar allows uninitialized members only in a + // ConstantEnumMemberSection, which starts at the beginning of an enum declaration + // or any time an integer literal initializer is encountered. + function parseEnumMember(): EnumMember { + var node = createNode(SyntaxKind.EnumMember, scanner.getStartPos()); + node.name = parsePropertyName(); + node.initializer = parseInitializer(/*inParameter*/ false); + return finishNode(node); + } - // In an ambient declaration, the grammar only allows integer literals as initializers. - // In a non-ambient declaration, the grammar allows uninitialized members only in a - // ConstantEnumMemberSection, which starts at the beginning of an enum declaration - // or any time an integer literal initializer is encountered. - function parseEnumMember(): EnumMember { - var node = createNode(SyntaxKind.EnumMember); - node.name = parsePropertyName(); - node.initializer = parseInitializer(/*inParameter*/ false); - return finishNode(node); - } - - var node = createNode(SyntaxKind.EnumDeclaration, pos); + function parseAndCheckEnumDeclaration(fullStart: number, flags: NodeFlags): EnumDeclaration { + var node = createNode(SyntaxKind.EnumDeclaration, fullStart); node.flags = flags; - if (enumIsConst) { + if (flags & NodeFlags.Const) { parseExpected(SyntaxKind.ConstKeyword); } parseExpected(SyntaxKind.EnumKeyword); @@ -3219,7 +3217,7 @@ module ts { } function parseModuleBody(): Block { - var node = createNode(SyntaxKind.ModuleBlock); + var node = createNode(SyntaxKind.ModuleBlock, scanner.getStartPos()); if (parseExpected(SyntaxKind.OpenBraceToken)) { node.statements = parseList(ParsingContext.ModuleElements, /*checkForStrictMode*/ false, parseModuleElement); parseExpected(SyntaxKind.CloseBraceToken); @@ -3230,35 +3228,34 @@ module ts { return finishNode(node); } - function parseInternalModuleTail(pos: number, flags: NodeFlags): ModuleDeclaration { - var node = createNode(SyntaxKind.ModuleDeclaration, pos); + function parseInternalModuleTail(fullStart: number, flags: NodeFlags): ModuleDeclaration { + var node = createNode(SyntaxKind.ModuleDeclaration, fullStart); node.flags = flags; node.name = parseIdentifier(); - if (parseOptional(SyntaxKind.DotToken)) { - node.body = parseInternalModuleTail(getNodePos(), NodeFlags.Export); - } - else { - node.body = parseModuleBody(); - } + node.body = parseOptional(SyntaxKind.DotToken) + ? parseInternalModuleTail(getNodePos(), NodeFlags.Export) + : parseModuleBody(); return finishNode(node); } - function parseAmbientExternalModuleDeclaration(pos: number, flags: NodeFlags): ModuleDeclaration { - var node = createNode(SyntaxKind.ModuleDeclaration, pos); + function parseAmbientExternalModuleDeclaration(fullStart: number, flags: NodeFlags): ModuleDeclaration { + var node = createNode(SyntaxKind.ModuleDeclaration, fullStart); node.flags = flags; node.name = parseStringLiteral(); node.body = parseModuleBody(); return finishNode(node); } - function parseModuleDeclaration(pos: number, flags: NodeFlags): ModuleDeclaration { + function parseModuleDeclaration(fullStart: number, flags: NodeFlags): ModuleDeclaration { parseExpected(SyntaxKind.ModuleKeyword); - return token === SyntaxKind.StringLiteral ? parseAmbientExternalModuleDeclaration(pos, flags) : parseInternalModuleTail(pos, flags); + return token === SyntaxKind.StringLiteral + ? parseAmbientExternalModuleDeclaration(fullStart, flags) + : parseInternalModuleTail(fullStart, flags); } - function parseImportDeclaration(pos: number, flags: NodeFlags): ImportDeclaration { - var node = createNode(SyntaxKind.ImportDeclaration, pos); - node.flags = flags; + function parseImportDeclaration(fullStart: number, modifiers: ModifiersArray): ImportDeclaration { + var node = createNode(SyntaxKind.ImportDeclaration, fullStart); + setModifiers(node, modifiers); parseExpected(SyntaxKind.ImportKeyword); node.name = parseIdentifier(); parseExpected(SyntaxKind.EqualsToken); @@ -3274,10 +3271,9 @@ module ts { return finishNode(node); } - function parseExportAssignmentTail(pos: number, modifiers: ModifiersArray): ExportAssignment { - var node = createNode(SyntaxKind.ExportAssignment, pos); + function parseExportAssignmentTail(fullStart: number, modifiers: ModifiersArray): ExportAssignment { + var node = createNode(SyntaxKind.ExportAssignment, fullStart); setModifiers(node, modifiers); - node.exportName = parseIdentifier(); parseSemicolon(); return finishNode(node); @@ -3314,12 +3310,12 @@ module ts { } function parseDeclaration(modifierContext: ModifierContext): Statement { - var pos = getNodePos(); + var fullStart = getNodePos(); var modifiers = parseModifiers(modifierContext); if (token === SyntaxKind.ExportKeyword) { nextToken(); if (parseOptional(SyntaxKind.EqualsToken)) { - return parseExportAssignmentTail(pos, modifiers); + return parseExportAssignmentTail(fullStart, modifiers); } } @@ -3328,37 +3324,37 @@ module ts { switch (token) { case SyntaxKind.VarKeyword: case SyntaxKind.LetKeyword: - result = parseVariableStatement(pos, flags); + result = parseVariableStatement(fullStart, flags); break; case SyntaxKind.ConstKeyword: var isConstEnum = lookAhead(() => nextToken() === SyntaxKind.EnumKeyword); if (isConstEnum) { - result = parseAndCheckEnumDeclaration(pos, flags | NodeFlags.Const); + result = parseAndCheckEnumDeclaration(fullStart, flags | NodeFlags.Const); } else { - result = parseVariableStatement(pos, flags); + result = parseVariableStatement(fullStart, flags); } break; case SyntaxKind.FunctionKeyword: - result = parseFunctionDeclaration(pos, flags); + result = parseFunctionDeclaration(fullStart, flags); break; case SyntaxKind.ClassKeyword: - result = parseClassDeclaration(pos, flags); + result = parseClassDeclaration(fullStart, modifiers); break; case SyntaxKind.InterfaceKeyword: - result = parseInterfaceDeclaration(pos, flags); + result = parseInterfaceDeclaration(fullStart, modifiers); break; case SyntaxKind.TypeKeyword: - result = parseTypeAliasDeclaration(pos, flags); + result = parseTypeAliasDeclaration(fullStart, modifiers); break; case SyntaxKind.EnumKeyword: - result = parseAndCheckEnumDeclaration(pos, flags); + result = parseAndCheckEnumDeclaration(fullStart, flags); break; case SyntaxKind.ModuleKeyword: - result = parseModuleDeclaration(pos, flags); + result = parseModuleDeclaration(fullStart, flags); break; case SyntaxKind.ImportKeyword: - result = parseImportDeclaration(pos, flags); + result = parseImportDeclaration(fullStart, modifiers); break; default: error(Diagnostics.Declaration_expected); From a36e6addd12f84da9eadeef2a04df80f338b0518 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 19:59:13 -0800 Subject: [PATCH 143/178] Make node creation more consistent in the parser. --- src/compiler/parser.ts | 89 +++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 54 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ea025bd2a62..1b35969de81 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1530,28 +1530,25 @@ module ts { } function parseSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean): ParsedSignature { + var signature = {}; + fillSignature(kind, returnToken, returnTokenRequired, signature); + return signature; + } + + function fillSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, signature: ParsedSignature): void { if (kind === SyntaxKind.ConstructSignature) { parseExpected(SyntaxKind.NewKeyword); } - var typeParameters = parseTypeParameters(); - var parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); - - var type: TypeNode; + signature.typeParameters = parseTypeParameters(); + signature.parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); if (returnTokenRequired) { parseExpected(returnToken); - type = parseType(); + signature.type = parseType(); } - else if (parseOptional(returnToken)) - { - type = parseType(); + else if (parseOptional(returnToken)) { + signature.type = parseType(); } - - return { - typeParameters, - parameters, - type: type - }; } // Because we use this for index signatures as well, we sometimes use @@ -2966,13 +2963,12 @@ module ts { function parseFunctionDeclaration(pos?: number, flags?: NodeFlags): FunctionLikeDeclaration { var node = createNode(SyntaxKind.FunctionDeclaration, pos); - if (flags) node.flags = flags; + if (flags) { + node.flags = flags; + } parseExpected(SyntaxKind.FunctionKeyword); node.name = parseIdentifier(); - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } @@ -2980,18 +2976,13 @@ module ts { function parseConstructorDeclaration(pos: number, modifiers: ModifiersArray): ConstructorDeclaration { var node = createNode(SyntaxKind.Constructor, pos); setModifiers(node, modifiers); - parseExpected(SyntaxKind.ConstructorKeyword); - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); node.body = parseFunctionBlockOrSemicolon(); - return finishNode(node); } - function parsePropertyMemberDeclaration(pos: number, modifiers: ModifiersArray): Declaration { + function parsePropertyMemberDeclaration(fullStart: number, modifiers: ModifiersArray): Declaration { var name = parsePropertyName(); var flags = modifiers ? modifiers.flags : 0; if (parseOptional(SyntaxKind.QuestionToken)) { @@ -3001,47 +2992,35 @@ module ts { } if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { - var method = createNode(SyntaxKind.Method, pos); + var method = createNode(SyntaxKind.Method, fullStart); setModifiers(method, modifiers); - if (flags) { method.flags = flags; } method.name = name; - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - method.typeParameters = sig.typeParameters; - method.parameters = sig.parameters; - method.type = sig.type; + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, method); method.body = parseFunctionBlockOrSemicolon(); - return finishNode(method); } else { - var property = createNode(SyntaxKind.Property, pos); + var property = createNode(SyntaxKind.Property, fullStart); setModifiers(property, modifiers); - if (flags) { property.flags = flags; } property.name = name; property.type = parseTypeAnnotation(); - property.initializer = parseInitializer(/*inParameter*/ false); parseSemicolon(); - return finishNode(property); } } - function parseMemberAccessorDeclaration(kind: SyntaxKind, pos: number, modifiers: ModifiersArray): MethodDeclaration { - var node = createNode(kind, pos); + function parseMemberAccessorDeclaration(kind: SyntaxKind, fullStart: number, modifiers: ModifiersArray): MethodDeclaration { + var node = createNode(kind, fullStart); setModifiers(node, modifiers); - node.name = parsePropertyName(); - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); node.body = parseFunctionBlockOrSemicolon(); return finishNode(node); } @@ -3101,15 +3080,17 @@ module ts { var modifiers: ModifiersArray; while (true) { var modifierStart = scanner.getTokenPos(); - var modifierToken = token; + var modifierKind = token; - if (!parseAnyContextualModifier()) break; + if (!parseAnyContextualModifier()) { + break; + } if (!modifiers) { modifiers = []; } - flags |= modifierToFlag(modifierToken); - modifiers.push(finishNode(createNode(modifierToken, modifierStart))); + flags |= modifierToFlag(modifierKind); + modifiers.push(finishNode(createNode(modifierKind, modifierStart))); } if (modifiers) { modifiers.flags = flags; @@ -3118,22 +3099,22 @@ module ts { } function parseClassMemberDeclaration(): Declaration { - var pos = getNodePos(); + var fullStart = getNodePos(); var modifiers = parseModifiers(ModifierContext.ClassMembers); if (parseContextualModifier(SyntaxKind.GetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, pos, modifiers); + return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, fullStart, modifiers); } if (parseContextualModifier(SyntaxKind.SetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, pos, modifiers); + return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, fullStart, modifiers); } if (token === SyntaxKind.ConstructorKeyword) { - return parseConstructorDeclaration(pos, modifiers); + return parseConstructorDeclaration(fullStart, modifiers); } if (token >= SyntaxKind.Identifier || token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral) { - return parsePropertyMemberDeclaration(pos, modifiers); + return parsePropertyMemberDeclaration(fullStart, modifiers); } if (token === SyntaxKind.OpenBracketToken) { - return parseIndexSignatureMember(modifiers, pos); + return parseIndexSignatureMember(modifiers, fullStart); } // 'isClassMemberStart' should have hinted not to attempt parsing. From 9ff553e5e8300eb47bdd3024b9873b4a5cde891b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 20:23:35 -0800 Subject: [PATCH 144/178] Simplify parser. --- src/compiler/parser.ts | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 1b35969de81..b50e30de38a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2775,10 +2775,6 @@ module ts { return finishNode(node); } - function isIterationStatementStart(): boolean { - return token === SyntaxKind.WhileKeyword || token === SyntaxKind.DoKeyword || token === SyntaxKind.ForKeyword; - } - function isLabel(): boolean { return isIdentifier() && lookAhead(() => nextToken() === SyntaxKind.ColonToken); } @@ -2787,8 +2783,7 @@ module ts { var node = createNode(SyntaxKind.LabeledStatement); node.label = parseIdentifier(); parseExpected(SyntaxKind.ColonToken); - - node.statement = isLabel() ? parseLabeledStatement() : parseStatement(); + node.statement = parseStatement(); return finishNode(node); } @@ -2869,9 +2864,9 @@ module ts { case SyntaxKind.LetKeyword: case SyntaxKind.ConstKeyword: // const here should always be parsed as const declaration because of check in 'isStatement' - return parseVariableStatement(); + return parseVariableStatement(scanner.getStartPos(), /*modifiers:*/ undefined); case SyntaxKind.FunctionKeyword: - return parseFunctionDeclaration(); + return parseFunctionDeclaration(scanner.getStartPos(), /*modifiers:*/ undefined); case SyntaxKind.SemicolonToken: return parseEmptyStatement(); case SyntaxKind.IfKeyword: @@ -2928,10 +2923,7 @@ module ts { node.flags = flags; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); - - // Issue any initializer-related errors on the equals token node.initializer = parseInitializer(/*inParameter*/ false, noIn); - return finishNode(node); } @@ -2939,11 +2931,9 @@ module ts { return parseDelimitedList(ParsingContext.VariableDeclarations, () => parseVariableDeclaration(flags, noIn)); } - function parseVariableStatement(pos?: number, flags?: NodeFlags): VariableStatement { - var node = createNode(SyntaxKind.VariableStatement, pos); - if (flags) { - node.flags = flags; - } + function parseVariableStatement(fullStart: number, modifiers: ModifiersArray): VariableStatement { + var node = createNode(SyntaxKind.VariableStatement, fullStart); + setModifiers(node, modifiers); if (token === SyntaxKind.LetKeyword) { node.flags |= NodeFlags.Let; @@ -2961,11 +2951,9 @@ module ts { return finishNode(node); } - function parseFunctionDeclaration(pos?: number, flags?: NodeFlags): FunctionLikeDeclaration { - var node = createNode(SyntaxKind.FunctionDeclaration, pos); - if (flags) { - node.flags = flags; - } + function parseFunctionDeclaration(fullStart: number, modifiers: ModifiersArray): FunctionLikeDeclaration { + var node = createNode(SyntaxKind.FunctionDeclaration, fullStart); + setModifiers(node, modifiers); parseExpected(SyntaxKind.FunctionKeyword); node.name = parseIdentifier(); fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); @@ -3305,7 +3293,7 @@ module ts { switch (token) { case SyntaxKind.VarKeyword: case SyntaxKind.LetKeyword: - result = parseVariableStatement(fullStart, flags); + result = parseVariableStatement(fullStart, modifiers); break; case SyntaxKind.ConstKeyword: var isConstEnum = lookAhead(() => nextToken() === SyntaxKind.EnumKeyword); @@ -3313,11 +3301,11 @@ module ts { result = parseAndCheckEnumDeclaration(fullStart, flags | NodeFlags.Const); } else { - result = parseVariableStatement(fullStart, flags); + result = parseVariableStatement(fullStart, modifiers); } break; case SyntaxKind.FunctionKeyword: - result = parseFunctionDeclaration(fullStart, flags); + result = parseFunctionDeclaration(fullStart, modifiers); break; case SyntaxKind.ClassKeyword: result = parseClassDeclaration(fullStart, modifiers); From f61f70abf09850bfe3184ca264a5d6395b91ad88 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 21 Nov 2014 20:36:32 -0800 Subject: [PATCH 145/178] More parser simplification. --- src/compiler/parser.ts | 62 ++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b50e30de38a..19489284edc 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1559,10 +1559,7 @@ module ts { function parseSignatureMember(kind: SyntaxKind, returnToken: SyntaxKind): SignatureDeclaration { var node = createNode(kind); - var sig = parseSignature(kind, returnToken, /* returnTokenRequired */ false); - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; + fillSignature(kind, returnToken, /* returnTokenRequired */ false, node); parseSemicolon(); return finishNode(node); } @@ -1578,24 +1575,29 @@ module ts { } function parsePropertyOrMethod(): Declaration { - var node = createNode(SyntaxKind.Unknown); - node.name = parsePropertyName(); + var fullStart = scanner.getStartPos(); + var name = parsePropertyName(); + var flags = 0; if (parseOptional(SyntaxKind.QuestionToken)) { - node.flags |= NodeFlags.QuestionMark; + flags = NodeFlags.QuestionMark; } + if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { - node.kind = SyntaxKind.Method; - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - (node).typeParameters = sig.typeParameters; - (node).parameters = sig.parameters; - (node).type = sig.type; + var method = createNode(SyntaxKind.Method, fullStart); + method.name = name; + method.flags = flags; + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, method); + parseSemicolon(); + return finishNode(method); } else { - node.kind = SyntaxKind.Property; - (node).type = parseTypeAnnotation(); + var property = createNode(SyntaxKind.Property, fullStart); + property.name = name; + property.flags = flags; + property.type = parseTypeAnnotation(); + parseSemicolon(); + return finishNode(property); } - parseSemicolon(); - return finishNode(node); } function isStartOfTypeMember(): boolean { @@ -1633,14 +1635,21 @@ module ts { function parseTypeLiteral(): TypeLiteralNode { var node = createNode(SyntaxKind.TypeLiteral); + node.members = parseObjectType(); + return finishNode(node); + } + + function parseObjectType(): NodeArray { + var members: NodeArray; if (parseExpected(SyntaxKind.OpenBraceToken)) { - node.members = parseList(ParsingContext.TypeMembers, /*checkForStrictMode*/ false, parseTypeMember); + members = parseList(ParsingContext.TypeMembers, /*checkForStrictMode*/ false, parseTypeMember); parseExpected(SyntaxKind.CloseBraceToken); } else { - node.members = createMissingList(); + members = createMissingList(); } - return finishNode(node); + + return members; } function parseTupleType(): TupleTypeNode { @@ -1658,15 +1667,10 @@ module ts { } function parseFunctionType(typeKind: SyntaxKind): SignatureDeclaration { - var member = createNode(typeKind); - var sig = parseSignature(typeKind === SyntaxKind.FunctionType ? SyntaxKind.CallSignature : SyntaxKind.ConstructSignature, - SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true); - - member.typeParameters = sig.typeParameters; - member.parameters = sig.parameters; - member.type = sig.type; - finishNode(member); - return member; + var node = createNode(typeKind); + fillSignature(typeKind === SyntaxKind.FunctionType ? SyntaxKind.CallSignature : SyntaxKind.ConstructSignature, + SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true, node); + return finishNode(node); } function parseKeywordAndNoDot(): Node { @@ -3141,7 +3145,7 @@ module ts { if (parseOptional(SyntaxKind.ExtendsKeyword)) { node.baseTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } - node.members = parseTypeLiteral().members; + node.members = parseObjectType(); return finishNode(node); } From 932aa9457364d2f63f49b08e235f6ae87b363162 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 22 Nov 2014 12:11:42 -0800 Subject: [PATCH 146/178] More parser consistency. --- src/compiler/parser.ts | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 19489284edc..7389ebd0329 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1319,13 +1319,6 @@ module ts { return result; } - function createNodeArray(node: T): NodeArray { - var result = >[node]; - result.pos = node.pos; - result.end = node.end; - return result; - } - function parseBracketedList(kind: ParsingContext, parseElement: () => T, startToken: SyntaxKind, endToken: SyntaxKind): NodeArray { if (parseExpected(startToken)) { var result = parseDelimitedList(kind, parseElement); @@ -1478,7 +1471,11 @@ module ts { } function parseParameterType(): TypeNode { - return parseOptional(SyntaxKind.ColonToken) ? token === SyntaxKind.StringLiteral ? parseStringLiteral() : parseType() : undefined; + return parseOptional(SyntaxKind.ColonToken) + ? token === SyntaxKind.StringLiteral + ? parseStringLiteral() + : parseType() + : undefined; } function isStartOfParameter(): boolean { @@ -1492,7 +1489,7 @@ module ts { } } - function parseParameter(flags: NodeFlags = 0): ParameterDeclaration { + function parseParameter(): ParameterDeclaration { var node = createNode(SyntaxKind.Parameter); var modifiers = parseModifiers(ModifierContext.Parameters); setModifiers(node, modifiers); @@ -1564,10 +1561,9 @@ module ts { return finishNode(node); } - function parseIndexSignatureMember(modifiers: ModifiersArray, pos?: number): SignatureDeclaration { - var node = createNode(SyntaxKind.IndexSignature, pos); + function parseIndexSignatureMember(fullStart: number, modifiers: ModifiersArray): SignatureDeclaration { + var node = createNode(SyntaxKind.IndexSignature, fullStart); setModifiers(node, modifiers); - node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); node.type = parseTypeAnnotation(); parseSemicolon(); @@ -1618,7 +1614,7 @@ module ts { case SyntaxKind.LessThanToken: return parseSignatureMember(SyntaxKind.CallSignature, SyntaxKind.ColonToken); case SyntaxKind.OpenBracketToken: - return parseIndexSignatureMember(/*modifiers:*/ undefined); + return parseIndexSignatureMember(scanner.getStartPos(), /*modifiers:*/ undefined); case SyntaxKind.NewKeyword: if (lookAhead(() => nextToken() === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken)) { return parseSignatureMember(SyntaxKind.ConstructSignature, SyntaxKind.ColonToken); @@ -3106,7 +3102,7 @@ module ts { return parsePropertyMemberDeclaration(fullStart, modifiers); } if (token === SyntaxKind.OpenBracketToken) { - return parseIndexSignatureMember(modifiers, fullStart); + return parseIndexSignatureMember(fullStart, modifiers); } // 'isClassMemberStart' should have hinted not to attempt parsing. From 5fcbeb59ae300e02a95e7ef52d8db20dda1495f9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 22 Nov 2014 12:49:16 -0800 Subject: [PATCH 147/178] Move parser error to grammar check phase. Conflicts: src/services/syntax/SyntaxGenerator.js.map --- src/services/syntax/SyntaxGenerator.js | 2 +- src/services/syntax/SyntaxGenerator.js.map | 4 +++ src/services/syntax/parser.ts | 26 +++++++++---------- src/services/syntax/syntaxGenerator.ts | 2 +- .../syntax/syntaxNodes.concrete.generated.ts | 2 +- src/services/syntax/syntaxTree.ts | 13 +++++++++- 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/services/syntax/SyntaxGenerator.js b/src/services/syntax/SyntaxGenerator.js index 0937947c80f..61a9360e3df 100644 --- a/src/services/syntax/SyntaxGenerator.js +++ b/src/services/syntax/SyntaxGenerator.js @@ -1558,7 +1558,7 @@ var definitions = [ interfaces: ['IStatementSyntax'], children: [ { name: 'throwKeyword', isToken: true, excludeFromAST: true }, - { name: 'expression', type: 'IExpressionSyntax' }, + { name: 'expression', type: 'IExpressionSyntax', isOptional: true }, { name: 'semicolonToken', isToken: true, isOptional: true, excludeFromAST: true } ] }, diff --git a/src/services/syntax/SyntaxGenerator.js.map b/src/services/syntax/SyntaxGenerator.js.map index bd5d7bd6cb3..94e620bf8b1 100644 --- a/src/services/syntax/SyntaxGenerator.js.map +++ b/src/services/syntax/SyntaxGenerator.js.map @@ -6,6 +6,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< Updated upstream {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} ======= @@ -35,3 +36,6 @@ ======= {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"AA4BA,IAAI,GAAG,GAAW,CAAC;IAEf,SAAS,gBAAgB;QAErBA,IAAIA,GAAGA,GAAGA,IAAIA,aAAaA,CAACA,4BAA4BA,CAACA,CAACA;QAE1DA,IAAIA,UAAUA,GAAGA,IAAIA,aAAaA,CAACA,cAAcA,CAACA,CAACA;QACnDA,UAAUA,CAACA,IAAIA,GAAGA,CAACA,CAAUA;QAE7BA,IAAIA,YAAYA,GAAGA,IAAIA,aAAaA,CAACA,cAAcA,CAACA,CAACA;QACrDA,YAAYA,CAACA,IAAIA,GAAGA,CAACA,CAAYA;QAEjCA,IAAIA,IAAIA,GAAaA,EAAEA,CAACA;QACxBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,OAAOA,CAACA,SAASA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAChDA,IAAIA,CAACA,CAACA,CAACA,GAAGA,OAAOA,CAACA,SAASA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;QACxCA,CAACA;QAEDA,SAASA,QAAQA,CAACA,QAAgBA,EAAEA,QAAiBA;YACjDC,EAAEA,CAACA,CAACA,CAACA,GAAGA,CAACA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;gBAC5BA,MAAMA,CAACA,SAASA,CAACA;YACrBA,CAACA;YACDA,UAAUA,CAACA,IAAIA,EAAEA,CAACA;YAClBA,IAAAA,CAACA;gBACGA,EAAEA,CAACA,CAACA,QAAQA,CAACA,CAACA,CAACA;oBACXA,UAAUA,CAACA,OAAOA,GAAGA,QAAQA,CAACA;oBAC9BA,UAAUA,CAACA,YAAYA,CAACA,QAAQA,CAACA,CAACA;gBACtCA,CAACA;gBACDA,IAAIA,CAACA,CAACA;oBAEFA,UAAUA,CAACA,OAAOA,GAAGA,QAAQA,CAACA;oBAC9BA,UAAUA,CAACA,YAAYA,CAACA,QAAQA,CAACA,CAACA;oBAClCA,IAAIA,GAAGA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,IAAIA,EAAEA,CAACA;oBAEvCA,UAAUA,CAACA,QAAQA,GAAGA,CAACA,CAACA;oBAExBA,UAAUA,CAACA,OAAOA,GAAGA,GAAGA,CAACA,MAAMA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,CAACA,UAAUA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,GAAGA,CAACA,UAAUA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,GAAGA,CAACA,UAAUA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,GAAGA,CAACA,UAAUA,CAACA,CAACA,CAACA,KAAKA,IAAIA,CAACA,GAAGA,SAASA,GAAGA,OAAOA,CAACA;gBACzLA,CAACA;gBAEDA,MAAMA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA;YACjCA,CACAA;YAAAA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAATA,CAACA;gBACGA,MAAMA,CAACA,CAACA;YACZA,CAACA;oBACDA,CAACA;gBACGA,UAAUA,CAACA,KAAKA,EAAEA,CAACA;YACvBA,CAACA;QACLA,CAACA;QAEDD,SAASA,SAASA,CAACA,QAAgBA,EAAEA,IAAYA,EAAEA,kBAA4BA;YAC3EE,UAAUA,CAACA,IAAIA,EAAEA,CAACA;YAClBA,YAAYA,CAACA,IAAIA,EAAEA,CAACA;YACpBA,IAAAA,CAACA;gBAEGA,UAAUA,CAACA,OAAOA,GAAGA,OAAOA,CAACA;gBAC7BA,UAAUA,CAACA,SAASA,CAACA,IAAIA,CAACA,CAACA;gBAG3BA,EAAEA,CAACA,CAACA,kBAAkBA,CAACA,CAACA,CAACA;oBACrBA,UAAUA,CAACA,QAAQA,GAAGA,CAACA,CAACA;gBAC5BA,CAACA;gBACDA,IAAIA,CAACA,CAACA;oBACFA,UAAUA,CAACA,QAAQA,GAAGA,CAACA,CAACA;gBAC5BA,CAACA;gBACDA,UAAUA,CAACA,MAAMA,CAACA,YAAYA,CAACA,CAACA;gBAChCA,YAAYA,CAACA,UAAUA,CAACA,QAAQA,EAAEA,CAACA,CAAeA,CAACA;YACvDA,CAACA;oBACDA,CAACA;gBACGA,YAAYA,CAACA,KAAKA,EAAEA,CAACA;gBACrBA,UAAUA,CAACA,KAAKA,EAAEA,CAACA;YACvBA,CAACA;QACLA,CAACA;QAEDF,MAAMA,CAACA;YACHA,IAAIA,EAAEA,IAAIA;YACVA,OAAOA,EAAEA,MAAMA;YACfA,yBAAyBA,EAAEA,KAAKA;YAChCA,KAAKA,EAALA,UAAMA,CAASA;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACDA,QAAQA,EAAEA,QAAQA;YAClBA,SAASA,EAAEA,SAASA;YACpBA,WAAWA,EAAXA,UAAYA,IAAYA;gBACpB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACDA,UAAUA,EAAVA,UAAWA,IAAYA;gBACnB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACDA,eAAeA,EAAfA,UAAgBA,IAAYA;gBACxB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACDA,eAAeA,EAAfA,UAAgBA,aAAqBA;gBACjC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACvC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBACpC,CAAC;YACL,CAAC;YACDA,oBAAoBA,EAApBA;gBACI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;YAClC,CAAC;YACDA,mBAAmBA,EAAnBA;gBACI,MAAM,CAAC,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC;YAC/D,CAAC;YACDA,IAAIA,EAAJA,UAAKA,QAAiBA;gBAClB,IAAA,CAAC;oBACG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CACA;gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAT,CAAC;gBACD,CAAC;YACL,CAAC;SACJA,CAACA;IACNA,CAACA;IACD,SAAS,aAAa;QAClBG,IAAIA,GAAGA,GAAGA,OAAOA,CAACA,IAAIA,CAACA,CAACA;QACxBA,IAAIA,KAAKA,GAAGA,OAAOA,CAACA,MAAMA,CAACA,CAACA;QAC5BA,IAAIA,GAAGA,GAAGA,OAAOA,CAACA,IAAIA,CAACA,CAACA;QAExBA,IAAIA,QAAQA,GAAWA,GAAGA,CAACA,QAAQA,EAAEA,CAACA;QAEtCA,IAAIA,yBAAyBA,GAAGA,QAAQA,KAAKA,OAAOA,IAAIA,QAAQA,KAAKA,OAAOA,IAAIA,QAAQA,KAAKA,QAAQA,CAACA;QAEtGA,SAASA,QAAQA,CAACA,QAAgBA,EAAEA,QAAiBA;YACjDC,EAAEA,CAACA,CAACA,CAACA,GAAGA,CAACA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;gBAC5BA,MAAMA,CAACA,SAASA,CAACA;YACrBA,CAACA;YACDA,IAAIA,MAAMA,GAAGA,GAAGA,CAACA,YAAYA,CAACA,QAAQA,CAACA,CAACA;YACxCA,IAAIA,GAAGA,GAAGA,MAAMA,CAACA,MAAMA,CAACA;YACxBA,EAAEA,CAACA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,CAACA,CAACA,CAACA;gBAGvDA,GAAGA,IAAIA,CAACA,CAACA,CAACA;gBACVA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,GAAGA,EAAEA,CAACA,IAAIA,CAACA,EAAEA,CAACA;oBAC9BA,IAAIA,IAAIA,GAAGA,MAAMA,CAACA,CAACA,CAACA,CAACA;oBACrBA,MAAMA,CAACA,CAACA,CAACA,GAAGA,MAAMA,CAACA,CAACA,GAAGA,CAACA,CAACA,CAACA;oBAC1BA,MAAMA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA;gBACzBA,CAACA;gBACDA,MAAMA,CAACA,MAAMA,CAACA,QAAQA,CAACA,SAASA,EAAEA,CAACA,CAACA,CAACA;YACzCA,CAACA;YACDA,EAAEA,CAACA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,CAACA,CAACA,CAACA;gBAEvDA,MAAMA,CAACA,MAAMA,CAACA,QAAQA,CAACA,SAASA,EAAEA,CAACA,CAACA,CAACA;YACzCA,CAACA;YACDA,EAAEA,CAACA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,IAAIA,MAAMA,CAACA,CAACA,CAACA,KAAKA,IAAIA,CAACA,CAACA,CAACA;gBAE7EA,MAAMA,CAACA,MAAMA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,CAACA,CAACA;YACtCA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA,QAAQA,CAACA,MAAMA,CAACA,CAACA;QACnCA,CAACA;QAEDD,SAASA,SAASA,CAACA,QAAgBA,EAAEA,IAAYA,EAAEA,kBAA4BA;YAE3EE,EAAEA,CAACA,CAACA,kBAAkBA,CAACA,CAACA,CAACA;gBACrBA,IAAIA,GAAGA,QAAQA,GAAGA,IAAIA,CAACA;YAC3BA,CAACA;YAEDA,GAAGA,CAACA,aAAaA,CAACA,QAAQA,EAAEA,IAAIA,EAAEA,MAAMA,CAACA,CAACA;QAC9CA,CAACA;QAEDF,MAAMA,CAACA;YACHA,IAAIA,EAAEA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;YAC3BA,OAAOA,EAAEA,GAAGA,CAACA,GAAGA;YAChBA,yBAAyBA,EAAEA,yBAAyBA;YACpDA,KAAKA,EAALA,UAAMA,CAASA;gBAEZ,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,CAAC;YACDA,QAAQA,EAAEA,QAAQA;YAClBA,SAASA,EAAEA,SAASA;YACpBA,SAASA,EAAEA,UAACA,QAAQA,EAAEA,QAAQA;gBAE1BA,GAAGA,CAACA,SAASA,CAACA,QAAQA,EAAEA,EAAEA,UAAUA,EAAEA,IAAIA,EAAEA,QAAQA,EAAEA,GAAGA,EAAEA,EAAEA,WAAWA,CAACA,CAACA;gBAE1EA,MAAMA,CAACA;oBACHA,KAAKA,EAALA;wBAAU,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBAAC,CAAC;iBACtDA,CAACA;gBAEFA,SAASA,WAAWA,CAACA,IAASA,EAAEA,IAASA;oBACrCG,EAAEA,CAACA,CAACA,CAACA,IAAIA,CAACA,KAAKA,IAAIA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;wBAC7BA,MAAMA,CAACA;oBACXA,CAACA;oBAEDA,QAAQA,CAACA,QAAQA,CAACA,CAACA;gBACvBA,CAACA;gBAAAH,CAACA;YACNA,CAACA;YACDA,WAAWA,EAAEA,UAAUA,IAAYA;gBAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACDA,UAAUA,EAAVA,UAAWA,IAAYA;gBACnB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACDA,eAAeA,EAAfA,UAAgBA,IAAYA;gBACxB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACpE,CAAC;YACDA,eAAeA,EAAfA,UAAgBA,aAAqBA;gBACjC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACvC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC;YACDA,oBAAoBA,EAApBA;gBACI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YACvC,CAAC;YACDA,mBAAmBA,EAAnBA;gBACI,MAAM,CAAO,OAAQ,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC;YACDA,cAAcA,EAAdA;gBACI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;YAC1C,CAAC;YACDA,IAAIA,EAAJA,UAAKA,QAAiBA;gBAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;SACJA,CAACA;IACNA,CAACA;IACD,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC;QACF,MAAM,CAAC,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC,EAAE,CAAC;ACzPL,IAAO,UAAU,CA0BhB;AA1BD,WAAO,UAAU,EAAC,CAAC;IACfI,IAAaA,MAAMA;QAAnBC,SAAaA,MAAMA;QAwBnBC,CAACA;QAvBiBD,eAAQA,GAAtBA,UAAuBA,QAAgBA,EAAEA,OAAgBA;YACrDE,MAAMA,CAACA,IAAIA,KAAKA,CAACA,oBAAoBA,GAAGA,QAAQA,GAAGA,IAAIA,GAAGA,OAAOA,CAACA,CAACA;QACvEA,CAACA;QAEaF,yBAAkBA,GAAhCA,UAAiCA,QAAgBA;YAC7CG,MAAMA,CAACA,IAAIA,KAAKA,CAACA,yBAAyBA,GAAGA,QAAQA,CAACA,CAACA;QAC3DA,CAACA;QAEaH,mBAAYA,GAA1BA,UAA2BA,QAAgBA;YACvCI,MAAMA,CAACA,IAAIA,KAAKA,CAACA,iBAAiBA,GAAGA,QAAQA,CAACA,CAACA;QACnDA,CAACA;QAEaJ,eAAQA,GAAtBA;YACIK,MAAMA,CAACA,IAAIA,KAAKA,CAACA,iDAAiDA,CAACA,CAACA;QACxEA,CAACA;QAEaL,wBAAiBA,GAA/BA;YACIM,MAAMA,CAACA,IAAIA,KAAKA,CAACA,sBAAsBA,CAACA,CAACA;QAC7CA,CAACA;QAEaN,uBAAgBA,GAA9BA,UAA+BA,OAAgBA;YAC3CO,MAAMA,CAACA,IAAIA,KAAKA,CAACA,qBAAqBA,GAAGA,OAAOA,CAACA,CAACA;QACtDA,CAACA;QACLP,aAACA;IAADA,CAACA,AAxBDD,IAwBCA;IAxBYA,iBAAMA,GAANA,MAwBZA,CAAAA;AACLA,CAACA,EA1BM,UAAU,KAAV,UAAU,QA0BhB;AC1BD,IAAO,UAAU,CA0MhB;AA1MD,WAAO,UAAU,EAAC,CAAC;IACfA,IAAaA,cAAcA;QAA3BS,SAAaA,cAAcA;QAwM3BC,CAACA;QAvMiBD,6BAAcA,GAA5BA,UAAgCA,MAAWA,EAAEA,MAAWA,EAAEA,MAAiCA;YACvFE,EAAEA,CAACA,CAACA,MAAMA,KAAKA,MAAMA,CAACA,CAACA,CAACA;gBACpBA,MAAMA,CAACA,IAAIA,CAACA;YAChBA,CAACA;YAEDA,EAAEA,CAACA,CAACA,CAACA,MAAMA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA;gBACrBA,MAAMA,CAACA,KAAKA,CAACA;YACjBA,CAACA;YAEDA,EAAEA,CAACA,CAACA,MAAMA,CAACA,MAAMA,KAAKA,MAAMA,CAACA,MAAMA,CAACA,CAACA,CAACA;gBAClCA,MAAMA,CAACA,KAAKA,CAACA;YACjBA,CAACA;YAEDA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC5CA,EAAEA,CAACA,CAACA,CAACA,MAAMA,CAACA,MAAMA,CAACA,CAACA,CAACA,EAAEA,MAAMA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAChCA,MAAMA,CAACA,KAAKA,CAACA;gBACjBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;QAEaF,uBAAQA,GAAtBA,UAA0BA,KAAUA,EAAEA,KAAQA;YAC1CG,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBACpCA,EAAEA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA,KAAKA,KAAKA,CAACA,CAACA,CAACA;oBACrBA,MAAMA,CAACA,IAAIA,CAACA;gBAChBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA;QACjBA,CAACA;QAGaH,uBAAQA,GAAtBA,UAA0BA,KAAUA,EAAEA,QAAkCA;YACpEI,IAAIA,MAAMA,GAAQA,EAAEA,CAACA;YAGrBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,IAAIA,OAAOA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;gBACvBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;oBACrCA,EAAEA,CAACA,CAACA,QAAQA,CAACA,MAAMA,CAACA,CAACA,CAACA,EAAEA,OAAOA,CAACA,CAACA,CAACA,CAACA;wBAC/BA,KAAKA,CAACA;oBACVA,CAACA;gBACLA,CAACA;gBAEDA,EAAEA,CAACA,CAACA,CAACA,KAAKA,MAAMA,CAACA,MAAMA,CAACA,CAACA,CAACA;oBACtBA,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA;gBACzBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAEaJ,mBAAIA,GAAlBA,UAAsBA,KAAUA;YAC5BK,EAAEA,CAACA,CAACA,KAAKA,CAACA,MAAMA,KAAKA,CAACA,CAACA,CAACA,CAACA;gBACrBA,MAAMA,iBAAMA,CAACA,kBAAkBA,CAACA,OAAOA,CAACA,CAACA;YAC7CA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA,KAAKA,CAACA,MAAMA,GAAGA,CAACA,CAACA,CAACA;QACnCA,CAACA;QAEaL,4BAAaA,GAA3BA,UAA+BA,KAAUA,EAAEA,SAA2CA;YAClFM,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,GAAGA,CAACA,EAAEA,CAACA,IAAIA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBACzCA,IAAIA,CAACA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;gBACjBA,EAAEA,CAACA,CAACA,SAASA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAClBA,MAAMA,CAACA,CAACA,CAACA;gBACbA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,SAASA,CAACA;QACrBA,CAACA;QAEaN,6BAAcA,GAA5BA,UAAgCA,KAAUA,EAAEA,IAAsCA;YAC9EO,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,IAAIA,KAAKA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;gBACrBA,EAAEA,CAACA,CAACA,IAAIA,CAACA,KAAKA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA;oBACjBA,MAAMA,CAACA,KAAKA,CAACA;gBACjBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,SAASA,CAACA;QACrBA,CAACA;QAEaP,oBAAKA,GAAnBA,UAAuBA,KAAUA,EAAEA,IAAuCA;YACtEQ,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,IAAIA,KAAKA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;gBACrBA,EAAEA,CAACA,CAACA,CAACA,IAAIA,IAAIA,IAAIA,CAACA,KAAKA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAC1BA,MAAMA,CAACA,KAAKA,CAACA;gBACjBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,iBAAMA,CAACA,gBAAgBA,EAAEA,CAACA;QACpCA,CAACA;QAEaR,kBAAGA,GAAjBA,UAAqBA,KAAUA,EAAEA,IAAsBA;YACnDS,IAAIA,MAAMA,GAAGA,CAACA,CAACA;YAEfA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,MAAMA,IAAIA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA;YAC7BA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAEaT,qBAAMA,GAApBA,UAA0BA,MAAWA,EAAEA,IAAiBA;YACpDU,IAAIA,MAAMA,GAAQA,IAAIA,KAAKA,CAAIA,MAAMA,CAACA,MAAMA,CAACA,CAACA;YAE9CA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBACrCA,MAAMA,CAACA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA,CAACA;YAChCA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAEaV,oBAAKA,GAAnBA,UAAuBA,MAAWA,EAAEA,IAAuBA;YACvDW,IAAIA,MAAMA,GAAGA,IAAIA,KAAKA,EAAKA,CAACA;YAE5BA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBACrCA,EAAEA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAClBA,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA,CAACA;gBAC3BA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAEaX,kBAAGA,GAAjBA,UAAqBA,KAAUA,EAAEA,IAAuBA;YACpDY,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,EAAEA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBACjBA,MAAMA,CAACA,IAAIA,CAACA;gBAChBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA;QACjBA,CAACA;QAEaZ,kBAAGA,GAAjBA,UAAqBA,KAAUA,EAAEA,IAAuBA;YACpDa,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,EAAEA,CAACA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAClBA,MAAMA,CAACA,KAAKA,CAACA;gBACjBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;QAEab,2BAAYA,GAA1BA,UAA2BA,KAAeA,EAAEA,KAAaA;YACrDc,IAAIA,GAAGA,GAAGA,CAACA,CAACA;YACZA,IAAIA,IAAIA,GAAGA,KAAKA,CAACA,MAAMA,GAAGA,CAACA,CAACA;YAE5BA,OAAOA,GAAGA,IAAIA,IAAIA,EAAEA,CAACA;gBACjBA,IAAIA,MAAMA,GAAGA,GAAGA,GAAGA,CAACA,CAACA,IAAIA,GAAGA,GAAGA,CAACA,IAAIA,CAACA,CAACA,CAACA;gBACvCA,IAAIA,QAAQA,GAAGA,KAAKA,CAACA,MAAMA,CAACA,CAACA;gBAE7BA,EAAEA,CAACA,CAACA,QAAQA,KAAKA,KAAKA,CAACA,CAACA,CAACA;oBACrBA,MAAMA,CAACA,MAAMA,CAACA;gBAClBA,CAACA;gBACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,QAAQA,GAAGA,KAAKA,CAACA,CAACA,CAACA;oBACxBA,IAAIA,GAAGA,MAAMA,GAAGA,CAACA,CAACA;gBACtBA,CAACA;gBACDA,IAAIA,CAACA,CAACA;oBACFA,GAAGA,GAAGA,MAAMA,GAAGA,CAACA,CAACA;gBACrBA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,CAACA,GAAGA,CAACA;QAChBA,CAACA;QAEad,0BAAWA,GAAzBA,UAA6BA,MAAcA,EAAEA,YAAiBA;YAC1De,IAAIA,MAAMA,GAAGA,IAAIA,KAAKA,CAAIA,MAAMA,CAACA,CAACA;YAClCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC9BA,MAAMA,CAACA,CAACA,CAACA,GAAGA,YAAYA,CAACA;YAC7BA,CAACA;YAEDA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAEaf,mBAAIA,GAAlBA,UAAsBA,KAAUA,EAAEA,MAAcA,EAAEA,YAAeA;YAC7DgB,IAAIA,KAAKA,GAAGA,MAAMA,GAAGA,KAAKA,CAACA,MAAMA,CAACA;YAClCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC7BA,KAAKA,CAACA,IAAIA,CAACA,YAAYA,CAACA,CAACA;YAC7BA,CAACA;QACLA,CAACA;QAEahB,mBAAIA,GAAlBA,UAAsBA,WAAgBA,EAAEA,WAAmBA,EAAEA,gBAAqBA,EAAEA,gBAAwBA,EAAEA,MAAcA;YACxHiB,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC9BA,gBAAgBA,CAACA,gBAAgBA,GAAGA,CAACA,CAACA,GAAGA,WAAWA,CAACA,WAAWA,GAAGA,CAACA,CAACA,CAACA;YAC1EA,CAACA;QACLA,CAACA;QAEajB,sBAAOA,GAArBA,UAAyBA,KAAUA,EAAEA,SAA4BA;YAC7DkB,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;gBAC3CA,EAAEA,CAACA,CAACA,SAASA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBACtBA,MAAMA,CAACA,CAACA,CAACA;gBACbA,CAACA;YACLA,CAACA;YAEDA,MAAMA,CAACA,CAACA,CAACA,CAACA;QACdA,CAACA;QACLlB,qBAACA;IAADA,CAACA,AAxMDT,IAwMCA;IAxMYA,yBAAcA,GAAdA,cAwMZA,CAAAA;AACLA,CAACA,EA1MM,UAAU,KAAV,UAAU,QA0MhB;AC1MD,IAAO,UAAU,CAkBhB;AAlBD,WAAO,UAAU,EAAC,CAAC;IACfA,IAAaA,eAAeA;QAA5B4B,SAAaA,eAAeA;QAgB5BC,CAACA;QAfiBD,wBAAQA,GAAtBA,UAAuBA,KAAUA;YAC7BE,MAAMA,CAACA,MAAMA,CAACA,SAASA,CAACA,QAAQA,CAACA,KAAKA,CAACA,KAAKA,EAAEA,EAAEA,CAACA,KAAKA,iBAAiBA,CAACA;QAC5EA,CAACA;QAEaF,wBAAQA,GAAtBA,UAAuBA,MAAcA,EAAEA,KAAaA;YAChDG,MAAMA,CAACA,MAAMA,CAACA,SAASA,CAACA,MAAMA,CAACA,MAAMA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,MAAMA,CAACA,KAAKA,KAAKA,CAACA;QACnFA,CAACA;QAEaH,0BAAUA,GAAxBA,UAAyBA,MAAcA,EAAEA,KAAaA;YAClDI,MAAMA,CAACA,MAAMA,CAACA,MAAMA,CAACA,CAACA,EAAEA,KAAKA,CAACA,MAAMA,CAACA,KAAKA,KAAKA,CAACA;QACpDA,CAACA;QAEaJ,sBAAMA,GAApBA,UAAqBA,KAAaA,EAAEA,KAAaA;YAC7CK,MAAMA,CAACA,KAAKA,CAACA,KAAKA,GAAGA,CAACA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QACxCA,CAACA;QACLL,sBAACA;IAADA,CAACA,AAhBD5B,IAgBCA;IAhBYA,0BAAeA,GAAfA,eAgBZA,CAAAA;AACLA,CAACA,EAlBM,UAAU,KAAV,UAAU,QAkBhB;AClBD,IAAO,UAAU,CA8ShB;AA9SD,WAAO,UAAU,EAAC,CAAC;IACfA,WAAYA,UAAUA;QAElBkC,2CAAIA;QACJA,2CAAIA;QAGJA,mEAAgBA;QAChBA,6DAAaA;QACbA,+EAAsBA;QACtBA,iFAAuBA;QACvBA,uEAAkBA;QAIlBA,uDAAUA;QACVA,+DAAcA;QAGdA,+DAAcA;QAGdA,oFAAwBA;QACxBA,gEAAcA;QACdA,8DAAaA;QAGbA,0FAA2BA;QAC3BA,wEAAkBA;QAClBA,0EAAmBA;QACnBA,oEAAgBA;QAKhBA,4DAAYA;QACZA,0DAAWA;QACXA,4DAAYA;QACZA,kEAAeA;QACfA,kEAAeA;QACfA,gEAAcA;QACdA,8DAAaA;QACbA,sDAASA;QACTA,0DAAWA;QACXA,4DAAYA;QACZA,gEAAcA;QACdA,wDAAUA;QACVA,kEAAeA;QACfA,sDAASA;QACTA,sDAASA;QACTA,sEAAiBA;QACjBA,wDAAUA;QACVA,0DAAWA;QACXA,8DAAaA;QACbA,8DAAaA;QACbA,0DAAWA;QACXA,4DAAYA;QACZA,0DAAWA;QACXA,wDAAUA;QACVA,8DAAaA;QACbA,wDAAUA;QACVA,0DAAWA;QACXA,4DAAYA;QACZA,0DAAWA;QAGXA,4DAAYA;QACZA,4DAAYA;QACZA,0DAAWA;QACXA,8DAAaA;QACbA,gEAAcA;QACdA,8DAAaA;QACbA,4DAAYA;QAGZA,sEAAiBA;QACjBA,oEAAgBA;QAChBA,wDAAUA;QACVA,gEAAcA;QACdA,gEAAcA;QACdA,oEAAgBA;QAChBA,8DAAaA;QACbA,8DAAaA;QACbA,4DAAYA;QAGZA,wDAAUA;QACVA,gEAAcA;QACdA,wEAAkBA;QAClBA,gEAAcA;QACdA,wDAAUA;QACVA,8DAAaA;QACbA,gEAAcA;QACdA,8DAAaA;QACbA,wDAAUA;QACVA,8DAAaA;QAGbA,gEAAcA;QACdA,kEAAeA;QACfA,gEAAcA;QACdA,kEAAeA;QACfA,oEAAgBA;QAChBA,sEAAiBA;QACjBA,oDAAQA;QACRA,gEAAcA;QACdA,gEAAcA;QACdA,wDAAUA;QACVA,8DAAaA;QACbA,oEAAgBA;QAChBA,0EAAmBA;QACnBA,gFAAsBA;QACtBA,sEAAiBA;QACjBA,gFAAsBA;QACtBA,gFAAsBA;QACtBA,kFAAuBA;QACvBA,4FAA4BA;QAC5BA,sDAASA;QACTA,wDAAUA;QACVA,8DAAaA;QACbA,4DAAYA;QACZA,8DAAaA;QACbA,kEAAeA;QACfA,8EAAqBA;QACrBA,0FAA2BA;QAC3BA,gHAAsCA;QACtCA,iEAAcA;QACdA,qDAAQA;QACRA,yDAAUA;QACVA,qEAAgBA;QAChBA,yDAAUA;QACVA,mFAAuBA;QACvBA,2DAAWA;QACXA,+DAAaA;QACbA,yDAAUA;QACVA,2DAAWA;QACXA,mEAAeA;QACfA,qEAAgBA;QAChBA,2EAAmBA;QACnBA,yEAAkBA;QAClBA,2FAA2BA;QAC3BA,uGAAiCA;QACjCA,6HAA4CA;QAC5CA,6EAAoBA;QACpBA,iEAAcA;QACdA,qEAAgBA;QAChBA,yDAAUA;QACVA,qEAAgBA;QAGhBA,yDAAUA;QAGVA,+DAAaA;QAGbA,yDAAUA;QACVA,6DAAYA;QACZA,uDAASA;QACTA,mEAAeA;QACfA,2DAAWA;QACXA,uDAASA;QACTA,uDAASA;QACTA,uDAASA;QACTA,uEAAiBA;QAGjBA,6EAAoBA;QACpBA,2EAAmBA;QACnBA,uEAAiBA;QACjBA,qEAAgBA;QAChBA,mEAAeA;QACfA,uEAAiBA;QACjBA,qEAAgBA;QAGhBA,uFAAyBA;QACzBA,uFAAyBA;QACzBA,iFAAsBA;QACtBA,iFAAsBA;QAGtBA,2DAAWA;QACXA,2DAAWA;QAGXA,uEAAiBA;QACjBA,+DAAaA;QACbA,yEAAkBA;QAClBA,iEAAcA;QACdA,mEAAeA;QAGfA,+CAAKA;QACLA,2DAAWA;QACXA,uEAAiBA;QACjBA,2EAAmBA;QACnBA,mEAAeA;QACfA,mEAAeA;QACfA,iEAAcA;QACdA,uEAAiBA;QACjBA,6DAAYA;QACZA,iEAAcA;QACdA,iEAAcA;QACdA,iEAAcA;QACdA,iEAAcA;QACdA,6DAAYA;QACZA,qEAAgBA;QAChBA,2DAAWA;QACXA,uEAAiBA;QACjBA,+DAAaA;QAGbA,+EAAqBA;QACrBA,qEAAgBA;QAChBA,qEAAgBA;QAChBA,iEAAcA;QACdA,+EAAqBA;QACrBA,qEAAgBA;QAChBA,iFAAsBA;QACtBA,iFAAsBA;QACtBA,6EAAoBA;QACpBA,iFAAsBA;QACtBA,mFAAuBA;QACvBA,qFAAwBA;QACxBA,mFAAuBA;QACvBA,6GAAoCA;QACpCA,+FAA6BA;QAC7BA,iEAAcA;QACdA,mFAAuBA;QACvBA,yEAAkBA;QAClBA,uEAAiBA;QACjBA,yEAAkBA;QAClBA,qFAAwBA;QACxBA,mEAAeA;QAGfA,2EAAmBA;QACnBA,yEAAkBA;QAGlBA,6DAAYA;QACZA,+DAAaA;QACbA,qEAAgBA;QAChBA,uEAAiBA;QAGjBA,iEAAcA;QACdA,uEAAiBA;QACjBA,qEAAgBA;QAChBA,2EAAmBA;QACnBA,yDAAUA;QACVA,2DAAWA;QACXA,+DAAaA;QACbA,iEAAcA;QAGdA,+DAAaA;QACbA,yDAAUA;QAGVA,qFAAwBA;QACxBA,yFAA0BA;QAG1BA,uDAASA;QACTA,2DAAWA;QACXA,iEAAcA;QACdA,6EAAoBA;QACpBA,mFAAuBA;QACvBA,uFAAyBA;QAEzBA,gDAAuBA,uBAAYA,0BAAAA;QACnCA,+CAAsBA,sBAAWA,yBAAAA;QAEjCA,sDAA6BA,uBAAYA,gCAAAA;QACzCA,qDAA4BA,uBAAYA,+BAAAA;QAExCA,4DAAmCA,4BAAiBA,sCAAAA;QACpDA,2DAAkCA,uBAAYA,qCAAAA;QAE9CA,kDAAyBA,qBAAUA,4BAAAA;QACnCA,iDAAwBA,wBAAaA,2BAAAA;QAErCA,wCAAeA,+BAAoBA,kBAAAA;QACnCA,uCAAcA,gCAAqBA,iBAAAA;QAEnCA,sCAAaA,qBAAUA,gBAAAA;QACvBA,qCAAYA,2BAAgBA,eAAAA;QAE5BA,4CAAmBA,yBAAcA,sBAAAA;QACjCA,2CAAkBA,2BAAgBA,qBAAAA;QAElCA,2CAAkBA,uBAAYA,qBAAAA;QAC9BA,0CAAiBA,0BAAeA,oBAAAA;QAEhCA,uCAAcA,2BAAgBA,iBAAAA;QAC9BA,sCAAaA,6BAAkBA,gBAAAA;QAE/BA,qCAAYA,qBAAUA,eAAAA;QACtBA,oCAAWA,oCAAyBA,cAAAA;IACxCA,CAACA,EA5SWlC,qBAAUA,KAAVA,qBAAUA,QA4SrBA;IA5SDA,IAAYA,UAAUA,GAAVA,qBA4SXA,CAAAA;AACLA,CAACA,EA9SM,UAAU,KAAV,UAAU,QA8ShB;AC9SD,IAAO,UAAU,CAoPhB;AApPD,WAAO,UAAU;IAACA,IAAAA,WAAWA,CAoP5BA;IApPiBA,WAAAA,WAAWA,EAACA,CAACA;QAC3BmC,IAAIA,iBAAiBA,GAAQA;YACzBA,KAAKA,EAAEA,mBAAqBA;YAC5BA,SAASA,EAAEA,uBAAyBA;YACpCA,OAAOA,EAAEA,qBAAuBA;YAChCA,MAAMA,EAAEA,oBAAsBA;YAC9BA,OAAOA,EAAEA,qBAAuBA;YAChCA,OAAOA,EAAEA,qBAAuBA;YAChCA,UAAUA,EAAEA,wBAA0BA;YACtCA,OAAOA,EAAEA,qBAAuBA;YAChCA,aAAaA,EAAEA,2BAA6BA;YAC5CA,UAAUA,EAAEA,wBAA0BA;YACtCA,SAASA,EAAEA,uBAAyBA;YACpCA,SAASA,EAAEA,uBAAyBA;YACpCA,QAAQA,EAAEA,sBAAwBA;YAClCA,IAAIA,EAAEA,kBAAoBA;YAC1BA,MAAMA,EAAEA,oBAAsBA;YAC9BA,MAAMA,EAAEA,oBAAsBA;YAC9BA,QAAQA,EAAEA,sBAAwBA;YAClCA,SAASA,EAAEA,uBAAyBA;YACpCA,OAAOA,EAAEA,qBAAuBA;YAChCA,SAASA,EAAEA,uBAAyBA;YACpCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,UAAUA,EAAEA,wBAA0BA;YACtCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,IAAIA,EAAEA,kBAAoBA;YAC1BA,YAAYA,EAAEA,0BAA4BA;YAC1CA,QAAQA,EAAEA,sBAAwBA;YAClCA,IAAIA,EAAEA,kBAAoBA;YAC1BA,YAAYA,EAAEA,0BAA4BA;YAC1CA,WAAWA,EAAEA,yBAA2BA;YACxCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,QAAQA,EAAEA,sBAAwBA;YAClCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,MAAMA,EAAEA,oBAAsBA;YAC9BA,QAAQA,EAACA,sBAAwBA;YACjCA,SAASA,EAAEA,uBAAyBA;YACpCA,SAASA,EAAEA,uBAAyBA;YACpCA,WAAWA,EAAEA,yBAA2BA;YACxCA,QAAQA,EAAEA,sBAAwBA;YAClCA,SAASA,EAAEA,uBAAyBA;YACpCA,QAAQA,EAAEA,sBAAwBA;YAClCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,QAAQA,EAAEA,sBAAwBA;YAClCA,QAAQA,EAAEA,sBAAwBA;YAClCA,OAAOA,EAAEA,qBAAuBA;YAChCA,QAAQA,EAAEA,sBAAwBA;YAClCA,MAAMA,EAAEA,oBAAsBA;YAC9BA,OAAOA,EAAEA,qBAAuBA;YAChCA,MAAMA,EAAEA,oBAAsBA;YAC9BA,KAAKA,EAAEA,mBAAqBA;YAC5BA,QAAQA,EAAEA,sBAAwBA;YAClCA,KAAKA,EAAEA,mBAAqBA;YAC5BA,MAAMA,EAAEA,oBAAsBA;YAC9BA,OAAOA,EAAEA,qBAAuBA;YAChCA,MAAMA,EAAEA,oBAAsBA;YAC9BA,OAAOA,EAAEA,qBAAuBA;YAEhCA,GAAGA,EAAEA,uBAAyBA;YAC9BA,GAAGA,EAAEA,wBAA0BA;YAC/BA,GAAGA,EAAEA,uBAAyBA;YAC9BA,GAAGA,EAAEA,wBAA0BA;YAC/BA,GAAGA,EAAEA,yBAA2BA;YAChCA,GAAGA,EAAEA,0BAA4BA;YACjCA,GAAGA,EAAEA,iBAAmBA;YACxBA,KAAKA,EAAEA,uBAAyBA;YAChCA,GAAGA,EAAEA,uBAAyBA;YAC9BA,GAAGA,EAAEA,mBAAqBA;YAC1BA,GAAGA,EAAEA,sBAAwBA;YAC7BA,GAAGA,EAAEA,yBAA2BA;YAChCA,IAAIA,EAAEA,4BAA8BA;YACpCA,IAAIA,EAAEA,+BAAiCA;YACvCA,IAAIA,EAAEA,0BAA4BA;YAClCA,IAAIA,EAAEA,+BAAiCA;YACvCA,IAAIA,EAAEA,+BAAiCA;YACvCA,KAAKA,EAAEA,gCAAkCA;YACzCA,KAAKA,EAAEA,qCAAuCA;YAC9CA,GAAGA,EAAEA,kBAAoBA;YACzBA,GAAGA,EAAEA,mBAAqBA;YAC1BA,GAAGA,EAAEA,sBAAwBA;YAC7BA,GAAGA,EAAEA,qBAAuBA;YAC5BA,IAAIA,EAAEA,sBAAwBA;YAC9BA,IAAIA,EAAEA,wBAA0BA;YAChCA,IAAIA,EAAEA,8BAAgCA;YACtCA,IAAIA,EAAEA,oCAAsCA;YAC5CA,KAAKA,EAAEA,+CAAiDA;YACxDA,GAAGA,EAAEA,wBAAyBA;YAC9BA,GAAGA,EAAEA,kBAAmBA;YACxBA,GAAGA,EAAEA,oBAAqBA;YAC1BA,GAAGA,EAAEA,0BAA2BA;YAChCA,GAAGA,EAAEA,oBAAqBA;YAC1BA,IAAIA,EAAEA,iCAAkCA;YACxCA,IAAIA,EAAEA,qBAAsBA;YAC5BA,GAAGA,EAAEA,uBAAwBA;YAC7BA,GAAGA,EAAEA,oBAAqBA;YAC1BA,GAAGA,EAAEA,qBAAsBA;YAC3BA,IAAIA,EAAEA,yBAA0BA;YAChCA,IAAIA,EAAEA,0BAA2BA;YACjCA,IAAIA,EAAEA,6BAA8BA;YACpCA,IAAIA,EAAEA,4BAA6BA;YACnCA,KAAKA,EAAEA,qCAAsCA;YAC7CA,KAAKA,EAAEA,2CAA4CA;YACnDA,MAAMA,EAAEA,sDAAuDA;YAC/DA,IAAIA,EAAEA,8BAA+BA;YACrCA,IAAIA,EAAEA,wBAAyBA;YAC/BA,IAAIA,EAAEA,0BAA2BA;YACjCA,GAAGA,EAAEA,oBAAqBA;YAC1BA,IAAIA,EAAEA,0BAA2BA;SACpCA,CAACA;QAEFA,IAAIA,UAAUA,GAAGA,IAAIA,KAAKA,EAAUA,CAACA;QAErCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,IAAIA,IAAIA,iBAAiBA,CAACA,CAACA,CAACA;YACjCA,EAAEA,CAACA,CAACA,iBAAiBA,CAACA,cAAcA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;gBAEzCA,UAAUA,CAACA,iBAAiBA,CAACA,IAAIA,CAACA,CAACA,GAAGA,IAAIA,CAACA;YAC/CA,CAACA;QACLA,CAACA;QAKDA,UAAUA,CAACA,2BAA6BA,CAACA,GAAGA,aAAaA,CAACA;QAE1DA,SAAgBA,YAAYA,CAACA,IAAYA;YACrCC,EAAEA,CAACA,CAACA,iBAAiBA,CAACA,cAAcA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;gBACzCA,MAAMA,CAACA,iBAAiBA,CAACA,IAAIA,CAACA,CAACA;YACnCA,CAACA;YAEDA,MAAMA,CAACA,YAAeA,CAACA;QAC3BA,CAACA;QANeD,wBAAYA,GAAZA,YAMfA,CAAAA;QAEDA,SAAgBA,OAAOA,CAACA,IAAgBA;YACpCE,IAAIA,MAAMA,GAAGA,UAAUA,CAACA,IAAIA,CAACA,CAACA;YAC9BA,MAAMA,CAACA,MAAMA,CAACA;QAClBA,CAACA;QAHeF,mBAAOA,GAAPA,OAGfA,CAAAA;QAEDA,SAAgBA,YAAYA,CAACA,IAAgBA;YACzCG,MAAMA,CAACA,IAAIA,IAAIA,qBAAUA,CAACA,YAAYA,IAAIA,IAAIA,IAAIA,qBAAUA,CAACA,WAAWA,CAACA;QAC7EA,CAACA;QAFeH,wBAAYA,GAAZA,YAEfA,CAAAA;QAEDA,SAAgBA,gBAAgBA,CAACA,IAAgBA;YAC7CI,MAAMA,CAACA,IAAIA,IAAIA,qBAAUA,CAACA,gBAAgBA,IAAIA,IAAIA,IAAIA,qBAAUA,CAACA,eAAeA,CAACA;QACrFA,CAACA;QAFeJ,4BAAgBA,GAAhBA,gBAEfA,CAAAA;QAEDA,SAAgBA,oCAAoCA,CAACA,SAAqBA;YACtEK,MAAMA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA;gBAChBA,KAAKA,kBAAoBA,CAACA;gBAC1BA,KAAKA,mBAAqBA,CAACA;gBAC3BA,KAAKA,oBAAqBA,CAACA;gBAC3BA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,sBAAwBA,CAACA;gBAC9BA,KAAKA,wBAA0BA;oBAC3BA,MAAMA,CAACA,IAAIA,CAACA;gBAChBA;oBACIA,MAAMA,CAACA,KAAKA,CAACA;YACrBA,CAACA;QACLA,CAACA;QAZeL,gDAAoCA,GAApCA,oCAYfA,CAAAA;QAEDA,SAAgBA,+BAA+BA,CAACA,SAAqBA;YACjEM,MAAMA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA;gBAChBA,KAAKA,sBAAwBA,CAACA;gBAC9BA,KAAKA,oBAAqBA,CAACA;gBAC3BA,KAAKA,qBAAuBA,CAACA;gBAC7BA,KAAKA,kBAAoBA,CAACA;gBAC1BA,KAAKA,mBAAqBA,CAACA;gBAC3BA,KAAKA,8BAAgCA,CAACA;gBACtCA,KAAKA,oCAAsCA,CAACA;gBAC5CA,KAAKA,+CAAiDA,CAACA;gBACvDA,KAAKA,sBAAwBA,CAACA;gBAC9BA,KAAKA,yBAA2BA,CAACA;gBACjCA,KAAKA,4BAA8BA,CAACA;gBACpCA,KAAKA,+BAAiCA,CAACA;gBACvCA,KAAKA,0BAA4BA,CAACA;gBAClCA,KAAKA,kBAAoBA,CAACA;gBAC1BA,KAAKA,0BAA4BA,CAACA;gBAClCA,KAAKA,+BAAiCA,CAACA;gBACvCA,KAAKA,gCAAkCA,CAACA;gBACxCA,KAAKA,qCAAuCA,CAACA;gBAC7CA,KAAKA,wBAAyBA,CAACA;gBAC/BA,KAAKA,oBAAqBA,CAACA;gBAC3BA,KAAKA,kBAAmBA,CAACA;gBACzBA,KAAKA,iCAAkCA,CAACA;gBACxCA,KAAKA,qBAAsBA,CAACA;gBAC5BA,KAAKA,wBAAyBA,CAACA;gBAC/BA,KAAKA,8BAA+BA,CAACA;gBACrCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,qCAAsCA,CAACA;gBAC5CA,KAAKA,2CAA4CA,CAACA;gBAClDA,KAAKA,sDAAuDA,CAACA;gBAC7DA,KAAKA,yBAA0BA,CAACA;gBAChCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,6BAA8BA,CAACA;gBACpCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,4BAA6BA,CAACA;gBACnCA,KAAKA,qBAAsBA,CAACA;gBAC5BA,KAAKA,mBAAqBA;oBACtBA,MAAMA,CAACA,IAAIA,CAACA;gBAChBA;oBACIA,MAAMA,CAACA,KAAKA,CAACA;YACrBA,CAACA;QACLA,CAACA;QA1CeN,2CAA+BA,GAA/BA,+BA0CfA,CAAAA;QAEDA,SAAgBA,yBAAyBA,CAACA,SAAqBA;YAC3DO,MAAMA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA;gBAChBA,KAAKA,wBAAyBA,CAACA;gBAC/BA,KAAKA,8BAA+BA,CAACA;gBACrCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,qCAAsCA,CAACA;gBAC5CA,KAAKA,2CAA4CA,CAACA;gBAClDA,KAAKA,sDAAuDA,CAACA;gBAC7DA,KAAKA,yBAA0BA,CAACA;gBAChCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,6BAA8BA,CAACA;gBACpCA,KAAKA,0BAA2BA,CAACA;gBACjCA,KAAKA,4BAA6BA,CAACA;gBACnCA,KAAKA,qBAAsBA;oBACvBA,MAAMA,CAACA,IAAIA,CAACA;gBAEhBA;oBACIA,MAAMA,CAACA,KAAKA,CAACA;YACrBA,CAACA;QACLA,CAACA;QAnBeP,qCAAyBA,GAAzBA,yBAmBfA,CAAAA;QAEDA,SAAgBA,MAAMA,CAACA,IAAgBA;YACnCQ,MAAMA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;gBACXA,KAAKA,mBAAoBA,CAACA;gBAC1BA,KAAKA,mBAAqBA,CAACA;gBAC3BA,KAAKA,sBAAwBA,CAACA;gBAC9BA,KAAKA,uBAAyBA,CAACA;gBAC/BA,KAAKA,sBAAwBA,CAACA;gBAC9BA,KAAKA,oBAAsBA,CAACA;gBAC5BA,KAAKA,sBAAuBA,CAACA;gBAC7BA,KAAKA,oBAAqBA,CAACA;gBAC3BA,KAAKA,yBAA0BA,CAACA;gBAChCA,KAAKA,mBAAoBA,CAACA;gBAC1BA,KAAKA,qBAAsBA,CAACA;gBAC5BA,KAAKA,uBAAwBA,CAACA;gBAC9BA,KAAKA,sBAAyBA;oBAC1BA,MAAMA,CAACA,IAAIA,CAACA;YACpBA,CAACA;YAEDA,MAAMA,CAACA,KAAKA,CAACA;QACjBA,CAACA;QAnBeR,kBAAMA,GAANA,MAmBfA,CAAAA;IACLA,CAACA,EApPiBnC,WAAWA,GAAXA,sBAAWA,KAAXA,sBAAWA,QAoP5BA;AAADA,CAACA,EApPM,UAAU,KAAV,UAAU,QAoPhB;AC/OD,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAsB7B,IAAI,UAAU,GAAQ;IAClB,wBAAwB,EAAE,qBAAqB;IAC/C,gBAAgB,EAAE,sBAAsB;IACxC,WAAW,EAAE,aAAa;IAC1B,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,wBAAwB;IAClD,6BAA6B,EAAE,0BAA0B;IAGzD,uBAAuB,EAAE,+BAA+B;IACxD,qBAAqB,EAAE,+BAA+B;IACtD,wBAAwB,EAAE,yBAAyB;CACtD,CAAC;AAEF,IAAI,WAAW,GAAqB;IAC3B;QACD,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC7E,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;SACjD;KACJ;IACI;QACD,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,iCAAiC;QACvC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;SACnD;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAC3D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC7D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC9E,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAC3E,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC9E,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;SAClD;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACK;QACF,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;YACrD,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE;SAC9G;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC7E,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,IAAI,EAAE;YAC5F,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,IAAI,EAAE;SAC9E;KACJ;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,IAAI,EAAE;YAC5F,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAClE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,0BAA0B,EAAE;SACrI;KACJ;IACI;QACD,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACtG,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF;KACJ;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACpD;KACJ;IACI;QACD,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAwB,EAAE;SAC3D;KACJ;IACI;QACD,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;YAChF,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAC1E;KACJ;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAO,EAAE;KACpB;IACI;QACD,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,qCAAqC;QAC3C,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;YAC9C,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACvE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE;SACjE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,4CAA4C;QAClD,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACvE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE;SACjE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;SACxC;QAGD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE;YAC5E,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACvE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;SAC7C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACvE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;SAC7C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;YAChF,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAC1E;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,wBAAwB,EAAE;SACpE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACK;QACF,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;SAC7C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACK;QACF,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE;YACpE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAC1E;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACK;QACF,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACK;QACF,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;SAC7C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;YACzC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACrE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACvF,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACtF,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACtG,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;SACpH;KACJ;IACI;QACD,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;QAChE,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;SACvC;KACJ;IACI;QACD,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAC1D,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;SAChD;KACJ;IACI;QACD,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;QAChE,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAC7D,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACzD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAC1E;KACJ;IACI;QACD,IAAI,EAAE,gCAAgC;QACtC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;QAChE,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAC7D,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,0BAA0B,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACnE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;SACtF;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE;SAC9F;KACJ;IACI;QACD,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,uBAAuB,CAAC;QACrC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAC7D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE;SAC5D;KACJ;IACI;QACD,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;YAC9E,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAC3C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACpD;KACJ;IACI;QACD,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAC/C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACxD;KACJ;IACI;QACD,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;SAC9D;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACtF,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;SAC9D;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC7E,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC5C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;SAClF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;SAClF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;YAC5G,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;SAC9G;KACJ;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC7E,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;YACrF,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE;SAC1E;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAE/D,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,oBAAoB,EAAE;SAChE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvD;KACJ;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC1D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC/C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAE;SAC1E;KACJ;IACI;QACD,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;QACnC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC7C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,IAAI,EAAG;SAC/E;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,iCAAiC;QACvC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,IAAI,EAAG;SAC/E;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,iBAAiB,CAAE;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,IAAI,EAAE;YAC5F,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9C;KACJ;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,iBAAiB,CAAC;QAC/B,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,IAAI,EAAE;YAC5F,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9C;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,iCAAiC;QACvC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,0BAA0B,EAAE;YAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;QACnC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YACxD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC7D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE;YACxC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE;YACnE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,gCAAgC;QACtC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,yBAAyB,EAAE;YACvD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE;SAC9E;KACJ;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,qBAAqB,EAAE;YAC3E,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;QACnC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAC;YAC1D,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;SAC7E;KACJ;IACI;QACD,IAAI,EAAE,2BAA2B;QACjC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;QACnC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE;SAC7E;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE;YACvC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACvD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACvD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACzF;KACJ;IACI;QACD,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,+CAA+C,EAAE,UAAU,EAAE,IAAI,EAAE;YAChG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACpE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE;YAClE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACrE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE;YACpE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvD;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+CAA+C,EAAE;YACvE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC1D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAC5C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvD;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC7D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvD;KACJ;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvD;KACJ;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;YAChE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE;YACjF,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,IAAI,EAAE;SACxF;KACJ;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YACjE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;SAC9D;QACD,oBAAoB,EAAE,IAAI;KAC7B;IACI;QACD,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAChG,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SACxE;KACJ;IACI;QACD,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,qBAAqB,CAAC;QACnC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE;SACpD;KACJ;IACI;QACD,IAAI,EAAE,gCAAgC;QACtC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,2BAA2B,CAAC;QACzC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACzD;KACJ;IACK;QACF,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,2BAA2B,CAAC;QACzC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACrD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9C;KACJ;IACI;QACD,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,0BAA0B,CAAC;QACxC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACvD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAAC;KACnD;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;SAAC;KACtD;IACI;QACD,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;YACtC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE;YACpE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE;SAAC;KACrF;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC7D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE;YACvG,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAAC;KACnD;IACI;QACD,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SAAC;KACnD;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;SAAC;KAC5D;IACI;QACD,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC1D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC/C,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC7D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAChE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAAC;KAC9F;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;SAAC;KACnE;IACI;QACD,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;SAAC;KACnE;IACI;QACD,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,wBAAwB,CAAC;QACtC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;YAC5D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;SAAC;KACnE;IACI;QACD,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE;YACvC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE;SAAC;KAChF;IACI;QACD,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,aAAa;QACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,QAAQ,EAAE;YACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1C,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;SAAC;KAC9F;CAAC,CAAC;AAEP,SAAS,SAAS,CAAC,UAA2B;IAC1C4C,IAAIA,QAAQA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,CAACA;IAChDA,MAAMA,CAAOA,UAAUA,CAACA,UAAWA,CAACA,QAAQA,CAACA,CAACA;AAClDA,CAACA;AAED,WAAW,CAAC,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,EAA7B,CAA6B,CAAC,CAAC;AAE5D,SAAS,sBAAsB,CAAC,UAAkB;IAC9CC,EAAEA,CAACA,CAACA,UAAUA,CAACA,eAAeA,CAACA,QAAQA,CAACA,UAAUA,EAAEA,QAAQA,CAACA,CAACA,CAACA,CAACA;QAC5DA,MAAMA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,EAAEA,UAAUA,CAACA,MAAMA,GAAGA,QAAQA,CAACA,MAAMA,CAACA,CAACA;IACxEA,CAACA;IAEDA,MAAMA,CAACA,UAAUA,CAACA;AACtBA,CAACA;AAED,SAAS,oBAAoB,CAAC,UAA2B;IACrDC,MAAMA,CAACA,sBAAsBA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;AACnDA,CAACA;AAED,SAAS,OAAO,CAAC,KAAwB;IACrCC,EAAEA,CAACA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA,CAACA;QAChBA,MAAMA,CAACA,cAAcA,CAACA;IAC1BA,CAACA;IACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,eAAeA,CAACA,CAACA,CAACA;QAC7BA,MAAMA,CAACA,uBAAuBA,GAAGA,KAAKA,CAACA,WAAWA,GAAGA,GAAGA,CAACA;IAC7DA,CAACA;IACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,CAACA;QACpBA,MAAMA,CAACA,KAAKA,CAACA,WAAWA,GAAGA,IAAIA,CAACA;IACpCA,CAACA;IACDA,IAAIA,CAACA,CAACA;QACFA,MAAMA,CAACA,KAAKA,CAACA,IAAIA,CAACA;IACtBA,CAACA;AACLA,CAACA;AAED,SAAS,SAAS,CAAC,KAAa;IAC5BC,MAAMA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA,WAAWA,EAAEA,GAAGA,KAAKA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA;AAC9DA,CAACA;AAED,SAAS,WAAW,CAAC,KAAwB;IACzCC,EAAEA,CAACA,CAACA,KAAKA,CAACA,IAAIA,KAAKA,WAAWA,CAACA,CAACA,CAACA;QAC7BA,MAAMA,CAACA,GAAGA,GAAGA,KAAKA,CAACA,IAAIA,CAACA;IAC5BA,CAACA;IAEDA,MAAMA,CAACA,KAAKA,CAACA,IAAIA,CAACA;AACtBA,CAACA;AAED,SAAS,2BAA2B,CAAC,UAA2B;IAC5DC,IAAIA,MAAMA,GAAGA,iBAAiBA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,IAAIA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,0CAA0CA,CAACA;IAExIA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAClDA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;QACnCA,MAAMA,IAAIA,IAAIA,CAACA;QACfA,MAAMA,IAAIA,WAAWA,CAACA,KAAKA,CAACA,CAACA;QAC7BA,MAAMA,IAAIA,IAAIA,GAAGA,OAAOA,CAACA,KAAKA,CAACA,CAACA;IACpCA,CAACA;IAEDA,MAAMA,IAAIA,SAASA,CAACA;IAEpBA,MAAMA,IAAIA,+CAA+CA,CAACA;IAE1DA,EAAEA,CAACA,CAACA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,CAACA,CAACA,CAACA;QAC7BA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAClDA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;gBACJA,MAAMA,IAAIA,OAAOA,CAACA;YACtBA,CAACA;YAEDA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;YACnCA,MAAMA,IAAIA,eAAeA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,KAAKA,GAAGA,WAAWA,CAACA,KAAKA,CAACA,CAACA;QACxEA,CAACA;IACLA,CAACA;IAEDA,EAAEA,CAACA,CAACA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,GAAGA,CAACA,CAACA,CAACA,CAACA;QACjCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAClDA,MAAMA,IAAIA,eAAeA,CAACA;YAE1BA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;YAEnCA,EAAEA,CAACA,CAACA,KAAKA,CAACA,UAAUA,CAACA,CAACA,CAACA;gBACnBA,MAAMA,IAAIA,WAAWA,CAACA,KAAKA,CAACA,GAAGA,OAAOA,GAAGA,WAAWA,CAACA,KAAKA,CAACA,GAAGA,iBAAiBA,CAACA;YACpFA,CAACA;YACDA,IAAIA,CAACA,CAACA;gBACFA,MAAMA,IAAIA,WAAWA,CAACA,KAAKA,CAACA,GAAGA,gBAAgBA,CAACA;YACpDA,CAACA;QACLA,CAACA;QACDA,MAAMA,IAAIA,OAAOA,CAACA;IACtBA,CAACA;IAEDA,MAAMA,IAAIA,YAAYA,CAACA;IACvBA,MAAMA,IAAIA,MAAMA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,+BAA+BA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,OAAOA,CAACA;IAClHA,MAAMA,IAAIA,MAAMA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,0BAA0BA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,GAAGA,OAAOA,CAACA;IACvGA,MAAMA,IAAIA,MAAMA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,oEAAoEA,CAACA;IAC1GA,EAAEA,CAACA,CAACA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,CAACA,CAACA,CAACA;QAC7BA,MAAMA,IAAIA,8BAA8BA,CAACA;QAEzCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAClDA,MAAMA,IAAIA,mBAAmBA,GAAGA,CAACA,GAAGA,gBAAgBA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,IAAIA,GAAGA,OAAOA,CAACA;QACjGA,CAACA;QAEDA,MAAMA,IAAIA,eAAeA,CAACA;IAC9BA,CAACA;IACDA,IAAIA,CAACA,CAACA;QACFA,MAAMA,IAAIA,8CAA8CA,CAACA;IAC7DA,CAACA;IACDA,MAAMA,IAAIA,WAAWA,CAACA;IAEtBA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,wBAAwB;IAC7BC,IAAIA,MAAMA,GAAGA,+CAA+CA,CAACA;IAE7DA,MAAMA,IAAIA,yBAAyBA,CAACA;IAEpCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,WAAWA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC1CA,IAAIA,UAAUA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAEhCA,EAAEA,CAACA,CAACA,CAACA,GAAGA,CAACA,CAACA,CAACA,CAACA;YACRA,MAAMA,IAAIA,MAAMA,CAACA;QACrBA,CAACA;QAEDA,MAAMA,IAAIA,uBAAuBA,CAACA,UAAUA,CAACA,CAACA;IAClDA,CAACA;IAEDA,MAAMA,IAAIA,GAAGA,CAACA;IACdA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,uBAAuB,CAAC,UAA2B;IACxDC,IAAIA,MAAMA,GAAGA,uBAAuBA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,sBAAsBA,CAAAA;IAE/EA,EAAEA,CAACA,CAACA,UAAUA,CAACA,UAAUA,CAACA,CAACA,CAACA;QACxBA,MAAMA,IAAIA,IAAIA,CAACA;QACfA,MAAMA,IAAIA,UAAUA,CAACA,UAAUA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;IAC/CA,CAACA;IAEDA,MAAMA,IAAIA,QAAQA,CAACA;IAEnBA,EAAEA,CAACA,CAACA,UAAUA,CAACA,IAAIA,KAAKA,kBAAkBA,CAACA,CAACA,CAACA;QACzCA,MAAMA,IAAIA,qCAAqCA,CAACA;IACpDA,CAACA;IAEDA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAClDA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;QACnCA,MAAMA,IAAIA,UAAUA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,IAAIA,GAAGA,OAAOA,CAACA,KAAKA,CAACA,GAAGA,OAAOA,CAACA;IACxEA,CAACA;IAEDA,MAAMA,IAAIA,WAAWA,CAACA;IACtBA,MAAMA,IAAIA,uBAAuBA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,eAAeA,CAACA;IACvFA,MAAMA,IAAIA,oBAAoBA,CAACA;IAE/BA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAClDA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;QACnCA,MAAMA,IAAIA,IAAIA,CAACA;QACfA,MAAMA,IAAIA,WAAWA,CAACA,KAAKA,CAACA,CAACA;QAC7BA,MAAMA,IAAIA,IAAIA,GAAGA,OAAOA,CAACA,KAAKA,CAACA,CAACA;IACpCA,CAACA;IAEDA,MAAMA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,IAAIA,CAACA;IAClCA,MAAMA,IAAIA,QAAQA,CAACA;IAEnBA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,aAAa;IAClBC,IAAIA,MAAMA,GAAGA,+CAA+CA,CAACA;IAE7DA,MAAMA,IAAIA,mBAAmBA,CAACA;IAE9BA,MAAMA,IAAIA,QAAQA,CAACA;IAEnBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,WAAWA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC1CA,IAAIA,UAAUA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAEhCA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;YACJA,MAAMA,IAAIA,MAAMA,CAACA;QACrBA,CAACA;QAEDA,MAAMA,IAAIA,2BAA2BA,CAACA,UAAUA,CAACA,CAACA;IACtDA,CAACA;IAEDA,MAAMA,IAAIA,GAAGA,CAACA;IACdA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,WAAW,CAAC,IAAY;IAC7BC,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,CAACA,KAAKA,GAAGA,IAAIA,IAAIA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA,WAAWA,EAAEA,KAAKA,IAAIA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAAAA;AAC7FA,CAACA;AAED,SAAS,cAAc;IACnBC,IAAIA,MAAMA,GAAGA,EAAEA,CAACA;IAEhBA,MAAMA,IACNA,2CAA2CA,GAC3CA,MAAMA,GACNA,yBAAyBA,GACzBA,+DAA+DA,GAC/DA,4DAA4DA,GAC5DA,eAAeA,GACfA,MAAMA,GACNA,qEAAqEA,GACrEA,4CAA4CA,GAC5CA,6BAA6BA,GAC7BA,mBAAmBA,GACnBA,MAAMA,GACNA,yCAAyCA,GACzCA,eAAeA,GACfA,MAAMA,GACNA,kEAAkEA,GAClEA,gEAAgEA,GAChEA,sDAAsDA,GACtDA,mBAAmBA,GACnBA,eAAeA,CAACA;IAEhBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,WAAWA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC1CA,IAAIA,UAAUA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAEhCA,MAAMA,IAAIA,MAAMA,CAACA;QACjBA,MAAMA,IAAIA,sBAAsBA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,SAASA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,eAAeA,CAACA;QAEpHA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAClDA,IAAIA,KAAKA,GAAGA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;YAEnCA,EAAEA,CAACA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA,CAACA;gBAChBA,EAAEA,CAACA,CAACA,KAAKA,CAACA,UAAUA,CAACA,CAACA,CAACA;oBACnBA,MAAMA,IAAIA,2CAA2CA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;gBAClFA,CAACA;gBACDA,IAAIA,CAACA,CAACA;oBACFA,MAAMA,IAAIA,mCAAmCA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;gBAC1EA,CAACA;YACLA,CAACA;YACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,MAAMA,IAAIA,KAAKA,CAACA,eAAeA,CAACA,CAACA,CAACA;gBAC7CA,MAAMA,IAAIA,kCAAkCA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;YACzEA,CAACA;YACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA,CAACA;gBACrBA,EAAEA,CAACA,CAACA,KAAKA,CAACA,UAAUA,CAACA,CAACA,CAACA;oBACnBA,MAAMA,IAAIA,2CAA2CA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;gBAClFA,CAACA;gBACDA,IAAIA,CAACA,CAACA;oBACFA,MAAMA,IAAIA,mCAAmCA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;gBAC1EA,CAACA;YACLA,CAACA;YACDA,IAAIA,CAACA,CAACA;gBACFA,MAAMA,IAAIA,0CAA0CA,GAAGA,KAAKA,CAACA,IAAIA,GAAGA,QAAQA,CAACA;YACjFA,CAACA;QACLA,CAACA;QAEDA,MAAMA,IAAIA,eAAeA,CAACA;IAC9BA,CAACA;IAEDA,MAAMA,IAAIA,OAAOA,CAACA;IAClBA,MAAMA,IAAIA,OAAOA,CAACA;IAClBA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,aAAa,CAAC,CAAM,EAAE,KAAa;IACxCC,GAAGA,CAACA,CAACA,GAAGA,CAACA,IAAIA,IAAIA,CAACA,CAACA,CAACA,CAACA;QACjBA,EAAEA,CAACA,CAACA,CAACA,CAACA,IAAIA,CAACA,KAAKA,KAAKA,CAACA,CAACA,CAACA;YACpBA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;IACLA,CAACA;AACLA,CAACA;AAED,SAAS,OAAO,CAAI,KAAU,EAAE,IAAsB;IAClDC,IAAIA,MAAMA,GAAQA,EAAEA,CAACA;IAErBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC3CA,IAAIA,CAACA,GAAQA,KAAKA,CAACA,CAACA,CAACA,CAACA;QACtBA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,CAACA,CAACA,CAACA;QAEhBA,IAAIA,IAAIA,GAAQA,MAAMA,CAACA,CAACA,CAACA,IAAIA,EAAEA,CAACA;QAChCA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;QACbA,MAAMA,CAACA,CAACA,CAACA,GAAGA,IAAIA,CAACA;IACrBA,CAACA;IAEDA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,wBAAwB,CAAC,QAA0D,EAAE,gBAAwB,EAAE,MAAc;IAClIC,IAAIA,MAAMA,GAAGA,QAAQA,CAACA,CAACA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA;IAErCA,IAAIA,MAAMA,GAAGA,EAAEA,CAACA;IAChBA,IAAIA,KAAaA,CAACA;IAElBA,EAAEA,CAACA,CAACA,QAAQA,CAACA,MAAMA,KAAKA,CAACA,CAACA,CAACA,CAACA;QACxBA,IAAIA,OAAOA,GAAGA,QAAQA,CAACA,CAACA,CAACA,CAACA;QAE1BA,EAAEA,CAACA,CAACA,gBAAgBA,KAAKA,MAAMA,CAACA,CAACA,CAACA;YAC9BA,MAAMA,CAACA,qBAAqBA,GAAGA,aAAaA,CAACA,UAAUA,CAACA,UAAUA,EAAEA,OAAOA,CAACA,IAAIA,CAACA,GAAGA,OAAOA,CAACA;QAChGA,CAACA;QAEDA,IAAIA,WAAWA,GAAGA,QAAQA,CAACA,CAACA,CAACA,CAACA,IAAIA,CAACA;QACnCA,MAAMA,GAAGA,WAAWA,CAAAA;QAEpBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,gBAAgBA,EAAEA,CAACA,GAAGA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAC7CA,EAAEA,CAACA,CAACA,CAACA,GAAGA,gBAAgBA,CAACA,CAACA,CAACA;gBACvBA,MAAMA,IAAIA,MAAMA,CAACA;YACrBA,CAACA;YAEDA,KAAKA,GAAGA,CAACA,KAAKA,CAACA,GAAGA,OAAOA,GAAGA,CAACA,UAAUA,GAAGA,CAACA,CAACA,CAACA;YAC7CA,MAAMA,IAAIA,iBAAiBA,GAAGA,KAAKA,GAAGA,uBAAuBA,GAAGA,WAAWA,CAACA,MAAMA,CAACA,CAACA,EAAEA,CAACA,CAACA,CAACA;QAC7FA,CAACA;QAEDA,MAAMA,IAAIA,iBAAiBA,GAAGA,aAAaA,CAACA,UAAUA,CAACA,UAAUA,EAAEA,OAAOA,CAACA,IAAIA,CAACA,GAAGA,mCAAmCA,CAACA;IAC3HA,CAACA;IACDA,IAAIA,CAACA,CAACA;QACFA,MAAMA,IAAIA,MAAMA,GAAGA,UAAUA,CAACA,cAAcA,CAACA,MAAMA,CAACA,QAAQA,EAAEA,UAAAA,CAAIA,IAACA,OAAAA,CAACA,CAACA,IAAIA,EAANA,CAAMA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,MAAMA,CAAAA;QAC9FA,KAAKA,GAAGA,gBAAgBA,KAAKA,CAACA,GAAGA,OAAOA,GAAGA,CAACA,UAAUA,GAAGA,gBAAgBA,CAACA,CAACA;QAC3EA,MAAMA,IAAIA,MAAMA,GAAGA,wBAAwBA,GAAGA,KAAKA,GAAGA,UAAUA,CAAAA;QAEhEA,IAAIA,eAAeA,GAAGA,OAAOA,CAACA,QAAQA,EAAEA,UAAAA,CAAIA,IAACA,OAAAA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA,gBAAgBA,EAAEA,CAACA,CAACA,EAAlCA,CAAkCA,CAACA,CAACA;QAEjFA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,IAAIA,eAAeA,CAACA,CAACA,CAACA;YAC5BA,EAAEA,CAACA,CAACA,eAAeA,CAACA,cAAcA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;gBACpCA,MAAMA,IAAIA,MAAMA,GAAGA,wBAAwBA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;gBACtDA,MAAMA,IAAIA,wBAAwBA,CAACA,eAAeA,CAACA,CAACA,CAACA,EAAEA,gBAAgBA,GAAGA,CAACA,EAAEA,MAAMA,GAAGA,MAAMA,CAACA,CAACA;YAClGA,CAACA;QACLA,CAACA;QAEDA,MAAMA,IAAIA,MAAMA,GAAGA,kDAAkDA,CAACA;QACtEA,MAAMA,IAAIA,MAAMA,GAAGA,OAAOA,CAACA;IAC/BA,CAACA;IAEDA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,GAAG,CAAI,KAAU,EAAE,IAAsB;IAC9CC,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA;IAEzBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QACpCA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA;QAC1BA,EAAEA,CAACA,CAACA,IAAIA,GAAGA,GAAGA,CAACA,CAACA,CAACA;YACbA,GAAGA,GAAGA,IAAIA,CAACA;QACfA,CAACA;IACLA,CAACA;IAEDA,MAAMA,CAACA,GAAGA,CAACA;AACfA,CAACA;AAED,SAAS,GAAG,CAAI,KAAU,EAAE,IAAsB;IAC9CC,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA;IAEzBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QACpCA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA;QAC1BA,EAAEA,CAACA,CAACA,IAAIA,GAAGA,GAAGA,CAACA,CAACA,CAACA;YACbA,GAAGA,GAAGA,IAAIA,CAACA;QACfA,CAACA;IACLA,CAACA;IAEDA,MAAMA,CAACA,GAAGA,CAACA;AACfA,CAACA;AAED,SAAS,iBAAiB;IACtBC,IAAIA,MAAMA,GAAGA,EAAEA,CAACA;IAChBA,MAAMA,IAAIA,iCAAiCA,CAACA;IAC5CA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,IAAIA,UAAUA,CAACA,UAAUA,CAACA,cAAcA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC7DA,EAAEA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;YACJA,MAAMA,IAAIA,IAAIA,CAACA;QACnBA,CAACA;QAEDA,EAAEA,CAACA,CAACA,CAACA,GAAGA,UAAUA,CAACA,UAAUA,CAACA,eAAeA,CAACA,CAACA,CAACA;YAC5CA,MAAMA,IAAIA,GAAGA,CAACA;QAClBA,CAACA;QACDA,IAAIA,CAACA,CAACA;YACFA,MAAMA,IAAIA,UAAUA,CAACA,WAAWA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA,MAAMA,CAACA;QACvDA,CAACA;IACLA,CAACA;IACDA,MAAMA,IAAIA,QAAQA,CAACA;IAEnBA,MAAMA,IAAIA,gEAAgEA,CAACA;IAC3EA,MAAMA,IAAIA,+CAA+CA,CAACA;IAS1DA,MAAMA,IAAIA,eAAeA,CAACA;IAE1BA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,wBAAwB;IAC7BC,IAAIA,MAAMA,GAAGA,2CAA2CA,GACpDA,MAAMA,GACNA,yBAAyBA,GACzBA,0CAA0CA,CAACA;IAE/CA,IAAIA,CAASA,CAACA;IACdA,IAAIA,QAAQA,GAAqDA,EAAEA,CAACA;IAEpEA,GAAGA,CAACA,CAACA,CAACA,GAAGA,UAAUA,CAACA,UAAUA,CAACA,YAAYA,EAAEA,CAACA,IAAIA,UAAUA,CAACA,UAAUA,CAACA,WAAWA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QACvFA,QAAQA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,EAAEA,CAACA,EAAEA,IAAIA,EAAEA,UAAUA,CAACA,WAAWA,CAACA,OAAOA,CAACA,CAACA,CAACA,EAAEA,CAACA,CAACA;IACxEA,CAACA;IAEDA,QAAQA,CAACA,IAAIA,CAACA,UAACA,CAACA,EAAEA,CAACA,IAAKA,OAAAA,CAACA,CAACA,IAAIA,CAACA,aAAaA,CAACA,CAACA,CAACA,IAAIA,CAACA,EAA5BA,CAA4BA,CAACA,CAACA;IAEtDA,MAAMA,IAAIA,sGAAsGA,CAACA;IAEjHA,IAAIA,cAAcA,GAAGA,GAAGA,CAACA,QAAQA,EAAEA,UAAAA,CAAIA,IAACA,OAAAA,CAACA,CAACA,IAAIA,CAACA,MAAMA,EAAbA,CAAaA,CAACA,CAACA;IACvDA,IAAIA,cAAcA,GAAGA,GAAGA,CAACA,QAAQA,EAAEA,UAAAA,CAAIA,IAACA,OAAAA,CAACA,CAACA,IAAIA,CAACA,MAAMA,EAAbA,CAAaA,CAACA,CAACA;IACvDA,MAAMA,IAAIA,mCAAmCA,CAACA;IAG9CA,GAAGA,CAACA,CAACA,CAACA,GAAGA,cAAcA,EAAEA,CAACA,IAAIA,cAAcA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAChDA,IAAIA,iBAAiBA,GAAGA,UAAUA,CAACA,cAAcA,CAACA,KAAKA,CAACA,QAAQA,EAAEA,UAAAA,CAAIA,IAACA,OAAAA,CAACA,CAACA,IAAIA,CAACA,MAAMA,KAAKA,CAACA,EAAnBA,CAAmBA,CAACA,CAACA;QAC5FA,EAAEA,CAACA,CAACA,iBAAiBA,CAACA,MAAMA,GAAGA,CAACA,CAACA,CAACA,CAACA;YAC/BA,MAAMA,IAAIA,qBAAqBA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;YAC1CA,MAAMA,IAAIA,wBAAwBA,CAACA,iBAAiBA,EAAEA,CAACA,EAAEA,kBAAkBA,CAACA,CAACA;QACjFA,CAACA;IACLA,CAACA;IAEDA,MAAMA,IAAIA,8DAA8DA,CAACA;IACzEA,MAAMA,IAAIA,mBAAmBA,CAACA;IAC9BA,MAAMA,IAAIA,eAAeA,CAACA;IAE1BA,MAAMA,IAAIA,WAAWA,CAACA;IACtBA,MAAMA,IAAIA,GAAGA,CAACA;IAEdA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,SAAS,cAAc,CAAC,IAA2B;IAC/CC,GAAGA,CAACA,CAACA,GAAGA,CAACA,IAAIA,IAAIA,UAAUA,CAACA,UAAUA,CAACA,CAACA,CAACA;QACrCA,EAAEA,CAACA,CAAMA,UAAUA,CAACA,UAAUA,CAACA,IAAIA,CAACA,KAAKA,IAAIA,CAACA,CAACA,CAACA;YAC5CA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;IACLA,CAACA;IAEDA,MAAMA,IAAIA,KAAKA,EAAEA,CAACA;AACtBA,CAACA;AAED,SAAS,eAAe;IACpBC,IAAIA,MAAMA,GAAGA,EAAEA,CAACA;IAEhBA,MAAMA,IAAIA,+CAA+CA,CAACA;IAE1DA,MAAMA,IAAIA,yBAAyBA,CAACA;IACpCA,MAAMA,IAAIA,uGAAuGA,CAACA;IAClHA,MAAMA,IAAIA,8DAA8DA,CAACA;IAEzEA,MAAMA,IAAIA,qCAAqCA,CAACA;IAEhDA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,WAAWA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC1CA,IAAIA,UAAUA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAEhCA,MAAMA,IAAIA,8BAA8BA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,IAAIA,CAACA;QACnFA,MAAMA,IAAIA,sBAAsBA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,IAAIA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,gBAAgBA,CAACA;IACpHA,CAACA;IAEDA,MAAMA,IAAIA,4EAA4EA,CAACA;IACvFA,MAAMA,IAAIA,eAAeA,CAACA;IAC1BA,MAAMA,IAAIA,eAAeA,CAACA;IAE1BA,MAAMA,IAAIA,2CAA2CA,CAACA;IACtDA,MAAMA,IAAIA,mDAAmDA,CAACA;IAE9DA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,WAAWA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;QAC1CA,IAAIA,UAAUA,GAAGA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAChCA,MAAMA,IAAIA,eAAeA,GAAGA,oBAAoBA,CAACA,UAAUA,CAACA,GAAGA,SAASA,GAAGA,UAAUA,CAACA,IAAIA,GAAGA,aAAaA,CAACA;IAC/GA,CAACA;IAEDA,MAAMA,IAAIA,OAAOA,CAACA;IAElBA,MAAMA,IAAIA,OAAOA,CAACA;IAElBA,MAAMA,CAACA,MAAMA,CAACA;AAClBA,CAACA;AAED,IAAI,mBAAmB,GAAG,aAAa,EAAE,CAAC;AAC1C,IAAI,gBAAgB,GAAG,wBAAwB,EAAE,CAAC;AAClD,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;AAC9B,IAAI,gBAAgB,GAAG,wBAAwB,EAAE,CAAC;AAClD,IAAI,OAAO,GAAG,eAAe,EAAE,CAAC;AAChC,IAAI,SAAS,GAAG,iBAAiB,EAAE,CAAC;AAEpC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,4DAA4D,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;AACpI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,wDAAwD,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC7H,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,oDAAoD,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC/G,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,wDAAwD,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC7H,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,qDAAqD,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACjH,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,iDAAiD,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC"} >>>>>>> 99981aa... Add support for parsing yield expressions. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} +>>>>>>> 8097afa... Move parser error to grammar check phase. diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index b1b197cd1ea..90a79d35be6 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -2098,33 +2098,33 @@ module TypeScript.Parser { parseSyntaxList(ListParsingState.SwitchClause_Statements)); } - function parseThrowStatementExpression(): IExpressionSyntax { + function parseThrowStatement(throwKeyword: ISyntaxToken): ThrowStatementSyntax { + return new ThrowStatementSyntax(parseNodeData, + consumeToken(throwKeyword), tryParseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + } + + function tryParseThrowStatementExpression(): IExpressionSyntax { // ThrowStatement[Yield] : // throw [no LineTerminator here]Expression[In, ?Yield]; // Because of automatic semicolon insertion, we need to report error if this // throw could be terminated with a semicolon. Note: we can't call 'parseExpression' // directly as that might consume an expression on the following line. - return canEatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) - ? createMissingToken(SyntaxKind.IdentifierName, undefined) - : allowInAnd(parseExpression); + // We just return 'undefined' in that case. The actual error will be reported in the + // grammar walker. + return canEatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) ? undefined : allowInAnd(parseExpression); } - function parseThrowStatement(throwKeyword: ISyntaxToken): ThrowStatementSyntax { - return new ThrowStatementSyntax(parseNodeData, - consumeToken(throwKeyword), parseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + function parseReturnStatement(returnKeyword: ISyntaxToken): ReturnStatementSyntax { + return new ReturnStatementSyntax(parseNodeData, + consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } function tryParseReturnStatementExpression(): IExpressionSyntax { // ReturnStatement[Yield] : // return [no LineTerminator here]Expression[In, ?Yield]; - return !canEatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) ? allowInAnd(parseExpression) : undefined; - } - - function parseReturnStatement(returnKeyword: ISyntaxToken): ReturnStatementSyntax { - return new ReturnStatementSyntax(parseNodeData, - consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + return canEatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false) ? undefined : allowInAnd(parseExpression); } function isExpressionStatement(currentToken: ISyntaxToken): boolean { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index 99218a04920..2c0eb0d441b 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -705,7 +705,7 @@ var definitions:ITypeDefinition[] = [ interfaces: ['IStatementSyntax'], children: [ { name: 'throwKeyword', isToken: true, excludeFromAST: true }, - { name: 'expression', type: 'IExpressionSyntax' }, + { name: 'expression', type: 'IExpressionSyntax', isOptional: true }, { name: 'semicolonToken', isToken: true, isOptional: true, excludeFromAST: true } ] }, diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index e87e7e1e2b7..42050995269 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -893,7 +893,7 @@ module TypeScript { this.expression = expression, this.semicolonToken = semicolonToken, throwKeyword.parent = this, - expression.parent = this, + expression && (expression.parent = this), semicolonToken && (semicolonToken.parent = this); }; ThrowStatementSyntax.prototype.kind = SyntaxKind.ThrowStatement; diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index c21b741025d..fe435817d29 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -1264,13 +1264,24 @@ module TypeScript { } public visitThrowStatement(node: ThrowStatementSyntax): void { - if (this.checkForStatementInAmbientContxt(node)) { + if (this.checkForStatementInAmbientContxt(node) || + this.checkForMissingThrowStatementExpression(node)) { return; } super.visitThrowStatement(node); } + public checkForMissingThrowStatementExpression(node: ThrowStatementSyntax): boolean { + if (node.expression === undefined) { + this.diagnostics.push(new Diagnostic( + this.syntaxTree.fileName(), this.syntaxTree.lineMap(), fullEnd(node.throwKeyword), 0, DiagnosticCode.Expression_expected)); + return true; + } + + return false; + } + public visitTryStatement(node: TryStatementSyntax): void { if (this.checkForStatementInAmbientContxt(node)) { return; From 80366711d01d023baa8094a355fd7056da5d8027 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 22 Nov 2014 13:21:06 -0800 Subject: [PATCH 148/178] Move parser error to the grammar checker. Conflicts: src/services/syntax/SyntaxGenerator.js.map --- src/services/syntax/SyntaxGenerator.js | 2 +- src/services/syntax/SyntaxGenerator.js.map | 4 ++ src/services/syntax/parser.ts | 37 +++++++------------ src/services/syntax/syntaxGenerator.ts | 2 +- .../syntax/syntaxNodes.concrete.generated.ts | 2 +- src/services/syntax/syntaxTree.ts | 36 ++++++++++++++++-- 6 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/services/syntax/SyntaxGenerator.js b/src/services/syntax/SyntaxGenerator.js index 61a9360e3df..84efca1d5b3 100644 --- a/src/services/syntax/SyntaxGenerator.js +++ b/src/services/syntax/SyntaxGenerator.js @@ -1289,7 +1289,7 @@ var definitions = [ children: [ { name: 'expression', type: 'ILeftHandSideExpressionSyntax' }, { name: 'openBracketToken', isToken: true, excludeFromAST: true }, - { name: 'argumentExpression', type: 'IExpressionSyntax' }, + { name: 'argumentExpression', type: 'IExpressionSyntax', isOptional: true }, { name: 'closeBracketToken', isToken: true, excludeFromAST: true } ] }, diff --git a/src/services/syntax/SyntaxGenerator.js.map b/src/services/syntax/SyntaxGenerator.js.map index 94e620bf8b1..e38b325eedc 100644 --- a/src/services/syntax/SyntaxGenerator.js.map +++ b/src/services/syntax/SyntaxGenerator.js.map @@ -7,6 +7,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< Updated upstream {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} ======= @@ -39,3 +40,6 @@ ======= {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} >>>>>>> 8097afa... Move parser error to grammar check phase. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} +>>>>>>> 67123d7... Move parser error to the grammar checker. diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 90a79d35be6..27cf1ce6703 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -2650,7 +2650,7 @@ module TypeScript.Parser { return token0; } - function tryParseMemberExpressionOrHigher(_currentToken: ISyntaxToken, force: boolean, inObjectCreation: boolean): IMemberExpressionSyntax { + function tryParseMemberExpressionOrHigher(_currentToken: ISyntaxToken, force: boolean): IMemberExpressionSyntax { // Note: to make our lives simpler, we decompose the the NewExpression productions and // place ObjectCreationExpression and FunctionExpression into PrimaryExpression. // like so: @@ -2703,7 +2703,7 @@ module TypeScript.Parser { return undefined; } - return parseMemberExpressionRest(expression, inObjectCreation); + return parseMemberExpressionRest(expression); } function parseCallExpressionRest(expression: ILeftHandSideExpressionSyntax): ILeftHandSideExpressionSyntax { @@ -2730,7 +2730,7 @@ module TypeScript.Parser { continue; case SyntaxKind.OpenBracketToken: - expression = parseElementAccessExpression(expression, _currentToken, /*inObjectCreation:*/ false); + expression = parseElementAccessExpression(expression, _currentToken); continue; case SyntaxKind.DotToken: @@ -2747,14 +2747,14 @@ module TypeScript.Parser { } } - function parseMemberExpressionRest(expression: IMemberExpressionSyntax, inObjectCreation: boolean): IMemberExpressionSyntax { + function parseMemberExpressionRest(expression: IMemberExpressionSyntax): IMemberExpressionSyntax { while (true) { var _currentToken = currentToken(); var currentTokenKind = _currentToken.kind; switch (currentTokenKind) { case SyntaxKind.OpenBracketToken: - expression = parseElementAccessExpression(expression, _currentToken, inObjectCreation); + expression = parseElementAccessExpression(expression, _currentToken); continue; case SyntaxKind.DotToken: @@ -2808,7 +2808,7 @@ module TypeScript.Parser { expression = parseSuperExpression(_currentToken); } else { - expression = tryParseMemberExpressionOrHigher(_currentToken, force, /*inObjectCreation:*/ false); + expression = tryParseMemberExpressionOrHigher(_currentToken, force); if (expression === undefined) { return undefined; } @@ -2941,29 +2941,18 @@ module TypeScript.Parser { return allowInAnd(force ? parseAssignmentExpressionOrHigher : tryParseAssignmentExpressionOrHigher); } - function parseElementAccessArgumentExpression(openBracketToken: ISyntaxToken, inObjectCreation: boolean) { + function parseElementAccessArgumentExpression(openBracketToken: ISyntaxToken) { // MemberExpression[?Yield] [ Expression[In, ?Yield] ] - // It's not uncommon for a user to write: "new Type[]". Check for that common pattern - // and report a better error message. - if (inObjectCreation && currentToken().kind === SyntaxKind.CloseBracketToken) { - var errorStart = start(openBracketToken, source.text); - var errorEnd = fullEnd(currentToken()); - var diagnostic = new Diagnostic(fileName, source.text.lineMap(), errorStart, errorEnd - errorStart, - DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, undefined); - addDiagnostic(diagnostic); - - return createEmptyToken(SyntaxKind.IdentifierName); - } - else { - return allowInAnd(parseExpression); - } + // For error recovery purposes. Allow a missing expression here. We'll report the + // appropriate message in the grammar checker. + return currentToken().kind === SyntaxKind.CloseBracketToken ? undefined : allowInAnd(parseExpression); } - function parseElementAccessExpression(expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, inObjectCreation: boolean): ElementAccessExpressionSyntax { + function parseElementAccessExpression(expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken): ElementAccessExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBracketToken); return new ElementAccessExpressionSyntax(parseNodeData, expression, consumeToken(openBracketToken), - parseElementAccessArgumentExpression(openBracketToken, inObjectCreation), eatToken(SyntaxKind.CloseBracketToken)); + parseElementAccessArgumentExpression(openBracketToken), eatToken(SyntaxKind.CloseBracketToken)); } function tryParsePrimaryExpression(_currentToken: ISyntaxToken, force: boolean): IPrimaryExpressionSyntax { @@ -3069,7 +3058,7 @@ module TypeScript.Parser { // this decision. return new ObjectCreationExpressionSyntax(parseNodeData, - consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), /*force:*/ true, /*inObjectCreation:*/ true), tryParseArgumentList()); + consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), /*force:*/ true), tryParseArgumentList()); } function parseTemplateExpression(startToken: ISyntaxToken): IPrimaryExpressionSyntax { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index 2c0eb0d441b..fe7d7459201 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -435,7 +435,7 @@ var definitions:ITypeDefinition[] = [ children: [ { name: 'expression', type: 'ILeftHandSideExpressionSyntax' }, { name: 'openBracketToken', isToken: true, excludeFromAST: true }, - { name: 'argumentExpression', type: 'IExpressionSyntax' }, + { name: 'argumentExpression', type: 'IExpressionSyntax', isOptional: true }, { name: 'closeBracketToken', isToken: true, excludeFromAST: true } ] }, diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index 42050995269..b9e478154db 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -1347,7 +1347,7 @@ module TypeScript { this.closeBracketToken = closeBracketToken, expression.parent = this, openBracketToken.parent = this, - argumentExpression.parent = this, + argumentExpression && (argumentExpression.parent = this), closeBracketToken.parent = this; }; ElementAccessExpressionSyntax.prototype.kind = SyntaxKind.ElementAccessExpression; diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index fe435817d29..e3f12a67e64 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -138,8 +138,12 @@ module TypeScript { } private pushDiagnostic(element: ISyntaxElement, diagnosticKey: string, args?: any[]): void { + this.pushDiagnosticAt(start(element, this.text), width(element), diagnosticKey, args); + } + + private pushDiagnosticAt(start: number, length: number, diagnosticKey: string, args?: any[]): void { this.diagnostics.push(new Diagnostic( - this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start(element, this.text), width(element), diagnosticKey, args)); + this.syntaxTree.fileName(), this.syntaxTree.lineMap(), start, length, diagnosticKey, args)); } public visitCatchClause(node: CatchClauseSyntax): void { @@ -715,6 +719,33 @@ module TypeScript { super.visitSetAccessor(node); } + public visitElementAccessExpression(node: ElementAccessExpressionSyntax): void { + if (this.checkForMissingArgumentExpression(node)) { + return; + } + + super.visitElementAccessExpression(node); + } + + public checkForMissingArgumentExpression(node: ElementAccessExpressionSyntax): boolean { + if (node.argumentExpression === undefined) { + if (node.parent.kind === SyntaxKind.ObjectCreationExpression && (node.parent).expression === node) { + // Provide a specialized message for the very common case where someone writes: + // new Foo[] + var start = TypeScript.start(node.openBracketToken); + var end = TypeScript.fullEnd(node.closeBracketToken); + this.pushDiagnosticAt(start, end - start, DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + } + else { + this.pushDiagnostic(node.closeBracketToken, DiagnosticCode.Expression_expected); + } + + return true; + } + + return false; + } + public visitEnumDeclaration(node: EnumDeclarationSyntax): void { if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || @@ -1274,8 +1305,7 @@ module TypeScript { public checkForMissingThrowStatementExpression(node: ThrowStatementSyntax): boolean { if (node.expression === undefined) { - this.diagnostics.push(new Diagnostic( - this.syntaxTree.fileName(), this.syntaxTree.lineMap(), fullEnd(node.throwKeyword), 0, DiagnosticCode.Expression_expected)); + this.pushDiagnosticAt(fullEnd(node.throwKeyword), 0, DiagnosticCode.Expression_expected); return true; } From 300862a3dfdb9ec93b52ac1ad59cf5c452f6c2e9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 22 Nov 2014 22:07:03 -0800 Subject: [PATCH 149/178] Make parser more lenient with what it allows as the body of a function. Conflicts: src/services/syntax/SyntaxGenerator.js.map --- src/services/syntax/SyntaxGenerator.js | 30 +++++--- src/services/syntax/SyntaxGenerator.js.map | 4 + src/services/syntax/parser.ts | 77 ++++++++++--------- src/services/syntax/prettyPrinter.ts | 16 ++-- src/services/syntax/syntaxElement.ts | 2 +- src/services/syntax/syntaxGenerator.ts | 25 ++++-- .../syntax/syntaxInterfaces.generated.ts | 37 +++++---- src/services/syntax/syntaxKind.ts | 1 + .../syntax/syntaxNodes.concrete.generated.ts | 51 ++++++++---- src/services/syntax/syntaxTree.ts | 38 +++++++-- .../syntax/syntaxVisitor.generated.ts | 2 + src/services/syntax/syntaxWalker.generated.ts | 6 ++ 12 files changed, 194 insertions(+), 95 deletions(-) diff --git a/src/services/syntax/SyntaxGenerator.js b/src/services/syntax/SyntaxGenerator.js index 84efca1d5b3..861a22a43d5 100644 --- a/src/services/syntax/SyntaxGenerator.js +++ b/src/services/syntax/SyntaxGenerator.js @@ -621,9 +621,10 @@ var TypeScript; SyntaxKind[SyntaxKind["Parameter"] = 209] = "Parameter"; SyntaxKind[SyntaxKind["EnumElement"] = 210] = "EnumElement"; SyntaxKind[SyntaxKind["TypeAnnotation"] = 211] = "TypeAnnotation"; - SyntaxKind[SyntaxKind["ComputedPropertyName"] = 212] = "ComputedPropertyName"; - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 213] = "ExternalModuleReference"; - SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 214] = "ModuleNameModuleReference"; + SyntaxKind[SyntaxKind["ExpressionBody"] = 212] = "ExpressionBody"; + SyntaxKind[SyntaxKind["ComputedPropertyName"] = 213] = "ComputedPropertyName"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 214] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 215] = "ModuleNameModuleReference"; SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; @@ -1016,7 +1017,15 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + ] + }, + { + name: 'ExpressionBody', + baseType: 'ISyntaxNode', + children: [ + { name: 'equalsGreaterThanToken', isToken: true }, + { name: 'expression', type: 'IExpressionSyntax' } ] }, { @@ -1246,6 +1255,7 @@ var definitions = [ baseType: 'ISyntaxNode', interfaces: ['IStatementSyntax'], children: [ + { name: 'equalsGreaterThanToken', isToken: true, isOptional: 'true' }, { name: 'openBraceToken', isToken: true }, { name: 'statements', isList: true, elementType: 'IStatementSyntax' }, { name: 'closeBraceToken', isToken: true, excludeFromAST: true } @@ -1488,7 +1498,7 @@ var definitions = [ { name: 'modifiers', isList: true, elementType: 'ISyntaxToken' }, { name: 'constructorKeyword', isToken: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -1501,7 +1511,7 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -1514,7 +1524,7 @@ var definitions = [ { name: 'getKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -1526,7 +1536,7 @@ var definitions = [ { name: 'setKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -1763,7 +1773,7 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -1775,7 +1785,7 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { diff --git a/src/services/syntax/SyntaxGenerator.js.map b/src/services/syntax/SyntaxGenerator.js.map index e38b325eedc..c4c6378fd51 100644 --- a/src/services/syntax/SyntaxGenerator.js.map +++ b/src/services/syntax/SyntaxGenerator.js.map @@ -8,6 +8,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< Updated upstream {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} ======= @@ -43,3 +44,6 @@ ======= {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} >>>>>>> 67123d7... Move parser error to the grammar checker. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} +>>>>>>> e97cba0... Make parser more lenient with what it allows as the body of a function. diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 27cf1ce6703..54ca007fe46 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -1212,14 +1212,14 @@ module TypeScript.Parser { return new GetAccessorSyntax(parseNodeData, modifiers, consumeToken(getKeyword), parsePropertyName(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameter:*/ false), - parseFunctionBlock(/*allowYield:*/ false)); + parseFunctionBody(/*isGenerator:*/ false)); } function parseSetAccessor(modifiers: ISyntaxToken[], setKeyword: ISyntaxToken): SetAccessorSyntax { return new SetAccessorSyntax(parseNodeData, modifiers, consumeToken(setKeyword), parsePropertyName(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), - parseFunctionBlock(/*allowYield:*/ false)); + parseFunctionBody(/*isGenerator:*/ false)); } function isClassElement(inErrorRecovery: boolean): boolean { @@ -1348,22 +1348,20 @@ module TypeScript.Parser { parseModifiers(), eatToken(SyntaxKind.ConstructorKeyword), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), - isBlockOrArrow() ? parseFunctionBlock(/*allowYield:*/ false) : eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + parseFunctionBody(/*isGenerator:*/ false)); } function parseMemberFunctionDeclaration(modifiers: ISyntaxToken[], asteriskToken: ISyntaxToken, propertyName: IPropertyNameSyntax): MemberFunctionDeclarationSyntax { // Note: if we see an arrow after the close paren, then try to parse out a function // block anyways. It's likely the user just though '=> expr' was legal anywhere a // block was legal. - var isGeneratorFunction = asteriskToken !== undefined; + var isGenerator = asteriskToken !== undefined; return new MemberFunctionDeclarationSyntax(parseNodeData, modifiers, asteriskToken, propertyName, - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ isGeneratorFunction, /*generatorParameterContext:*/ isGeneratorFunction), - isBlockOrArrow() - ? parseFunctionBlock(/*yieldContext:*/ isGeneratorFunction) - : eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator), + parseFunctionBody(isGenerator)); } function parseMemberVariableDeclaration(modifiers: ISyntaxToken[], propertyName: IPropertyNameSyntax): MemberVariableDeclarationSyntax { @@ -1404,9 +1402,13 @@ module TypeScript.Parser { asteriskToken, eatIdentifierToken(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator), - isBlockOrArrow() - ? parseFunctionBlock(/*yieldContext:*/ isGenerator) - : eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + parseFunctionBody(isGenerator)); + } + + function parseFunctionBody(isGenerator: boolean): BlockSyntax | ExpressionBody | ISyntaxToken { + return isBlockOrArrow() + ? parseFunctionBlockOrExpressionBody(/*yieldContext:*/ isGenerator) + : eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false); } function parseModuleName(): INameSyntax { @@ -3044,7 +3046,7 @@ module TypeScript.Parser { asteriskToken, enterYieldContextAnd(eatOptionalIdentifierToken), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), - parseFunctionBlock(/*yield:*/ isGenerator)); + parseFunctionBody(isGenerator)); } function parseObjectCreationExpression(newKeyword: ISyntaxToken): ObjectCreationExpressionSyntax { @@ -3187,8 +3189,8 @@ module TypeScript.Parser { // [lookahead not in {] AssignmentExpression[?In] // { FunctionBody } - if (isBlock()) { - return parseFunctionBlock(/*allowYield:*/ false); + if (currentToken().kind === SyntaxKind.OpenBraceToken) { + return parseFunctionBlock(/*allowYield:*/ false, /*equalsGreaterThanToken:*/ undefined); } // We didn't have a block. However, we may be in an error situation. For example, @@ -3208,6 +3210,7 @@ module TypeScript.Parser { // treat this like a block with a missing open brace. return new BlockSyntax(parseNodeData, + /*equalsGreaterThanToken*/ undefined, eatToken(SyntaxKind.OpenBraceToken), parseFunctionBlockStatements(), eatToken(SyntaxKind.CloseBraceToken)); @@ -3236,8 +3239,9 @@ module TypeScript.Parser { parseArrowFunctionBody()); } - function isBlock(): boolean { - return currentToken().kind === SyntaxKind.OpenBraceToken; + function isFunctionBlock(): boolean { + var currentTokenKind = currentToken().kind; + return currentTokenKind === SyntaxKind.OpenBraceToken || currentTokenKind === SyntaxKind.EqualsGreaterThanToken; } function isBlockOrArrow(): boolean { @@ -3563,7 +3567,7 @@ module TypeScript.Parser { asteriskToken, propertyName, parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), - parseFunctionBlock(/*yield:*/ isGenerator)); + parseFunctionBody(isGenerator)); } function parseArrayLiteralExpression(openBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax { @@ -3579,34 +3583,37 @@ module TypeScript.Parser { // a block without an open curly. var openBraceToken: ISyntaxToken; return new BlockSyntax(parseNodeData, + tryEatToken(SyntaxKind.EqualsGreaterThanToken), openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.Block_Statements) : [], eatToken(SyntaxKind.CloseBraceToken)); } - function parseFunctionBlock(_allowYield: boolean): BlockSyntax { + function parseFunctionBlockOrExpressionBody(_allowYield: boolean): BlockSyntax | ExpressionBody { // If we got an errant => then we want to parse what's coming up without requiring an - // open brace. ItWe do this because it's not uncommon for people to get confused as to + // open brace. We do this because it's not uncommon for people to get confused as to // where/when they can use an => and we want to have good error recovery here. - var token0 = currentToken(); - - var hasEqualsGreaterThanToken = token0.kind === SyntaxKind.EqualsGreaterThanToken; - if (hasEqualsGreaterThanToken) { - addDiagnostic(new Diagnostic(fileName, source.text.lineMap(), - start(token0, source.text), width(token0), DiagnosticCode.Unexpected_token_0_expected, [SyntaxFacts.getText(SyntaxKind.OpenBraceToken)])); - - // Skip over the => It will get attached to whatever comes next. - skipToken(token0); + var equalsGreaterThanToken = tryEatToken(SyntaxKind.EqualsGreaterThanToken); + if (equalsGreaterThanToken) { + // check if they wrote something like: => expr + // or if it was more like : => statement + if (isExpression(currentToken())) { + return new ExpressionBody(parseNodeData, equalsGreaterThanToken, parseExpression()); + } } - var openBraceToken = eatToken(SyntaxKind.OpenBraceToken); - var statements: IStatementSyntax[]; + return parseFunctionBlock(_allowYield, equalsGreaterThanToken); + } - if (hasEqualsGreaterThanToken || openBraceToken.fullWidth() > 0) { - statements = _allowYield ? enterYieldContextAnd(parseFunctionBlockStatements) : exitYieldContextAnd(parseFunctionBlockStatements); - } - - return new BlockSyntax(parseNodeData, openBraceToken, statements || [], eatToken(SyntaxKind.CloseBraceToken)); + function parseFunctionBlock(_allowYield: boolean, equalsGreaterThanToken: ISyntaxToken): BlockSyntax { + var openBraceToken: ISyntaxToken; + return new BlockSyntax(parseNodeData, + equalsGreaterThanToken, + openBraceToken = eatToken(SyntaxKind.OpenBraceToken), + equalsGreaterThanToken || openBraceToken.fullWidth() > 0 + ? _allowYield ? enterYieldContextAnd(parseFunctionBlockStatements) : exitYieldContextAnd(parseFunctionBlockStatements) + : [], + eatToken(SyntaxKind.CloseBraceToken)); } function parseFunctionBlockStatements() { diff --git a/src/services/syntax/prettyPrinter.ts b/src/services/syntax/prettyPrinter.ts index 4bd57ffb62f..1cc81566f67 100644 --- a/src/services/syntax/prettyPrinter.ts +++ b/src/services/syntax/prettyPrinter.ts @@ -316,8 +316,8 @@ module TypeScript.PrettyPrinter { this.appendToken(node.closeBraceToken); } - private appendBlockOrSemicolon(body: BlockSyntax | ISyntaxToken) { - if (body.kind === SyntaxKind.Block) { + private appendBody(body: BlockSyntax | ExpressionBody | ISyntaxToken) { + if (body.kind === SyntaxKind.Block || body.kind === SyntaxKind.ExpressionBody) { this.ensureSpace(); visitNodeOrToken(this, body); } @@ -326,6 +326,12 @@ module TypeScript.PrettyPrinter { } } + public visitExpressionBody(node: ExpressionBody): void { + this.appendToken(node.equalsGreaterThanToken); + this.ensureSpace(); + visitNodeOrToken(this, node.expression); + } + public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void { this.appendSpaceList(node.modifiers); this.ensureSpace(); @@ -333,7 +339,7 @@ module TypeScript.PrettyPrinter { this.ensureSpace(); this.appendToken(node.identifier); this.appendNode(node.callSignature); - this.appendBlockOrSemicolon(node.body); + this.appendBody(node.body); } public visitVariableStatement(node: VariableStatementSyntax): void { @@ -666,7 +672,7 @@ module TypeScript.PrettyPrinter { public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void { this.appendToken(node.constructorKeyword); visitNodeOrToken(this, node.callSignature); - this.appendBlockOrSemicolon(node.body); + this.appendBody(node.body); } public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): void { @@ -681,7 +687,7 @@ module TypeScript.PrettyPrinter { this.ensureSpace(); visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); - this.appendBlockOrSemicolon(node.body); + this.appendBody(node.body); } public visitGetAccessor(node: GetAccessorSyntax): void { diff --git a/src/services/syntax/syntaxElement.ts b/src/services/syntax/syntaxElement.ts index fe582db6b57..36f2be43c90 100644 --- a/src/services/syntax/syntaxElement.ts +++ b/src/services/syntax/syntaxElement.ts @@ -435,7 +435,7 @@ module TypeScript { modifiers: ISyntaxToken[]; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax; + block: BlockSyntax | ExpressionBody | ISyntaxToken; } export interface ISwitchClauseSyntax extends ISyntaxNode { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index fe7d7459201..e2d0356bce2 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -160,7 +160,15 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + ] + }, + { + name: 'ExpressionBody', + baseType: 'ISyntaxNode', + children: [ + { name: 'equalsGreaterThanToken', isToken: true, }, + { name: 'expression', type: 'IExpressionSyntax' } ] }, { @@ -392,7 +400,8 @@ var definitions:ITypeDefinition[] = [ baseType: 'ISyntaxNode', interfaces: ['IStatementSyntax'], children: [ - { name: 'openBraceToken', isToken: true }, + { name: 'equalsGreaterThanToken', isToken: true, isOptional: 'true' }, + { name: 'openBraceToken', isToken: true, }, { name: 'statements', isList: true, elementType: 'IStatementSyntax' }, { name: 'closeBraceToken', isToken: true, excludeFromAST: true } ] @@ -635,7 +644,7 @@ var definitions:ITypeDefinition[] = [ { name: 'modifiers', isList: true, elementType: 'ISyntaxToken' }, { name: 'constructorKeyword', isToken: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -648,7 +657,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -661,7 +670,7 @@ var definitions:ITypeDefinition[] = [ { name: 'getKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -673,7 +682,7 @@ var definitions:ITypeDefinition[] = [ { name: 'setKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -910,7 +919,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' } + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -922,7 +931,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax' }] + { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true }] }, { name: 'EmptyStatementSyntax', diff --git a/src/services/syntax/syntaxInterfaces.generated.ts b/src/services/syntax/syntaxInterfaces.generated.ts index acb2f283902..105e2544c85 100644 --- a/src/services/syntax/syntaxInterfaces.generated.ts +++ b/src/services/syntax/syntaxInterfaces.generated.ts @@ -95,9 +95,9 @@ module TypeScript { asterixToken: ISyntaxToken; identifier: ISyntaxToken; callSignature: CallSignatureSyntax; - body: BlockSyntax | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface FunctionDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken): FunctionDeclarationSyntax } + export interface FunctionDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionDeclarationSyntax } export interface ModuleDeclarationSyntax extends ISyntaxNode, IModuleElementSyntax { modifiers: ISyntaxToken[]; @@ -154,9 +154,9 @@ module TypeScript { asterixToken: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - body: BlockSyntax | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface MemberFunctionDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken): MemberFunctionDeclarationSyntax } + export interface MemberFunctionDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): MemberFunctionDeclarationSyntax } export interface MemberVariableDeclarationSyntax extends ISyntaxNode, IMemberDeclarationSyntax { modifiers: ISyntaxToken[]; @@ -169,9 +169,9 @@ module TypeScript { modifiers: ISyntaxToken[]; constructorKeyword: ISyntaxToken; callSignature: CallSignatureSyntax; - body: BlockSyntax | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface ConstructorDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken): ConstructorDeclarationSyntax } + export interface ConstructorDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): ConstructorDeclarationSyntax } export interface IndexMemberDeclarationSyntax extends ISyntaxNode, IClassElementSyntax { modifiers: ISyntaxToken[]; @@ -185,18 +185,18 @@ module TypeScript { getKeyword: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax; + block: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface GetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax): GetAccessorSyntax } + export interface GetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): GetAccessorSyntax } export interface SetAccessorSyntax extends ISyntaxNode, IAccessorSyntax { modifiers: ISyntaxToken[]; setKeyword: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax; + block: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface SetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax): SetAccessorSyntax } + export interface SetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): SetAccessorSyntax } export interface PropertySignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { propertyName: IPropertyNameSyntax; @@ -234,11 +234,12 @@ module TypeScript { export interface MethodSignatureConstructor { new (data: number, propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax): MethodSignatureSyntax } export interface BlockSyntax extends ISyntaxNode, IStatementSyntax { + equalsGreaterThanToken: ISyntaxToken; openBraceToken: ISyntaxToken; statements: IStatementSyntax[]; closeBraceToken: ISyntaxToken; } - export interface BlockConstructor { new (data: number, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken): BlockSyntax } + export interface BlockConstructor { new (data: number, equalsGreaterThanToken: ISyntaxToken, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken): BlockSyntax } export interface IfStatementSyntax extends ISyntaxNode, IStatementSyntax { ifKeyword: ISyntaxToken; @@ -503,9 +504,9 @@ module TypeScript { asterixToken: ISyntaxToken; identifier: ISyntaxToken; callSignature: CallSignatureSyntax; - block: BlockSyntax; + block: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface FunctionExpressionConstructor { new (data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionExpressionSyntax } + export interface FunctionExpressionConstructor { new (data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionExpressionSyntax } export interface OmittedExpressionSyntax extends ISyntaxNode, IExpressionSyntax { } @@ -650,9 +651,9 @@ module TypeScript { asterixToken: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax; + block: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface FunctionPropertyAssignmentConstructor { new (data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax): FunctionPropertyAssignmentSyntax } + export interface FunctionPropertyAssignmentConstructor { new (data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionPropertyAssignmentSyntax } export interface ParameterSyntax extends ISyntaxNode { dotDotDotToken: ISyntaxToken; @@ -676,6 +677,12 @@ module TypeScript { } export interface TypeAnnotationConstructor { new (data: number, colonToken: ISyntaxToken, type: ITypeSyntax): TypeAnnotationSyntax } + export interface ExpressionBody extends ISyntaxNode { + equalsGreaterThanToken: ISyntaxToken; + expression: IExpressionSyntax; + } + export interface ExpressionBodyConstructor { new (data: number, equalsGreaterThanToken: ISyntaxToken, expression: IExpressionSyntax): ExpressionBody } + export interface ComputedPropertyNameSyntax extends ISyntaxNode, IPropertyNameSyntax { openBracketToken: ISyntaxToken; expression: IExpressionSyntax; diff --git a/src/services/syntax/syntaxKind.ts b/src/services/syntax/syntaxKind.ts index 947f23b137f..896a3239146 100644 --- a/src/services/syntax/syntaxKind.ts +++ b/src/services/syntax/syntaxKind.ts @@ -268,6 +268,7 @@ module TypeScript { Parameter, EnumElement, TypeAnnotation, + ExpressionBody, ComputedPropertyName, ExternalModuleReference, ModuleNameModuleReference, diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index b9e478154db..9e7b3da32ad 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -238,7 +238,7 @@ module TypeScript { } } - export var FunctionDeclarationSyntax: FunctionDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken) { + export var FunctionDeclarationSyntax: FunctionDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.functionKeyword = functionKeyword, @@ -406,7 +406,7 @@ module TypeScript { } } - export var MemberFunctionDeclarationSyntax: MemberFunctionDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken) { + export var MemberFunctionDeclarationSyntax: MemberFunctionDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.asterixToken = asterixToken, @@ -450,7 +450,7 @@ module TypeScript { } } - export var ConstructorDeclarationSyntax: ConstructorDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ISyntaxToken) { + export var ConstructorDeclarationSyntax: ConstructorDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.constructorKeyword = constructorKeyword, @@ -491,7 +491,7 @@ module TypeScript { } } - export var GetAccessorSyntax: GetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax) { + export var GetAccessorSyntax: GetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.getKeyword = getKeyword, @@ -502,7 +502,7 @@ module TypeScript { getKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, - block.parent = this; + block && (block.parent = this); }; GetAccessorSyntax.prototype.kind = SyntaxKind.GetAccessor; GetAccessorSyntax.prototype.childCount = 5; @@ -516,7 +516,7 @@ module TypeScript { } } - export var SetAccessorSyntax: SetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax) { + export var SetAccessorSyntax: SetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.setKeyword = setKeyword, @@ -527,7 +527,7 @@ module TypeScript { setKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, - block.parent = this; + block && (block.parent = this); }; SetAccessorSyntax.prototype.kind = SyntaxKind.SetAccessor; SetAccessorSyntax.prototype.childCount = 5; @@ -636,22 +636,25 @@ module TypeScript { } } - export var BlockSyntax: BlockConstructor = function(data: number, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) { + export var BlockSyntax: BlockConstructor = function(data: number, equalsGreaterThanToken: ISyntaxToken, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } + this.equalsGreaterThanToken = equalsGreaterThanToken, this.openBraceToken = openBraceToken, this.statements = statements, this.closeBraceToken = closeBraceToken, + equalsGreaterThanToken && (equalsGreaterThanToken.parent = this), openBraceToken.parent = this, statements.parent = this, closeBraceToken.parent = this; }; BlockSyntax.prototype.kind = SyntaxKind.Block; - BlockSyntax.prototype.childCount = 3; + BlockSyntax.prototype.childCount = 4; BlockSyntax.prototype.childAt = function(index: number): ISyntaxElement { switch (index) { - case 0: return this.openBraceToken; - case 1: return this.statements; - case 2: return this.closeBraceToken; + case 0: return this.equalsGreaterThanToken; + case 1: return this.openBraceToken; + case 2: return this.statements; + case 3: return this.closeBraceToken; } } @@ -1361,7 +1364,7 @@ module TypeScript { } } - export var FunctionExpressionSyntax: FunctionExpressionConstructor = function(data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) { + export var FunctionExpressionSyntax: FunctionExpressionConstructor = function(data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.functionKeyword = functionKeyword, this.asterixToken = asterixToken, @@ -1372,7 +1375,7 @@ module TypeScript { asterixToken && (asterixToken.parent = this), identifier && (identifier.parent = this), callSignature.parent = this, - block.parent = this; + block && (block.parent = this); }; FunctionExpressionSyntax.prototype.kind = SyntaxKind.FunctionExpression; FunctionExpressionSyntax.prototype.childCount = 5; @@ -1760,7 +1763,7 @@ module TypeScript { } } - export var FunctionPropertyAssignmentSyntax: FunctionPropertyAssignmentConstructor = function(data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax) { + export var FunctionPropertyAssignmentSyntax: FunctionPropertyAssignmentConstructor = function(data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.asterixToken = asterixToken, this.propertyName = propertyName, @@ -1769,7 +1772,7 @@ module TypeScript { asterixToken && (asterixToken.parent = this), propertyName.parent = this, callSignature.parent = this, - block.parent = this; + block && (block.parent = this); }; FunctionPropertyAssignmentSyntax.prototype.kind = SyntaxKind.FunctionPropertyAssignment; FunctionPropertyAssignmentSyntax.prototype.childCount = 4; @@ -1842,6 +1845,22 @@ module TypeScript { } } + export var ExpressionBody: ExpressionBodyConstructor = function(data: number, equalsGreaterThanToken: ISyntaxToken, expression: IExpressionSyntax) { + if (data) { this.__data = data; } + this.equalsGreaterThanToken = equalsGreaterThanToken, + this.expression = expression, + equalsGreaterThanToken.parent = this, + expression.parent = this; + }; + ExpressionBody.prototype.kind = SyntaxKind.ExpressionBody; + ExpressionBody.prototype.childCount = 2; + ExpressionBody.prototype.childAt = function(index: number): ISyntaxElement { + switch (index) { + case 0: return this.equalsGreaterThanToken; + case 1: return this.expression; + } + } + export var ComputedPropertyNameSyntax: ComputedPropertyNameConstructor = function(data: number, openBracketToken: ISyntaxToken, expression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBracketToken = openBracketToken, diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index e3f12a67e64..6f3399c7558 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -635,13 +635,23 @@ module TypeScript { this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkGetAccessorParameter(node) || - this.checkForDisallowedTemplatePropertyName(node.propertyName)) { + this.checkForDisallowedTemplatePropertyName(node.propertyName) || + this.checkForSemicolonInsteadOfBlock(node.block)) { return; } super.visitGetAccessor(node); } + private checkForSemicolonInsteadOfBlock(node: BlockSyntax | ExpressionBody | ISyntaxToken): boolean { + if (node.kind === SyntaxKind.SemicolonToken) { + this.pushDiagnostic(node, DiagnosticCode._0_expected, ["{"]); + return true; + } + + return false; + } + private checkForDisallowedSetAccessorTypeAnnotation(accessor: SetAccessorSyntax): boolean { if (accessor.callSignature.typeAnnotation) { this.pushDiagnostic(accessor.callSignature.typeAnnotation, DiagnosticCode.Type_annotation_cannot_appear_on_a_set_accessor); @@ -712,7 +722,8 @@ module TypeScript { this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkForDisallowedSetAccessorTypeAnnotation(node) || this.checkSetAccessorParameter(node) || - this.checkForDisallowedTemplatePropertyName(node.propertyName)) { + this.checkForDisallowedTemplatePropertyName(node.propertyName) || + this.checkForSemicolonInsteadOfBlock(node.block)) { return; } @@ -918,7 +929,8 @@ module TypeScript { } public visitBlock(node: BlockSyntax): void { - if (this.checkForBlockInAmbientContext(node)) { + if (this.checkForBlockInAmbientContext(node) || + this.checkForMalformedBlock(node)) { return; } @@ -928,6 +940,15 @@ module TypeScript { this.inBlock = savedInBlock; } + public checkForMalformedBlock(node: BlockSyntax): boolean { + if (node.equalsGreaterThanToken || node.openBraceToken === undefined) { + this.pushDiagnostic(firstToken(node), DiagnosticCode._0_expected, ["{"]); + return true; + } + + return false; + } + private checkForBlockInAmbientContext(node: BlockSyntax): boolean { if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { // Provide a specialized message for a block as a statement versus the block as a @@ -954,6 +975,11 @@ module TypeScript { return false; } + public visitExpressionBody(node: ExpressionBody): void { + // These are always errors. So no need to ever recurse on them. + this.pushDiagnostic(node.equalsGreaterThanToken, DiagnosticCode._0_expected, ["{"]); + } + public visitBreakStatement(node: BreakStatementSyntax): void { if (this.checkForStatementInAmbientContxt(node) || this.checkBreakStatementTarget(node)) { @@ -1374,7 +1400,8 @@ module TypeScript { } public visitFunctionExpression(node: FunctionExpressionSyntax): void { - if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + if (this.checkForDisallowedEvalOrArguments(node, node.identifier) || + this.checkForSemicolonInsteadOfBlock(node.block)) { return; } @@ -1382,7 +1409,8 @@ module TypeScript { } public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void { - if (this.checkForDisallowedTemplatePropertyName(node.propertyName)) { + if (this.checkForDisallowedTemplatePropertyName(node.propertyName) || + this.checkForSemicolonInsteadOfBlock(node.block)) { return; } diff --git a/src/services/syntax/syntaxVisitor.generated.ts b/src/services/syntax/syntaxVisitor.generated.ts index 57cea0cbe95..2fbc2ccd0b8 100644 --- a/src/services/syntax/syntaxVisitor.generated.ts +++ b/src/services/syntax/syntaxVisitor.generated.ts @@ -94,6 +94,7 @@ module TypeScript { case SyntaxKind.Parameter: return visitor.visitParameter(element); case SyntaxKind.EnumElement: return visitor.visitEnumElement(element); case SyntaxKind.TypeAnnotation: return visitor.visitTypeAnnotation(element); + case SyntaxKind.ExpressionBody: return visitor.visitExpressionBody(element); case SyntaxKind.ComputedPropertyName: return visitor.visitComputedPropertyName(element); case SyntaxKind.ExternalModuleReference: return visitor.visitExternalModuleReference(element); case SyntaxKind.ModuleNameModuleReference: return visitor.visitModuleNameModuleReference(element); @@ -193,6 +194,7 @@ module TypeScript { visitParameter(node: ParameterSyntax): any; visitEnumElement(node: EnumElementSyntax): any; visitTypeAnnotation(node: TypeAnnotationSyntax): any; + visitExpressionBody(node: ExpressionBody): any; visitComputedPropertyName(node: ComputedPropertyNameSyntax): any; visitExternalModuleReference(node: ExternalModuleReferenceSyntax): any; visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): any; diff --git a/src/services/syntax/syntaxWalker.generated.ts b/src/services/syntax/syntaxWalker.generated.ts index 7a095aec157..3a937493635 100644 --- a/src/services/syntax/syntaxWalker.generated.ts +++ b/src/services/syntax/syntaxWalker.generated.ts @@ -222,6 +222,7 @@ module TypeScript { } public visitBlock(node: BlockSyntax): void { + this.visitOptionalToken(node.equalsGreaterThanToken); this.visitToken(node.openBraceToken); this.visitList(node.statements); this.visitToken(node.closeBraceToken); @@ -603,6 +604,11 @@ module TypeScript { visitNodeOrToken(this, node.type); } + public visitExpressionBody(node: ExpressionBody): void { + this.visitToken(node.equalsGreaterThanToken); + visitNodeOrToken(this, node.expression); + } + public visitComputedPropertyName(node: ComputedPropertyNameSyntax): void { this.visitToken(node.openBracketToken); visitNodeOrToken(this, node.expression); From af2dd5ce6941220d96e5d30cd4bae7fc39d4fb62 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sat, 22 Nov 2014 22:33:25 -0800 Subject: [PATCH 150/178] Rename 'block' to 'body'. Conflicts: src/services/syntax/SyntaxGenerator.js.map --- src/services/syntax/SyntaxGenerator.js | 8 ++--- src/services/syntax/SyntaxGenerator.js.map | 4 +++ src/services/syntax/prettyPrinter.ts | 8 ++--- src/services/syntax/syntaxElement.ts | 2 +- src/services/syntax/syntaxGenerator.ts | 8 ++--- .../syntax/syntaxInterfaces.generated.ts | 16 +++++----- .../syntax/syntaxNodes.concrete.generated.ts | 32 +++++++++---------- src/services/syntax/syntaxTree.ts | 16 ++++++---- src/services/syntax/syntaxWalker.generated.ts | 8 ++--- 9 files changed, 55 insertions(+), 47 deletions(-) diff --git a/src/services/syntax/SyntaxGenerator.js b/src/services/syntax/SyntaxGenerator.js index 861a22a43d5..6e1039cb8b0 100644 --- a/src/services/syntax/SyntaxGenerator.js +++ b/src/services/syntax/SyntaxGenerator.js @@ -1524,7 +1524,7 @@ var definitions = [ { name: 'getKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -1536,7 +1536,7 @@ var definitions = [ { name: 'setKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -1773,7 +1773,7 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -1785,7 +1785,7 @@ var definitions = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { diff --git a/src/services/syntax/SyntaxGenerator.js.map b/src/services/syntax/SyntaxGenerator.js.map index c4c6378fd51..662350f9032 100644 --- a/src/services/syntax/SyntaxGenerator.js.map +++ b/src/services/syntax/SyntaxGenerator.js.map @@ -9,6 +9,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< Updated upstream {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} ======= @@ -47,3 +48,6 @@ ======= {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} >>>>>>> e97cba0... Make parser more lenient with what it allows as the body of a function. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} +>>>>>>> f41e8c3... Rename 'block' to 'body'. diff --git a/src/services/syntax/prettyPrinter.ts b/src/services/syntax/prettyPrinter.ts index 1cc81566f67..c75136e89f9 100644 --- a/src/services/syntax/prettyPrinter.ts +++ b/src/services/syntax/prettyPrinter.ts @@ -698,7 +698,7 @@ module TypeScript.PrettyPrinter { visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); this.ensureSpace(); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitSetAccessor(node: SetAccessorSyntax): void { @@ -709,7 +709,7 @@ module TypeScript.PrettyPrinter { visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature) this.ensureSpace(); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void { @@ -942,7 +942,7 @@ module TypeScript.PrettyPrinter { visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); this.ensureSpace(); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitFunctionExpression(node: FunctionExpressionSyntax): void { @@ -955,7 +955,7 @@ module TypeScript.PrettyPrinter { visitNodeOrToken(this, node.callSignature); this.ensureSpace(); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitEmptyStatement(node: EmptyStatementSyntax): void { diff --git a/src/services/syntax/syntaxElement.ts b/src/services/syntax/syntaxElement.ts index 36f2be43c90..fe10dcb23f9 100644 --- a/src/services/syntax/syntaxElement.ts +++ b/src/services/syntax/syntaxElement.ts @@ -435,7 +435,7 @@ module TypeScript { modifiers: ISyntaxToken[]; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax | ExpressionBody | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } export interface ISwitchClauseSyntax extends ISyntaxNode { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index e2d0356bce2..514a3220ab6 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -670,7 +670,7 @@ var definitions:ITypeDefinition[] = [ { name: 'getKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -682,7 +682,7 @@ var definitions:ITypeDefinition[] = [ { name: 'setKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -919,7 +919,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -931,7 +931,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'block', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true }] + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true }] }, { name: 'EmptyStatementSyntax', diff --git a/src/services/syntax/syntaxInterfaces.generated.ts b/src/services/syntax/syntaxInterfaces.generated.ts index 105e2544c85..6ca28f1b819 100644 --- a/src/services/syntax/syntaxInterfaces.generated.ts +++ b/src/services/syntax/syntaxInterfaces.generated.ts @@ -185,18 +185,18 @@ module TypeScript { getKeyword: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax | ExpressionBody | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface GetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): GetAccessorSyntax } + export interface GetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): GetAccessorSyntax } export interface SetAccessorSyntax extends ISyntaxNode, IAccessorSyntax { modifiers: ISyntaxToken[]; setKeyword: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax | ExpressionBody | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface SetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): SetAccessorSyntax } + export interface SetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): SetAccessorSyntax } export interface PropertySignatureSyntax extends ISyntaxNode, ITypeMemberSyntax { propertyName: IPropertyNameSyntax; @@ -504,9 +504,9 @@ module TypeScript { asterixToken: ISyntaxToken; identifier: ISyntaxToken; callSignature: CallSignatureSyntax; - block: BlockSyntax | ExpressionBody | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface FunctionExpressionConstructor { new (data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionExpressionSyntax } + export interface FunctionExpressionConstructor { new (data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionExpressionSyntax } export interface OmittedExpressionSyntax extends ISyntaxNode, IExpressionSyntax { } @@ -651,9 +651,9 @@ module TypeScript { asterixToken: ISyntaxToken; propertyName: IPropertyNameSyntax; callSignature: CallSignatureSyntax; - block: BlockSyntax | ExpressionBody | ISyntaxToken; + body: BlockSyntax | ExpressionBody | ISyntaxToken; } - export interface FunctionPropertyAssignmentConstructor { new (data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionPropertyAssignmentSyntax } + export interface FunctionPropertyAssignmentConstructor { new (data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken): FunctionPropertyAssignmentSyntax } export interface ParameterSyntax extends ISyntaxNode { dotDotDotToken: ISyntaxToken; diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index 9e7b3da32ad..7e35716659d 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -491,18 +491,18 @@ module TypeScript { } } - export var GetAccessorSyntax: GetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var GetAccessorSyntax: GetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.getKeyword = getKeyword, this.propertyName = propertyName, this.callSignature = callSignature, - this.block = block, + this.body = body, modifiers.parent = this, getKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, - block && (block.parent = this); + body && (body.parent = this); }; GetAccessorSyntax.prototype.kind = SyntaxKind.GetAccessor; GetAccessorSyntax.prototype.childCount = 5; @@ -512,22 +512,22 @@ module TypeScript { case 1: return this.getKeyword; case 2: return this.propertyName; case 3: return this.callSignature; - case 4: return this.block; + case 4: return this.body; } } - export var SetAccessorSyntax: SetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var SetAccessorSyntax: SetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.setKeyword = setKeyword, this.propertyName = propertyName, this.callSignature = callSignature, - this.block = block, + this.body = body, modifiers.parent = this, setKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, - block && (block.parent = this); + body && (body.parent = this); }; SetAccessorSyntax.prototype.kind = SyntaxKind.SetAccessor; SetAccessorSyntax.prototype.childCount = 5; @@ -537,7 +537,7 @@ module TypeScript { case 1: return this.setKeyword; case 2: return this.propertyName; case 3: return this.callSignature; - case 4: return this.block; + case 4: return this.body; } } @@ -1364,18 +1364,18 @@ module TypeScript { } } - export var FunctionExpressionSyntax: FunctionExpressionConstructor = function(data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var FunctionExpressionSyntax: FunctionExpressionConstructor = function(data: number, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.functionKeyword = functionKeyword, this.asterixToken = asterixToken, this.identifier = identifier, this.callSignature = callSignature, - this.block = block, + this.body = body, functionKeyword.parent = this, asterixToken && (asterixToken.parent = this), identifier && (identifier.parent = this), callSignature.parent = this, - block && (block.parent = this); + body && (body.parent = this); }; FunctionExpressionSyntax.prototype.kind = SyntaxKind.FunctionExpression; FunctionExpressionSyntax.prototype.childCount = 5; @@ -1385,7 +1385,7 @@ module TypeScript { case 1: return this.asterixToken; case 2: return this.identifier; case 3: return this.callSignature; - case 4: return this.block; + case 4: return this.body; } } @@ -1763,16 +1763,16 @@ module TypeScript { } } - export var FunctionPropertyAssignmentSyntax: FunctionPropertyAssignmentConstructor = function(data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, block: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var FunctionPropertyAssignmentSyntax: FunctionPropertyAssignmentConstructor = function(data: number, asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.asterixToken = asterixToken, this.propertyName = propertyName, this.callSignature = callSignature, - this.block = block, + this.body = body, asterixToken && (asterixToken.parent = this), propertyName.parent = this, callSignature.parent = this, - block && (block.parent = this); + body && (body.parent = this); }; FunctionPropertyAssignmentSyntax.prototype.kind = SyntaxKind.FunctionPropertyAssignment; FunctionPropertyAssignmentSyntax.prototype.childCount = 4; @@ -1781,7 +1781,7 @@ module TypeScript { case 0: return this.asterixToken; case 1: return this.propertyName; case 2: return this.callSignature; - case 3: return this.block; + case 3: return this.body; } } diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index 6f3399c7558..cf20d2b1c75 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -636,15 +636,19 @@ module TypeScript { this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkGetAccessorParameter(node) || this.checkForDisallowedTemplatePropertyName(node.propertyName) || - this.checkForSemicolonInsteadOfBlock(node.block)) { + this.checkForSemicolonInsteadOfBlock(node, node.body)) { return; } super.visitGetAccessor(node); } - private checkForSemicolonInsteadOfBlock(node: BlockSyntax | ExpressionBody | ISyntaxToken): boolean { - if (node.kind === SyntaxKind.SemicolonToken) { + private checkForSemicolonInsteadOfBlock(parent: ISyntaxNode, node: BlockSyntax | ExpressionBody | ISyntaxToken): boolean { + if (node === undefined) { + this.pushDiagnosticAt(fullEnd(parent), 0, DiagnosticCode._0_expected, ["{"]); + return true; + } + else if (node.kind === SyntaxKind.SemicolonToken) { this.pushDiagnostic(node, DiagnosticCode._0_expected, ["{"]); return true; } @@ -723,7 +727,7 @@ module TypeScript { this.checkForDisallowedSetAccessorTypeAnnotation(node) || this.checkSetAccessorParameter(node) || this.checkForDisallowedTemplatePropertyName(node.propertyName) || - this.checkForSemicolonInsteadOfBlock(node.block)) { + this.checkForSemicolonInsteadOfBlock(node, node.body)) { return; } @@ -1401,7 +1405,7 @@ module TypeScript { public visitFunctionExpression(node: FunctionExpressionSyntax): void { if (this.checkForDisallowedEvalOrArguments(node, node.identifier) || - this.checkForSemicolonInsteadOfBlock(node.block)) { + this.checkForSemicolonInsteadOfBlock(node, node.body)) { return; } @@ -1410,7 +1414,7 @@ module TypeScript { public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void { if (this.checkForDisallowedTemplatePropertyName(node.propertyName) || - this.checkForSemicolonInsteadOfBlock(node.block)) { + this.checkForSemicolonInsteadOfBlock(node, node.body)) { return; } diff --git a/src/services/syntax/syntaxWalker.generated.ts b/src/services/syntax/syntaxWalker.generated.ts index 3a937493635..a9b03349102 100644 --- a/src/services/syntax/syntaxWalker.generated.ts +++ b/src/services/syntax/syntaxWalker.generated.ts @@ -180,7 +180,7 @@ module TypeScript { this.visitToken(node.getKeyword); visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitSetAccessor(node: SetAccessorSyntax): void { @@ -188,7 +188,7 @@ module TypeScript { this.visitToken(node.setKeyword); visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitPropertySignature(node: PropertySignatureSyntax): void { @@ -457,7 +457,7 @@ module TypeScript { this.visitOptionalToken(node.asterixToken); this.visitOptionalToken(node.identifier); visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitOmittedExpression(node: OmittedExpressionSyntax): void { @@ -582,7 +582,7 @@ module TypeScript { this.visitOptionalToken(node.asterixToken); visitNodeOrToken(this, node.propertyName); visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + visitNodeOrToken(this, node.body); } public visitParameter(node: ParameterSyntax): void { From e2eec0e15c5bc6c3ff5614fbf2878ab92297b0d0 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sun, 23 Nov 2014 12:23:19 -0800 Subject: [PATCH 151/178] Added to comment. --- src/services/services.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 587b07390a2..5ad63e50811 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3923,7 +3923,9 @@ module ts { // When a name gets interned into a SourceFile's 'identifiers' Map, // its name is escaped and stored in the same way its symbol name/identifier - // name should be stored. + // name should be stored. Function expressions, however, are a special case, + // because despite sometimes having a name, the binder unconditionally binds them + // to a symbol with the name "__function". if (functionExpression && functionExpression.name) { var name = functionExpression.name.text; } @@ -5400,7 +5402,7 @@ module ts { getFormattingEditsForDocument, getFormattingEditsAfterKeystroke, getEmitOutput, - getSourceFile: getCurrentSourceFile, + getSourceFile: getCurrentSourceFile, }; } From 76d83ee6242c0af71752d64671a155cf1f637cd5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 23 Nov 2014 13:23:44 -0800 Subject: [PATCH 152/178] Don't explicitly make diagnostics in the parser. --- src/services/syntax/parser.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 54ca007fe46..ee5a03253cb 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -2889,13 +2889,10 @@ module TypeScript.Parser { // we'll bail out here and give a poor error message when we try to parse this // as an arithmetic expression. if (isDot) { - // A parameter list must follow a generic type argument list. - var diagnostic = new Diagnostic(fileName, source.text.lineMap(), start(token0, source.text), width(token0), - DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, undefined); - addDiagnostic(diagnostic); - return new ArgumentListSyntax(parseNodeData, typeArgumentList, - createEmptyToken(SyntaxKind.OpenParenToken), [], createEmptyToken(SyntaxKind.CloseParenToken)); + createMissingToken(SyntaxKind.OpenParenToken, undefined, DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected), + [], + eatToken(SyntaxKind.CloseParenToken)); } else { Debug.assert(token0.kind === SyntaxKind.OpenParenToken); From 71a1f13226a6491e6974c33140a8e6f7c6cec9ec Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 23 Nov 2014 13:31:20 -0800 Subject: [PATCH 153/178] Don't report a diagnostic explicitly. --- src/services/syntax/parser.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index ee5a03253cb..d9ae5891642 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -563,8 +563,8 @@ module TypeScript.Parser { return Syntax.emptyToken(kind, fullStart); } - function createMissingToken(expectedKind: SyntaxKind, actual: ISyntaxToken, diagnosticCode?: string): ISyntaxToken { - var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode); + function createMissingToken(expectedKind: SyntaxKind, actual: ISyntaxToken, diagnosticCode?: string, args?: any[]): ISyntaxToken { + var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode, args); addDiagnostic(diagnostic); // The missing token will be at the full start of the current token. That way empty tokens @@ -572,10 +572,9 @@ module TypeScript.Parser { return createEmptyToken(expectedKind); } - function getExpectedTokenDiagnostic(expectedKind: SyntaxKind, actual?: ISyntaxToken, diagnosticCode?: string): Diagnostic { + function getExpectedTokenDiagnostic(expectedKind: SyntaxKind, actual?: ISyntaxToken, diagnosticCode?: string, args?: any[]): Diagnostic { var token = currentToken(); - var args: any[] = undefined; // If a specialized diagnostic message was provided, just use that. if (!diagnosticCode) { // They wanted something specific, just report that that token was missing. @@ -3094,9 +3093,7 @@ module TypeScript.Parser { token = consumeToken(token); } else { - var diagnostic = getExpectedTokenDiagnostic(SyntaxKind.CloseBraceToken); - addDiagnostic(diagnostic); - token = createEmptyToken(SyntaxKind.TemplateEndToken); + token = createMissingToken(SyntaxKind.TemplateEndToken, undefined, DiagnosticCode._0_expected, ["{"]); } return new TemplateClauseSyntax(parseNodeData, expression, token); From 22e485bee556a5c02800fcefeb259c6cf9021fb7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 13:48:21 -0800 Subject: [PATCH 154/178] Rename context flag. --- src/compiler/parser.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 50672e136a7..12a9a8cd7b1 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -850,7 +850,7 @@ module ts { var nodeCount = 0; var lineStarts: number[]; - var isInStrictMode = false; + var strictModeContext = false; var lookAheadMode = LookAheadMode.NotLookingAhead; function getLineStarts(): number[] { @@ -978,7 +978,7 @@ module ts { } function isIdentifier(): boolean { - return token === SyntaxKind.Identifier || (isInStrictMode ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord); + return token === SyntaxKind.Identifier || (strictModeContext ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord); } function parseExpected(t: SyntaxKind): boolean { @@ -1035,7 +1035,7 @@ module ts { function finishNode(node: T): T { node.end = scanner.getStartPos(); - if (isInStrictMode) { + if (strictModeContext) { node.flags |= NodeFlags.ParsedInStrictMode; } @@ -1224,16 +1224,16 @@ module ts { parsingContext |= 1 << kind; var result = >[]; result.pos = getNodePos(); - var saveIsInStrictMode = isInStrictMode; + var savedStrictModeContext = strictModeContext; while (!isListTerminator(kind)) { if (isListElement(kind, /* inErrorRecovery */ false)) { var element = parseElement(); result.push(element); // test elements only if we are not already in strict mode - if (!isInStrictMode && checkForStrictMode) { + if (!strictModeContext && checkForStrictMode) { if (isPrologueDirective(element)) { if (isUseStrictPrologueDirective(element)) { - isInStrictMode = true; + strictModeContext = true; checkForStrictMode = false; } } @@ -1250,7 +1250,7 @@ module ts { nextToken(); } } - isInStrictMode = saveIsInStrictMode; + strictModeContext = savedStrictModeContext; result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; From f6c1fe710e63edb52a2e01daf792d054c3a49cf7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 14:15:57 -0800 Subject: [PATCH 155/178] Move 'disallowIn' into being an ambient parser context flag. This greatly simplifies how we will do incremental parsing. --- src/compiler/parser.ts | 211 ++++++++++++++++++++++++++++------------- src/compiler/types.ts | 6 +- 2 files changed, 151 insertions(+), 66 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 12a9a8cd7b1..4fc47d405d5 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -850,9 +850,82 @@ module ts { var nodeCount = 0; var lineStarts: number[]; - var strictModeContext = false; var lookAheadMode = LookAheadMode.NotLookingAhead; + // Flags that dictate what parsing context we're in. For example: + // Whether or not we are in strict parsing mode. All that changes in strict parsing mode is + // that some tokens that would be considered identifiers may be considered keywords. When + // rewinding, we need to store and restore this as the mode may have changed. + // + // When adding more parser context flags, consider which is the more common case that the + // flag will be in. This should be hte 'false' state for that flag. The reason for this is + // that we don't store data in our nodes unless the value is in the *non-default* state. So, + // for example, more often than code 'allows-in' (or doesn't 'disallow-in'). We opt for + // 'disallow-in' set to 'false'. Otherwise, if we had 'allowsIn' set to 'true', then almost + // all nodes would need extra state on them to store this info. + // + // Note: 'allowIn' and 'allowYield' track 1:1 with the [in] and [yield] concepts in the ES6 + // grammar specification. + // + // An important thing about these context concepts. By default they are effectively inherited + // while parsing through every grammar production. i.e. if you don't change them, then when + // you parse a sub-production, it will have the same context values as hte parent production. + // This is great most of the time. After all, consider all the 'expression' grammar productions + // and how nearly all of them pass along the 'in' and 'yield' context values: + // + // EqualityExpression[In, Yield] : + // RelationalExpression[?In, ?Yield] + // EqualityExpression[?In, ?Yield] == RelationalExpression[?In, ?Yield] + // EqualityExpression[?In, ?Yield] != RelationalExpression[?In, ?Yield] + // EqualityExpression[?In, ?Yield] === RelationalExpression[?In, ?Yield] + // EqualityExpression[?In, ?Yield] !== RelationalExpression[?In, ?Yield] + // + // Where you have to be careful is then understanding what the points are in the grammar + // where the values are *not* passed along. For example: + // + // SingleNameBinding[Yield,GeneratorParameter] + // [+GeneratorParameter]BindingIdentifier[Yield] Initializer[In]opt + // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt + // + // Here this is saying that if the GeneratorParameter context flag is set, that we should + // explicitly set the 'yield' context flag to false before calling into the BindingIdentifier + // and we should explicitly unset the 'yield' context flag before calling into the Initializer. + // production. Conversely, if the GeneratorParameter context flag is not set, then we + // should leave the 'yield' context flag alone. + // + // Getting this all correct is tricky and requires careful reading of the grammar to + // understand when these values should be changed versus when they should be inherited. + var strictModeContext = false; + var disallowInContext = false; + + function allowInAnd(func: () => T): T { + if (disallowInContext) { + setDisallowInContext(false); + var result = func(); + setDisallowInContext(true); + return result; + } + + // no need to do anything special if 'in' is already allowed. + return func(); + } + + function disallowInAnd(func: () => T): T { + if (disallowInContext) { + // no need to do anything special if 'in' is already disallowed. + return func(); + } + + setDisallowInContext(true); + var result = func(); + setDisallowInContext(false); + return result; + } + + function setDisallowInContext(val: boolean) { + disallowInContext = val; + } + function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); } @@ -1036,7 +1109,11 @@ module ts { node.end = scanner.getStartPos(); if (strictModeContext) { - node.flags |= NodeFlags.ParsedInStrictMode; + node.flags |= NodeFlags.ParsedInStrictModeContext; + } + + if (disallowInContext) { + node.flags |= NodeFlags.ParsedInDisallowInContext } return node; @@ -1361,7 +1438,7 @@ module ts { function parseTemplateSpan(): TemplateSpan { var span = createNode(SyntaxKind.TemplateSpan); - span.expression = parseExpression(/*noIn*/ false); + span.expression = allowInAnd(parseExpression); var literal: LiteralExpression; @@ -1833,15 +1910,19 @@ module ts { return token !== SyntaxKind.OpenBraceToken && token !== SyntaxKind.FunctionKeyword && isStartOfExpression(); } - function parseExpression(noIn?: boolean): Expression { - var expr = parseAssignmentExpression(noIn); + function parseExpression(): Expression { + // Expression[in]: + // AssignmentExpression[in] + // Expression[in] , AssignmentExpression[in] + + var expr = parseAssignmentExpression(); while (parseOptional(SyntaxKind.CommaToken)) { - expr = makeBinaryExpression(expr, SyntaxKind.CommaToken, parseAssignmentExpression(noIn)); + expr = makeBinaryExpression(expr, SyntaxKind.CommaToken, parseAssignmentExpression()); } return expr; } - function parseInitializer(inParameter: boolean, noIn?: boolean): Expression { + function parseInitializer(inParameter: boolean): Expression { if (token !== SyntaxKind.EqualsToken) { // It's not uncommon during typing for the user to miss writing the '=' token. Check if // there is no newline after the last token and if we're on an expression. If so, parse @@ -1858,11 +1939,14 @@ module ts { } } + // Initializer[In, Yield] : + // = AssignmentExpression[?In, ?Yield] + parseExpected(SyntaxKind.EqualsToken); - return parseAssignmentExpression(noIn); + return parseAssignmentExpression(); } - function parseAssignmentExpression(noIn?: boolean): Expression { + function parseAssignmentExpression(): Expression { // Augmented by TypeScript: // // AssignmentExpression[in]: @@ -1885,7 +1969,7 @@ module ts { // Now try to handle the rest of the cases. First, see if we can parse out up to and // including a conditional expression. - var expr = parseConditionalExpression(noIn); + var expr = parseConditionalExpression(); // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single @@ -1900,7 +1984,7 @@ module ts { if (isLeftHandSideExpression(expr) && isAssignmentOperator(token)) { var operator = token; nextToken(); - return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); + return makeBinaryExpression(expr, operator, parseAssignmentExpression()); } // otherwise this was production '1'. Return whatever we parsed so far. @@ -1922,7 +2006,7 @@ module ts { var signature = { parameters: parameters }; - return parseArrowExpressionTail(identifier.pos, signature, /*noIn:*/ false); + return parseArrowExpressionTail(identifier.pos, signature); } function tryParseParenthesizedArrowFunctionExpression(): Expression { @@ -1941,7 +2025,7 @@ module ts { // If we have an arrow, then try to parse the body. // Even if not, try to parse if we have an opening brace, just in case we're in an error state. if (parseExpected(SyntaxKind.EqualsGreaterThanToken) || token === SyntaxKind.OpenBraceToken) { - return parseArrowExpressionTail(pos, sig, /* noIn: */ false); + return parseArrowExpressionTail(pos, sig); } else { // If not, we're probably better off bailing out and returning a bogus function expression. @@ -1954,7 +2038,7 @@ module ts { var sig = tryParseSignatureIfArrowOrBraceFollows(); if (sig) { parseExpected(SyntaxKind.EqualsGreaterThanToken); - return parseArrowExpressionTail(pos, sig, /*noIn:*/ false); + return parseArrowExpressionTail(pos, sig); } else { return undefined; @@ -2057,7 +2141,7 @@ module ts { }); } - function parseArrowExpressionTail(pos: number, sig: ParsedSignature, noIn: boolean): FunctionExpression { + function parseArrowExpressionTail(pos: number, sig: ParsedSignature): FunctionExpression { var body: Node; if (token === SyntaxKind.OpenBraceToken) { @@ -2081,37 +2165,36 @@ module ts { body = parseFunctionBlock(/* ignoreMissingOpenBrace */ true); } else { - body = parseAssignmentExpression(noIn); + body = parseAssignmentExpression(); } return makeFunctionExpression(SyntaxKind.ArrowFunction, pos, /* name */ undefined, sig, body); } - function parseConditionalExpression(noIn?: boolean): Expression { - var expr = parseBinaryExpression(noIn); + function parseConditionalExpression(): Expression { + // Note: we explicitly 'allowIn' in the whenTrue part of the condition expression, and + // we do not that for the 'whenFalse' part. + + var expr = parseBinaryOperators(parseUnaryExpression(), /*minPrecedence:*/ 0); while (parseOptional(SyntaxKind.QuestionToken)) { var node = createNode(SyntaxKind.ConditionalExpression, expr.pos); node.condition = expr; - node.whenTrue = parseAssignmentExpression(false); + node.whenTrue = allowInAnd(parseAssignmentExpression); parseExpected(SyntaxKind.ColonToken); - node.whenFalse = parseAssignmentExpression(noIn); + node.whenFalse = parseAssignmentExpression(); expr = finishNode(node); } return expr; } - function parseBinaryExpression(noIn?: boolean): Expression { - return parseBinaryOperators(parseUnaryExpression(), 0, noIn); - } - - function parseBinaryOperators(expr: Expression, minPrecedence: number, noIn?: boolean): Expression { + function parseBinaryOperators(expr: Expression, minPrecedence: number): Expression { while (true) { reScanGreaterToken(); var precedence = getOperatorPrecedence(); - if (precedence && precedence > minPrecedence && (!noIn || token !== SyntaxKind.InKeyword)) { + if (precedence && precedence > minPrecedence && (!disallowInContext || token !== SyntaxKind.InKeyword)) { var operator = token; nextToken(); - expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence, noIn)); + expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence)); continue; } return expr; @@ -2277,7 +2360,7 @@ module ts { indexedAccess.index = createMissingNode(); } else { - indexedAccess.index = parseExpression(); + indexedAccess.index = allowInAnd(parseExpression); if (indexedAccess.index.kind === SyntaxKind.StringLiteral || indexedAccess.index.kind === SyntaxKind.NumericLiteral) { var literal = indexedAccess.index; literal.text = internIdentifier(literal.text); @@ -2391,7 +2474,7 @@ module ts { function parseParenExpression(): ParenExpression { var node = createNode(SyntaxKind.ParenExpression); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); return finishNode(node); } @@ -2407,7 +2490,7 @@ module ts { } function parseArgumentExpression(): Expression { - return parseAssignmentExpressionOrOmittedExpression(); + return allowInAnd(parseAssignmentExpressionOrOmittedExpression); } function parseArrayLiteral(): ArrayLiteral { @@ -2456,7 +2539,7 @@ module ts { node = createNode(SyntaxKind.PropertyAssignment, nodePos); node.name = propertyName; parseExpected(SyntaxKind.ColonToken); - (node).initializer = parseAssignmentExpression(false); + (node).initializer = allowInAnd(parseAssignmentExpression); } node.flags = flags; @@ -2545,7 +2628,7 @@ module ts { var node = createNode(SyntaxKind.IfStatement); parseExpected(SyntaxKind.IfKeyword); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); node.thenStatement = parseStatement(); node.elseStatement = parseOptional(SyntaxKind.ElseKeyword) ? parseStatement() : undefined; @@ -2560,7 +2643,7 @@ module ts { parseExpected(SyntaxKind.WhileKeyword); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); // From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html @@ -2575,7 +2658,7 @@ module ts { var node = createNode(SyntaxKind.WhileStatement); parseExpected(SyntaxKind.WhileKeyword); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); node.statement = parseStatement(); @@ -2589,16 +2672,16 @@ module ts { parseExpected(SyntaxKind.OpenParenToken); if (token !== SyntaxKind.SemicolonToken) { if (parseOptional(SyntaxKind.VarKeyword)) { - var declarations = parseVariableDeclarationList(0, /*noIn*/ true); + var declarations = disallowInAnd(() => parseVariableDeclarationList(0)); } else if (parseOptional(SyntaxKind.LetKeyword)) { - var declarations = parseVariableDeclarationList(NodeFlags.Let, /*noIn*/ true); + var declarations = disallowInAnd(() => parseVariableDeclarationList(NodeFlags.Let)); } else if (parseOptional(SyntaxKind.ConstKeyword)) { - var declarations = parseVariableDeclarationList(NodeFlags.Const, /*noIn*/ true); + var declarations = disallowInAnd(() => parseVariableDeclarationList(NodeFlags.Const)); } else { - var varOrInit = parseExpression(true); + var varOrInit = disallowInAnd(parseExpression); } } var forOrForInStatement: IterationStatement; @@ -2610,7 +2693,7 @@ module ts { else { forInStatement.variable = varOrInit; } - forInStatement.expression = parseExpression(); + forInStatement.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); forOrForInStatement = forInStatement; } @@ -2625,11 +2708,11 @@ module ts { parseExpected(SyntaxKind.SemicolonToken); if (token !== SyntaxKind.SemicolonToken && token !== SyntaxKind.CloseParenToken) { - forStatement.condition = parseExpression(); + forStatement.condition = allowInAnd(parseExpression); } parseExpected(SyntaxKind.SemicolonToken); if (token !== SyntaxKind.CloseParenToken) { - forStatement.iterator = parseExpression(); + forStatement.iterator = allowInAnd(parseExpression); } parseExpected(SyntaxKind.CloseParenToken); forOrForInStatement = forStatement; @@ -2657,7 +2740,7 @@ module ts { parseExpected(SyntaxKind.ReturnKeyword); if (!canParseSemicolon()) { - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); } parseSemicolon(); @@ -2668,7 +2751,7 @@ module ts { var node = createNode(SyntaxKind.WithStatement); parseExpected(SyntaxKind.WithKeyword); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); node.statement = parseStatement(); return finishNode(node); @@ -2677,7 +2760,7 @@ module ts { function parseCaseClause(): CaseOrDefaultClause { var node = createNode(SyntaxKind.CaseClause); parseExpected(SyntaxKind.CaseKeyword); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.ColonToken); node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement); return finishNode(node); @@ -2699,7 +2782,7 @@ module ts { var node = createNode(SyntaxKind.SwitchStatement); parseExpected(SyntaxKind.SwitchKeyword); parseExpected(SyntaxKind.OpenParenToken); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseExpected(SyntaxKind.CloseParenToken); parseExpected(SyntaxKind.OpenBraceToken); @@ -2715,7 +2798,7 @@ module ts { if (scanner.hasPrecedingLineBreak()) { error(Diagnostics.Line_break_not_permitted_here); } - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } @@ -2782,7 +2865,7 @@ module ts { function parseExpressionStatement(): ExpressionStatement { var node = createNode(SyntaxKind.ExpressionStatement); - node.expression = parseExpression(); + node.expression = allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } @@ -2911,17 +2994,17 @@ module ts { // DECLARATIONS - function parseVariableDeclaration(flags: NodeFlags, noIn?: boolean): VariableDeclaration { + function parseVariableDeclaration(flags: NodeFlags): VariableDeclaration { var node = createNode(SyntaxKind.VariableDeclaration); node.flags = flags; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); - node.initializer = parseInitializer(/*inParameter*/ false, noIn); + node.initializer = parseInitializer(/*inParameter*/ false); return finishNode(node); } - function parseVariableDeclarationList(flags: NodeFlags, noIn?: boolean): NodeArray { - return parseDelimitedList(ParsingContext.VariableDeclarations, () => parseVariableDeclaration(flags, noIn)); + function parseVariableDeclarationList(flags: NodeFlags): NodeArray { + return parseDelimitedList(ParsingContext.VariableDeclarations, () => parseVariableDeclaration(flags)); } function parseVariableStatement(fullStart: number, modifiers: ModifiersArray): VariableStatement { @@ -2939,7 +3022,7 @@ module ts { } nextToken(); - node.declarations = parseVariableDeclarationList(node.flags, /*noIn*/false); + node.declarations = allowInAnd(() => parseVariableDeclarationList(node.flags)); parseSemicolon(); return finishNode(node); } @@ -2991,7 +3074,7 @@ module ts { } property.name = name; property.type = parseTypeAnnotation(); - property.initializer = parseInitializer(/*inParameter*/ false); + property.initializer = allowInAnd(() => parseInitializer(/*inParameter*/ false)); parseSemicolon(); return finishNode(property); } @@ -3156,7 +3239,7 @@ module ts { function parseEnumMember(): EnumMember { var node = createNode(SyntaxKind.EnumMember, scanner.getStartPos()); node.name = parsePropertyName(); - node.initializer = parseInitializer(/*inParameter*/ false); + node.initializer = allowInAnd(() => parseInitializer(/*inParameter*/ false)); return finishNode(node); } @@ -3658,7 +3741,7 @@ module ts { } function checkBinaryExpression(node: BinaryExpression) { - if (node.flags & NodeFlags.ParsedInStrictMode) { + if (node.flags & NodeFlags.ParsedInStrictModeContext) { if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { if (isEvalOrArgumentsIdentifier(node.left)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an @@ -3810,7 +3893,7 @@ module ts { var colonStart = skipTrivia(sourceText, node.variable.end); return grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); } - if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.variable)) { + if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments return reportInvalidUseInStrictMode(node.variable); @@ -3930,7 +4013,7 @@ module ts { } function checkFunctionName(name: Node) { - if (name && name.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(name)) { + if (name && name.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) return reportInvalidUseInStrictMode(name); @@ -4051,7 +4134,7 @@ module ts { var GetAccessor = 2; var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; - var inStrictMode = (node.flags & NodeFlags.ParsedInStrictMode) !== 0; + var inStrictMode = (node.flags & NodeFlags.ParsedInStrictModeContext) !== 0; for (var i = 0, n = node.properties.length; i < n; i++) { var prop = node.properties[i]; @@ -4115,7 +4198,7 @@ module ts { function checkNumericLiteral(node: LiteralExpression): boolean { if (node.flags & NodeFlags.OctalLiteral) { - if (node.flags & NodeFlags.ParsedInStrictMode) { + if (node.flags & NodeFlags.ParsedInStrictModeContext) { return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } else if (languageVersion >= ScriptTarget.ES5) { @@ -4259,7 +4342,7 @@ module ts { // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { return reportInvalidUseInStrictMode(node.name); } } @@ -4318,13 +4401,13 @@ module ts { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.operand)) { + if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { return reportInvalidUseInStrictMode(node.operand); } } function checkPrefixOperator(node: UnaryExpression) { - if (node.flags & NodeFlags.ParsedInStrictMode) { + if (node.flags & NodeFlags.ParsedInStrictModeContext) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator @@ -4509,7 +4592,7 @@ module ts { if (!inAmbientContext && !node.initializer && isConst(node)) { return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); } - if (node.flags & NodeFlags.ParsedInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments return reportInvalidUseInStrictMode(node.name); @@ -4571,7 +4654,7 @@ module ts { } function checkWithStatement(node: WithStatement): boolean { - if (node.flags & NodeFlags.ParsedInStrictMode) { + if (node.flags & NodeFlags.ParsedInStrictModeContext) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such // a context is an return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0188067f108..ee01e40b66a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -272,8 +272,10 @@ module ts { // Set if this node was parsed in strict mode. Used for grammar error checks, as well as // checking if the node can be reused in incremental settings. - ParsedInStrictMode = 0x00002000, - OctalLiteral = 0x00004000, + ParsedInStrictModeContext = 0x00002000, + ParsedInDisallowInContext = 0x00004000, + + OctalLiteral = 0x00008000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, From 7cc78e38623fef7e82d398db39ff82af8de8b6af Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 15:55:04 -0800 Subject: [PATCH 156/178] Reduce lambda allocations in the parser. --- src/compiler/parser.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4fc47d405d5..efceaeb5967 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2672,13 +2672,13 @@ module ts { parseExpected(SyntaxKind.OpenParenToken); if (token !== SyntaxKind.SemicolonToken) { if (parseOptional(SyntaxKind.VarKeyword)) { - var declarations = disallowInAnd(() => parseVariableDeclarationList(0)); + var declarations = disallowInAnd(parseVariableDeclarationList); } else if (parseOptional(SyntaxKind.LetKeyword)) { - var declarations = disallowInAnd(() => parseVariableDeclarationList(NodeFlags.Let)); + var declarations = setFlag(disallowInAnd(parseVariableDeclarationList), NodeFlags.Let); } else if (parseOptional(SyntaxKind.ConstKeyword)) { - var declarations = disallowInAnd(() => parseVariableDeclarationList(NodeFlags.Const)); + var declarations = setFlag(disallowInAnd(parseVariableDeclarationList), NodeFlags.Const); } else { var varOrInit = disallowInAnd(parseExpression); @@ -2994,17 +2994,24 @@ module ts { // DECLARATIONS - function parseVariableDeclaration(flags: NodeFlags): VariableDeclaration { + function parseVariableDeclaration(): VariableDeclaration { var node = createNode(SyntaxKind.VariableDeclaration); - node.flags = flags; node.name = parseIdentifier(); node.type = parseTypeAnnotation(); node.initializer = parseInitializer(/*inParameter*/ false); return finishNode(node); } - function parseVariableDeclarationList(flags: NodeFlags): NodeArray { - return parseDelimitedList(ParsingContext.VariableDeclarations, () => parseVariableDeclaration(flags)); + function setFlag(array: NodeArray, flag: NodeFlags): NodeArray { + for (var i = 0, n = array.length; i < n; i++) { + array[i].flags |= flag; + } + + return array; + } + + function parseVariableDeclarationList(): NodeArray { + return parseDelimitedList(ParsingContext.VariableDeclarations, parseVariableDeclaration); } function parseVariableStatement(fullStart: number, modifiers: ModifiersArray): VariableStatement { @@ -3022,7 +3029,9 @@ module ts { } nextToken(); - node.declarations = allowInAnd(() => parseVariableDeclarationList(node.flags)); + node.declarations = allowInAnd(parseVariableDeclarationList); + setFlag(node.declarations, node.flags); + parseSemicolon(); return finishNode(node); } From 1bbb0348913ffd2456684fed8cd976a5928be774 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 24 Nov 2014 16:24:15 -0800 Subject: [PATCH 157/178] Addressed CR feedback. --- src/compiler/parser.ts | 6 ++-- src/services/signatureHelp.ts | 54 ++++++++++++++++++----------------- src/services/utilities.ts | 2 +- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a1e050b8fb1..97186b22bb0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -479,9 +479,9 @@ module ts { if (node.kind === SyntaxKind.TaggedTemplateExpression) { return (node).tag; } - else { - return (node).func; - } + + // Will either be a CallExpression or NewExpression. + return (node).func; } export function isExpression(node: Node): boolean { diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 0f61a69d51f..7d7d52a62c4 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -164,10 +164,6 @@ module ts.SignatureHelp { //} var emptyArray: any[] = []; - const enum Constants { - HeadSpanIndex = -1 - } - const enum ArgumentListKind { TypeArguments, CallArguments, @@ -190,7 +186,7 @@ module ts.SignatureHelp { return undefined; } - var argumentInfo = getContainingArgumentInfo(startingToken, position); + var argumentInfo = getContainingArgumentInfo(startingToken); cancellationToken.throwIfCancellationRequested(); // Semantic filtering of signature help @@ -213,7 +209,7 @@ module ts.SignatureHelp { * Returns relevant information for the argument list and the current argument if we are * in the argument of an invocation; returns undefined otherwise. */ - function getImmediatelyContainingArgumentInfo(node: Node, position: number): ArgumentListInfo { + function getImmediatelyContainingArgumentInfo(node: Node): ArgumentListInfo { if (node.parent.kind === SyntaxKind.CallExpression || node.parent.kind === SyntaxKind.NewExpression) { var callExpression = node.parent; // There are 3 cases to handle: @@ -287,7 +283,9 @@ module ts.SignatureHelp { else if (node.kind === SyntaxKind.TemplateHead && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - var argumentIndex = getArgumentIndexForTemplatePiece(Constants.HeadSpanIndex, node, position); + Debug.assert(templateExpression.kind === SyntaxKind.TemplateExpression); + + var argumentIndex = isInsideTemplateLiteral(node, position) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } @@ -302,13 +300,8 @@ module ts.SignatureHelp { return undefined; } - // The cursor can either be in or after the template literal. - // If inside, we want to highlight the first argument. - // If after, we'll want to highlight the next parameter. - // We actually shouldn't be able to show up before because you should be at the left-most token. - var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); - var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node, position); + var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node); return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } @@ -324,9 +317,9 @@ module ts.SignatureHelp { : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); } - // spanIndex is either the index for a given template span, or Constants.HeadSpanIndex for a template head. + // spanIndex is either the index for a given template span. // This does not give appropriate results for a NoSubstitutionTemplateLiteral - function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node, position: number): number { + function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node): number { // Because the TemplateStringsArray is the first argument, we have to offset each substitution expression by 1. // There are three cases we can encounter: // 1. We are precisely in the template literal (argIndex = 0). @@ -357,7 +350,7 @@ module ts.SignatureHelp { return { kind: ArgumentListKind.TaggedTemplateArguments, invocation: tagExpression, - argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression.template), + argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression), argumentIndex: argumentIndex, argumentCount: argumentCount }; @@ -377,22 +370,31 @@ module ts.SignatureHelp { return new TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } - function getApplicableSpanForTaggedTemplate(template: TemplateExpression | LiteralExpression): TextSpan { + function getApplicableSpanForTaggedTemplate(taggedTemplate: TaggedTemplateExpression): TextSpan { + var template = taggedTemplate.template; var applicableSpanStart = template.getStart(); var applicableSpanEnd = template.getEnd(); - // Adjust the span end in case the template is unclosed - + // We need to adjust the end position for the case where the template does not have a tail. + // Otherwise, we will not show signature help past the expression. + // For example, + // + // ` ${ 1 + 1 foo(10) + // | | + // + // This is because a Missing node has no width. However, what we actually want is to include trivia + // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail. if (template.kind === SyntaxKind.TemplateExpression) { var lastSpan = lastOrUndefined((template).templateSpans); if (lastSpan.literal.kind === SyntaxKind.Missing) { - applicableSpanEnd = skipTrivia(sourceFile.text, template.end, /*stopAfterLineBreak*/ false); + applicableSpanEnd = skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false); } } return new TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } - function getContainingArgumentInfo(node: Node, position: number): ArgumentListInfo { + function getContainingArgumentInfo(node: Node): ArgumentListInfo { for (var n = node; n.kind !== SyntaxKind.SourceFile; n = n.parent) { if (n.kind === SyntaxKind.FunctionBlock) { return undefined; @@ -404,7 +406,7 @@ module ts.SignatureHelp { Debug.fail("Node of kind " + n.kind + " is not a subspan of its parent of kind " + n.parent.kind); } - var argumentInfo = getImmediatelyContainingArgumentInfo(n, position); + var argumentInfo = getImmediatelyContainingArgumentInfo(n); if (argumentInfo) { return argumentInfo; } @@ -454,16 +456,16 @@ module ts.SignatureHelp { var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var invocation = argumentListInfo.invocation; - var invokerNode = getInvokedExpression(invocation) - var invokerSymbol = typeInfoResolver.getSymbolInfo(invokerNode); - var invokerDisplayParts = invokerSymbol && symbolToDisplayParts(typeInfoResolver, invokerSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); + var callTarget = getInvokedExpression(invocation) + var callTargetSymbol = typeInfoResolver.getSymbolInfo(callTarget); + var callTargetDisplayParts = callTargetSymbol && symbolToDisplayParts(typeInfoResolver, callTargetSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); var items: SignatureHelpItem[] = map(candidates, candidateSignature => { var signatureHelpParameters: SignatureHelpParameter[]; var prefixParts: SymbolDisplayPart[] = []; var suffixParts: SymbolDisplayPart[] = []; - if (invokerDisplayParts) { - prefixParts.push.apply(prefixParts, invokerDisplayParts); + if (callTargetDisplayParts) { + prefixParts.push.apply(prefixParts, callTargetDisplayParts); } if (isTypeParameterList) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index ab651491518..4aacad24c87 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -323,6 +323,6 @@ module ts { export function isInsideTemplateLiteral(node: LiteralExpression, position: number) { return (node.getStart() < position && position < node.getEnd()) - || (isUnterminatedTemplateEnd(node) && position >= node.getEnd()); + || (isUnterminatedTemplateEnd(node) && position === node.getEnd()); } } \ No newline at end of file From f0b7315a2cdcf3571319c58f8f833349e417479e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 18:47:49 -0800 Subject: [PATCH 158/178] Use a separate field on a node to specify parser context flags. --- src/compiler/parser.ts | 53 ++++++++++++++++++++++++------------------ src/compiler/types.ts | 3 +++ 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index efceaeb5967..b88f08dc6ca 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -897,6 +897,23 @@ module ts { // understand when these values should be changed versus when they should be inherited. var strictModeContext = false; var disallowInContext = false; + var contextFlags: number = 0; + + function updateContextFlags() { + contextFlags = + (strictModeContext ? NodeFlags.ParsedInStrictModeContext : 0) | + (disallowInContext ? NodeFlags.ParsedInDisallowInContext : 0); + } + + function setStrictModeContext(val: boolean) { + strictModeContext = val; + updateContextFlags(); + } + + function setDisallowInContext(val: boolean) { + disallowInContext = val; + updateContextFlags(); + } function allowInAnd(func: () => T): T { if (disallowInContext) { @@ -922,10 +939,6 @@ module ts { return result; } - function setDisallowInContext(val: boolean) { - disallowInContext = val; - } - function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); } @@ -1108,12 +1121,8 @@ module ts { function finishNode(node: T): T { node.end = scanner.getStartPos(); - if (strictModeContext) { - node.flags |= NodeFlags.ParsedInStrictModeContext; - } - - if (disallowInContext) { - node.flags |= NodeFlags.ParsedInDisallowInContext + if (contextFlags) { + node.parserContextFlags = contextFlags; } return node; @@ -1310,7 +1319,7 @@ module ts { if (!strictModeContext && checkForStrictMode) { if (isPrologueDirective(element)) { if (isUseStrictPrologueDirective(element)) { - strictModeContext = true; + setStrictModeContext(true); checkForStrictMode = false; } } @@ -1327,7 +1336,7 @@ module ts { nextToken(); } } - strictModeContext = savedStrictModeContext; + setStrictModeContext(savedStrictModeContext); result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; @@ -3750,7 +3759,7 @@ module ts { } function checkBinaryExpression(node: BinaryExpression) { - if (node.flags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { if (isEvalOrArgumentsIdentifier(node.left)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an @@ -3902,7 +3911,7 @@ module ts { var colonStart = skipTrivia(sourceText, node.variable.end); return grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); } - if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments return reportInvalidUseInStrictMode(node.variable); @@ -4022,7 +4031,7 @@ module ts { } function checkFunctionName(name: Node) { - if (name && name.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { + if (name && name.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) return reportInvalidUseInStrictMode(name); @@ -4143,7 +4152,7 @@ module ts { var GetAccessor = 2; var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; - var inStrictMode = (node.flags & NodeFlags.ParsedInStrictModeContext) !== 0; + var inStrictMode = (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) !== 0; for (var i = 0, n = node.properties.length; i < n; i++) { var prop = node.properties[i]; @@ -4207,7 +4216,7 @@ module ts { function checkNumericLiteral(node: LiteralExpression): boolean { if (node.flags & NodeFlags.OctalLiteral) { - if (node.flags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } else if (languageVersion >= ScriptTarget.ES5) { @@ -4351,7 +4360,7 @@ module ts { // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { return reportInvalidUseInStrictMode(node.name); } } @@ -4410,13 +4419,13 @@ module ts { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { return reportInvalidUseInStrictMode(node.operand); } } function checkPrefixOperator(node: UnaryExpression) { - if (node.flags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator @@ -4601,7 +4610,7 @@ module ts { if (!inAmbientContext && !node.initializer && isConst(node)) { return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); } - if (node.flags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments return reportInvalidUseInStrictMode(node.name); @@ -4663,7 +4672,7 @@ module ts { } function checkWithStatement(node: WithStatement): boolean { - if (node.flags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such // a context is an return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ee01e40b66a..6e4efbc3926 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -285,6 +285,9 @@ module ts { export interface Node extends TextRange { kind: SyntaxKind; flags: NodeFlags; + // Specific context the parser was in when this node was created. Normally undefined. + // Only set when the parser was in some interesting context (like async/yield). + parserContextFlags?: NodeFlags; id?: number; // Unique id (used to look up NodeLinks) parent?: Node; // Parent node (initialized by binding) symbol?: Symbol; // Symbol declared by node (initialized by binding) From 14f90b889da619711b14ce5411f6a6e561b9cc9c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 18:51:07 -0800 Subject: [PATCH 159/178] Update fidelity to match names. --- src/services/syntax/parser.ts | 231 +++++++++++++++++----------------- 1 file changed, 115 insertions(+), 116 deletions(-) diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 3a16f23e2b1..37e25579bf1 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -199,6 +199,7 @@ module TypeScript.Parser { var disallowInContext: boolean = false; var yieldContext: boolean = false; var generatorParameterContext: boolean = false; + var contextFlags: number = 0; // Current state of the parser. If we need to rewind we will store and reset these values as // appropriate. @@ -209,8 +210,6 @@ module TypeScript.Parser { // started at. var diagnostics: Diagnostic[] = []; - var parseNodeData: number = 0; - var _skippedTokens: ISyntaxToken[] = undefined; function parseSyntaxTree(_source: IParserSource, isDeclaration: boolean): SyntaxTree { @@ -224,7 +223,7 @@ module TypeScript.Parser { // Now, clear out our state so that our singleton parser doesn't keep things alive. diagnostics = []; - parseNodeData = SyntaxNodeConstants.None; + contextFlags = SyntaxNodeConstants.None; fileName = undefined; source.release(); source = undefined; @@ -634,8 +633,8 @@ module TypeScript.Parser { throw Errors.invalidOperation(); } - function updateParseNodeData() { - parseNodeData = + function updateContextFlags() { + contextFlags = (strictModeContext ? SyntaxNodeConstants.ParsedInStrictModeContext : 0) | (disallowInContext ? SyntaxNodeConstants.ParsedInDisallowInContext : 0) | (yieldContext ? SyntaxNodeConstants.ParsedInYieldContext : 0) | @@ -644,22 +643,22 @@ module TypeScript.Parser { function setStrictModeContext(val: boolean) { strictModeContext = val; - updateParseNodeData(); + updateContextFlags(); } function setDisallowInContext(val: boolean) { disallowInContext = val; - updateParseNodeData(); + updateContextFlags(); } function setYieldContext(val: boolean) { yieldContext = val; - updateParseNodeData(); + updateContextFlags(); } function setGeneratorParameterContext(val: boolean) { generatorParameterContext = val; - updateParseNodeData(); + updateContextFlags(); } function parseSourceUnit(): SourceUnitSyntax { @@ -674,7 +673,7 @@ module TypeScript.Parser { setStrictModeContext(savedIsInStrictMode); - var sourceUnit = new SourceUnitSyntax(parseNodeData, moduleElements, consumeToken(currentToken())); + var sourceUnit = new SourceUnitSyntax(contextFlags, moduleElements, consumeToken(currentToken())); if (Debug.shouldAssert(AssertionLevel.Aggressive)) { Debug.assert(fullWidth(sourceUnit) === source.text.length()); @@ -789,12 +788,12 @@ module TypeScript.Parser { } function parseImportDeclaration(): ImportDeclarationSyntax { - return new ImportDeclarationSyntax(parseNodeData, + return new ImportDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ImportKeyword), eatIdentifierToken(), eatToken(SyntaxKind.EqualsToken), parseModuleReference(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } function parseExportAssignment(): ExportAssignmentSyntax { - return new ExportAssignmentSyntax(parseNodeData, + return new ExportAssignmentSyntax(contextFlags, eatToken(SyntaxKind.ExportKeyword), eatToken(SyntaxKind.EqualsToken), eatIdentifierToken(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } @@ -808,12 +807,12 @@ module TypeScript.Parser { } function parseExternalModuleReference(): ExternalModuleReferenceSyntax { - return new ExternalModuleReferenceSyntax(parseNodeData, + return new ExternalModuleReferenceSyntax(contextFlags, eatToken(SyntaxKind.RequireKeyword), eatToken(SyntaxKind.OpenParenToken), eatToken(SyntaxKind.StringLiteral), eatToken(SyntaxKind.CloseParenToken)); } function parseModuleNameModuleReference(): ModuleNameModuleReferenceSyntax { - return new ModuleNameModuleReferenceSyntax(parseNodeData, parseName(/*allowIdentifierNames:*/ false)); + return new ModuleNameModuleReferenceSyntax(contextFlags, parseName(/*allowIdentifierNames:*/ false)); } function tryParseTypeArgumentList(inExpression: boolean): TypeArgumentListSyntax { @@ -825,7 +824,7 @@ module TypeScript.Parser { if (!inExpression) { // if we're not in an expression, this must be a type argument list. Just parse // it out as such. - return new TypeArgumentListSyntax(parseNodeData, + return new TypeArgumentListSyntax(contextFlags, consumeToken(_currentToken), parseSeparatedSyntaxList(ListParsingState.TypeArgumentList_Types), eatToken(SyntaxKind.GreaterThanToken)); @@ -851,7 +850,7 @@ module TypeScript.Parser { } else { releaseRewindPoint(rewindPoint); - return new TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, greaterThanToken); + return new TypeArgumentListSyntax(contextFlags, lessThanToken, typeArguments, greaterThanToken); } } @@ -944,7 +943,7 @@ module TypeScript.Parser { var dotToken = consumeToken(currentToken()); var identifierName = eatRightSideOfName(allowIdentifierNames); - current = new QualifiedNameSyntax(parseNodeData, current, dotToken, identifierName); + current = new QualifiedNameSyntax(contextFlags, current, dotToken, identifierName); shouldContinue = identifierName.fullWidth() > 0; } @@ -954,7 +953,7 @@ module TypeScript.Parser { function parseEnumDeclaration(): EnumDeclarationSyntax { var openBraceToken: ISyntaxToken; - return new EnumDeclarationSyntax(parseNodeData, + return new EnumDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.EnumKeyword), eatIdentifierToken(), @@ -1059,7 +1058,7 @@ module TypeScript.Parser { return undefined; } - return new EnumElementSyntax(parseNodeData, parsePropertyName(), tryParseEnumElementEqualsValueClause()); + return new EnumElementSyntax(contextFlags, parsePropertyName(), tryParseEnumElementEqualsValueClause()); } function isModifierKind(kind: SyntaxKind): boolean { @@ -1151,7 +1150,7 @@ module TypeScript.Parser { function parseClassDeclaration(): ClassDeclarationSyntax { var openBraceToken: ISyntaxToken; - return new ClassDeclarationSyntax(parseNodeData, + return new ClassDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ClassKeyword), eatIdentifierToken(), @@ -1207,14 +1206,14 @@ module TypeScript.Parser { } function parseGetAccessor(modifiers: ISyntaxToken[], getKeyword: ISyntaxToken): GetAccessorSyntax { - return new GetAccessorSyntax(parseNodeData, + return new GetAccessorSyntax(contextFlags, modifiers, consumeToken(getKeyword), parsePropertyName(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameter:*/ false), parseFunctionBody(/*isGenerator:*/ false)); } function parseSetAccessor(modifiers: ISyntaxToken[], setKeyword: ISyntaxToken): SetAccessorSyntax { - return new SetAccessorSyntax(parseNodeData, + return new SetAccessorSyntax(contextFlags, modifiers, consumeToken(setKeyword), parsePropertyName(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), parseFunctionBody(/*isGenerator:*/ false)); @@ -1342,7 +1341,7 @@ module TypeScript.Parser { // Note: if we see an arrow after the close paren, then try to parse out a function // block anyways. It's likely the user just though '=> expr' was legal anywhere a // block was legal. - return new ConstructorDeclarationSyntax(parseNodeData, + return new ConstructorDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ConstructorKeyword), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), @@ -1354,7 +1353,7 @@ module TypeScript.Parser { // block anyways. It's likely the user just though '=> expr' was legal anywhere a // block was legal. var isGenerator = asteriskToken !== undefined; - return new MemberFunctionDeclarationSyntax(parseNodeData, + return new MemberFunctionDeclarationSyntax(contextFlags, modifiers, asteriskToken, propertyName, @@ -1363,9 +1362,9 @@ module TypeScript.Parser { } function parseMemberVariableDeclaration(modifiers: ISyntaxToken[], propertyName: IPropertyNameSyntax): MemberVariableDeclarationSyntax { - return new MemberVariableDeclarationSyntax(parseNodeData, + return new MemberVariableDeclarationSyntax(contextFlags, modifiers, - new VariableDeclaratorSyntax(parseNodeData, propertyName, + new VariableDeclaratorSyntax(contextFlags, propertyName, parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false), isEqualsValueClause(/*inParameter*/ false) ? allowInAnd(parseEqualsValueClause) : undefined), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); @@ -1376,7 +1375,7 @@ module TypeScript.Parser { } function parseIndexMemberDeclaration(): IndexMemberDeclarationSyntax { - return new IndexMemberDeclarationSyntax(parseNodeData, + return new IndexMemberDeclarationSyntax(contextFlags, parseModifiers(), parseIndexSignature(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewLine:*/ false)); } @@ -1394,7 +1393,7 @@ module TypeScript.Parser { // function * BindingIdentifier[?Yield](FormalParameters[Yield, GeneratorParameter]) { GeneratorBody[Yield] } var isGenerator = asteriskToken !== undefined; - return new FunctionDeclarationSyntax(parseNodeData, + return new FunctionDeclarationSyntax(contextFlags, modifiers, functionKeyword, asteriskToken, @@ -1417,7 +1416,7 @@ module TypeScript.Parser { function parseModuleDeclaration(): ModuleDeclarationSyntax { var openBraceToken: ISyntaxToken; - return new ModuleDeclarationSyntax(parseNodeData, + return new ModuleDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ModuleKeyword), parseModuleName(), @@ -1427,7 +1426,7 @@ module TypeScript.Parser { } function parseInterfaceDeclaration(): InterfaceDeclarationSyntax { - return new InterfaceDeclarationSyntax(parseNodeData, + return new InterfaceDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.InterfaceKeyword), eatIdentifierToken(), @@ -1439,14 +1438,14 @@ module TypeScript.Parser { function parseObjectType(): ObjectTypeSyntax { var openBraceToken: ISyntaxToken; - return new ObjectTypeSyntax(parseNodeData, + return new ObjectTypeSyntax(contextFlags, openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSeparatedSyntaxList(ListParsingState.ObjectType_TypeMembers) : [], eatToken(SyntaxKind.CloseBraceToken)); } function parseTupleType(currentToken: ISyntaxToken): TupleTypeSyntax { - return new TupleTypeSyntax(parseNodeData, + return new TupleTypeSyntax(contextFlags, consumeToken(currentToken), parseSeparatedSyntaxList(ListParsingState.TupleType_Types), eatToken(SyntaxKind.CloseBracketToken)); @@ -1529,13 +1528,13 @@ module TypeScript.Parser { function parseConstructSignature(): ConstructSignatureSyntax { // Construct signatures have no [Yield] or [GeneratorParameter] restrictions. - return new ConstructSignatureSyntax(parseNodeData, + return new ConstructSignatureSyntax(contextFlags, eatToken(SyntaxKind.NewKeyword), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false)); } function parseIndexSignature(): IndexSignatureSyntax { - return new IndexSignatureSyntax(parseNodeData, + return new IndexSignatureSyntax(contextFlags, eatToken(SyntaxKind.OpenBracketToken), parseSeparatedSyntaxList(ListParsingState.IndexSignature_Parameters), eatToken(SyntaxKind.CloseBracketToken), parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false)); @@ -1544,14 +1543,14 @@ module TypeScript.Parser { function parseMethodSignature(propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken): MethodSignatureSyntax { // Method signatues don't exist in expression contexts. So they have neither // [Yield] nor [GeneratorParameter] - return new MethodSignatureSyntax(parseNodeData, + return new MethodSignatureSyntax(contextFlags, propertyName, questionToken, parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false)); } function parsePropertySignature(propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken): PropertySignatureSyntax { - return new PropertySignatureSyntax(parseNodeData, + return new PropertySignatureSyntax(contextFlags, propertyName, questionToken, parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false)); } @@ -1632,7 +1631,7 @@ module TypeScript.Parser { return undefined; } - return new HeritageClauseSyntax(parseNodeData, + return new HeritageClauseSyntax(contextFlags, consumeToken(extendsOrImplementsKeyword), parseSeparatedSyntaxList(ListParsingState.HeritageClause_TypeNameList)); } @@ -1813,7 +1812,7 @@ module TypeScript.Parser { } function parseDebuggerStatement(debuggerKeyword: ISyntaxToken): DebuggerStatementSyntax { - return new DebuggerStatementSyntax(parseNodeData, consumeToken(debuggerKeyword), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); + return new DebuggerStatementSyntax(contextFlags, consumeToken(debuggerKeyword), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } function parseDoStatement(doKeyword: ISyntaxToken): DoStatementSyntax { @@ -1824,7 +1823,7 @@ module TypeScript.Parser { // 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in // spec but allowed in consensus reality. Approved -- this is the de-facto standard whereby // do;while(0)x will have a semicolon inserted before x. - return new DoStatementSyntax(parseNodeData, + return new DoStatementSyntax(contextFlags, consumeToken(doKeyword), parseStatement(/*inErrorRecovery:*/ false), eatToken(SyntaxKind.WhileKeyword), eatToken(SyntaxKind.OpenParenToken), allowInAnd(parseExpression), eatToken(SyntaxKind.CloseParenToken), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ true)); } @@ -1834,7 +1833,7 @@ module TypeScript.Parser { } function parseLabeledStatement(identifierToken: ISyntaxToken): LabeledStatementSyntax { - return new LabeledStatementSyntax(parseNodeData, + return new LabeledStatementSyntax(contextFlags, consumeToken(identifierToken), eatToken(SyntaxKind.ColonToken), parseStatement(/*inErrorRecovery:*/ false)); } @@ -1858,7 +1857,7 @@ module TypeScript.Parser { finallyClause = parseFinallyClause(); } - return new TryStatementSyntax(parseNodeData, tryKeyword, block, catchClause, finallyClause); + return new TryStatementSyntax(contextFlags, tryKeyword, block, catchClause, finallyClause); } function parseCatchClauseBlock(): BlockSyntax { @@ -1871,13 +1870,13 @@ module TypeScript.Parser { } function parseCatchClause(): CatchClauseSyntax { - return new CatchClauseSyntax(parseNodeData, + return new CatchClauseSyntax(contextFlags, eatToken(SyntaxKind.CatchKeyword), eatToken(SyntaxKind.OpenParenToken), eatIdentifierToken(), parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false), eatToken(SyntaxKind.CloseParenToken), parseCatchClauseBlock()); } function parseFinallyClause(): FinallyClauseSyntax { - return new FinallyClauseSyntax(parseNodeData, + return new FinallyClauseSyntax(contextFlags, eatToken(SyntaxKind.FinallyKeyword), parseStatementBlock()); } @@ -1886,7 +1885,7 @@ module TypeScript.Parser { // WithStatement[Yield, Return] : // with (Expression[In, ?Yield]) Statement[?Yield, ?Return] - return new WithStatementSyntax(parseNodeData, + return new WithStatementSyntax(contextFlags, consumeToken(withKeyword), eatToken(SyntaxKind.OpenParenToken), allowInAnd(parseExpression), @@ -1898,7 +1897,7 @@ module TypeScript.Parser { // IterationStatement[Yield, Return] : // while (Expression[In, ?Yield]) Statement[?Yield, ?Return] - return new WhileStatementSyntax(parseNodeData, + return new WhileStatementSyntax(contextFlags, consumeToken(whileKeyword), eatToken(SyntaxKind.OpenParenToken), allowInAnd(parseExpression), @@ -1921,7 +1920,7 @@ module TypeScript.Parser { } function parseEmptyStatement(semicolonToken: ISyntaxToken): EmptyStatementSyntax { - return new EmptyStatementSyntax(parseNodeData, consumeToken(semicolonToken)); + return new EmptyStatementSyntax(contextFlags, consumeToken(semicolonToken)); } function parseForOrForInStatement(forKeyword: ISyntaxToken): IStatementSyntax { @@ -1957,7 +1956,7 @@ module TypeScript.Parser { // for ( var ForBinding[?Yield] in Expression[In, ?Yield] ) Statement[?Yield, ?Return] // for ( ForDeclaration[?Yield] in Expression[In, ?Yield] ) Statement[?Yield, ?Return] - return new ForInStatementSyntax(parseNodeData, + return new ForInStatementSyntax(contextFlags, forKeyword, openParenToken, initializer, eatToken(SyntaxKind.InKeyword), allowInAnd(parseExpression), eatToken(SyntaxKind.CloseParenToken), parseStatement(/*inErrorRecovery:*/ false)); } @@ -1968,7 +1967,7 @@ module TypeScript.Parser { // for (ExpressionNoInopt; Expressionopt ; Expressionopt ) Statement // for (var VariableDeclarationListNoIn; Expressionopt; Expressionopt) Statement - return new ForStatementSyntax(parseNodeData, + return new ForStatementSyntax(contextFlags, forKeyword, openParenToken, initializer, eatToken(SyntaxKind.SemicolonToken), tryParseForStatementCondition(), eatToken(SyntaxKind.SemicolonToken), tryParseForStatementIncrementor(), @@ -2014,12 +2013,12 @@ module TypeScript.Parser { } function parseBreakStatement(breakKeyword: ISyntaxToken): BreakStatementSyntax { - return new BreakStatementSyntax(parseNodeData, + return new BreakStatementSyntax(contextFlags, consumeToken(breakKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } function parseContinueStatement(continueKeyword: ISyntaxToken): ContinueStatementSyntax { - return new ContinueStatementSyntax(parseNodeData, + return new ContinueStatementSyntax(contextFlags, consumeToken(continueKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } @@ -2037,7 +2036,7 @@ module TypeScript.Parser { var openParenToken: ISyntaxToken; var openBraceToken: ISyntaxToken; - return new SwitchStatementSyntax(parseNodeData, + return new SwitchStatementSyntax(contextFlags, consumeToken(switchKeyword), openParenToken = eatToken(SyntaxKind.OpenParenToken), parseSwitchExpression(openParenToken), @@ -2082,7 +2081,7 @@ module TypeScript.Parser { // CaseClause[Yield, Return] : // case Expression[In, ?Yield] : StatementList[?Yield, ?Return]opt - return new CaseSwitchClauseSyntax(parseNodeData, + return new CaseSwitchClauseSyntax(contextFlags, consumeToken(caseKeyword), allowInAnd(parseExpression), eatToken(SyntaxKind.ColonToken), @@ -2092,14 +2091,14 @@ module TypeScript.Parser { function parseDefaultSwitchClause(defaultKeyword: ISyntaxToken): DefaultSwitchClauseSyntax { // Debug.assert(isDefaultSwitchClause()); - return new DefaultSwitchClauseSyntax(parseNodeData, + return new DefaultSwitchClauseSyntax(contextFlags, consumeToken(defaultKeyword), eatToken(SyntaxKind.ColonToken), parseSyntaxList(ListParsingState.SwitchClause_Statements)); } function parseThrowStatement(throwKeyword: ISyntaxToken): ThrowStatementSyntax { - return new ThrowStatementSyntax(parseNodeData, + return new ThrowStatementSyntax(contextFlags, consumeToken(throwKeyword), tryParseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } @@ -2116,7 +2115,7 @@ module TypeScript.Parser { } function parseReturnStatement(returnKeyword: ISyntaxToken): ReturnStatementSyntax { - return new ReturnStatementSyntax(parseNodeData, + return new ReturnStatementSyntax(contextFlags, consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } @@ -2145,7 +2144,7 @@ module TypeScript.Parser { // Elisionopt AssignmentExpression[In, ?Yield] if (currentToken().kind === SyntaxKind.CommaToken) { - return new OmittedExpressionSyntax(parseNodeData); + return new OmittedExpressionSyntax(contextFlags); } return allowInAnd(tryParseAssignmentExpressionOrHigher); @@ -2227,7 +2226,7 @@ module TypeScript.Parser { // ExpressionStatement[Yield] : // [lookahead not-in {{, function, class, let [ }] Expression[In, ?Yield]; - return new ExpressionStatementSyntax(parseNodeData, + return new ExpressionStatementSyntax(contextFlags, allowInAnd(parseExpression), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } @@ -2237,7 +2236,7 @@ module TypeScript.Parser { // if (Expression[In, ?Yield]) Statement[?Yield, ?Return] else Statement[?Yield, ?Return] // if (Expression[In, ?Yield]) Statement[?Yield, ?Return] - return new IfStatementSyntax(parseNodeData, + return new IfStatementSyntax(contextFlags, consumeToken(ifKeyword), eatToken(SyntaxKind.OpenParenToken), allowInAnd(parseExpression), @@ -2250,7 +2249,7 @@ module TypeScript.Parser { } function parseElseClause(): ElseClauseSyntax { - return new ElseClauseSyntax(parseNodeData, eatToken(SyntaxKind.ElseKeyword), parseStatement(/*inErrorRecovery:*/ false)); + return new ElseClauseSyntax(contextFlags, eatToken(SyntaxKind.ElseKeyword), parseStatement(/*inErrorRecovery:*/ false)); } function isVariableStatement(modifierCount: number): boolean { @@ -2261,14 +2260,14 @@ module TypeScript.Parser { // VariableStatement[Yield] : // var VariableDeclarationList[In, ?Yield]; - return new VariableStatementSyntax(parseNodeData, + return new VariableStatementSyntax(contextFlags, parseModifiers(), allowInAnd(parseVariableDeclaration), eatExplicitOrAutomaticSemicolon(/*allowWithoutNewline:*/ false)); } function parseVariableDeclaration(): VariableDeclarationSyntax { // Debug.assert(currentToken().kind === SyntaxKind.VarKeyword); - return new VariableDeclarationSyntax(parseNodeData, + return new VariableDeclarationSyntax(contextFlags, eatToken(SyntaxKind.VarKeyword), parseSeparatedSyntaxList(ListParsingState.VariableDeclaration_VariableDeclarators)); } @@ -2328,7 +2327,7 @@ module TypeScript.Parser { } } - return new VariableDeclaratorSyntax(parseNodeData, propertyName, typeAnnotation, equalsValueClause); + return new VariableDeclaratorSyntax(contextFlags, propertyName, typeAnnotation, equalsValueClause); } function isEqualsValueClause(inParameter: boolean): boolean { @@ -2372,7 +2371,7 @@ module TypeScript.Parser { // Initializer[In, Yield] : // = AssignmentExpression[?In, ?Yield] - return new EqualsValueClauseSyntax(parseNodeData, + return new EqualsValueClauseSyntax(contextFlags, eatToken(SyntaxKind.EqualsToken), parseAssignmentExpressionOrHigher()); } @@ -2389,7 +2388,7 @@ module TypeScript.Parser { break; } - leftOperand = new BinaryExpressionSyntax(parseNodeData, + leftOperand = new BinaryExpressionSyntax(contextFlags, leftOperand, consumeToken(_currentToken), parseAssignmentExpressionOrHigher()); @@ -2458,7 +2457,7 @@ module TypeScript.Parser { // Check for recursive assignment expressions. if (SyntaxFacts.isAssignmentOperatorToken(operatorToken.kind)) { - return new BinaryExpressionSyntax(parseNodeData, + return new BinaryExpressionSyntax(contextFlags, leftOperand, consumeToken(operatorToken), parseAssignmentExpressionOrHigher()); @@ -2518,12 +2517,12 @@ module TypeScript.Parser { if (!isOnDifferentLineThanPreviousToken(_currentToken) && (_currentToken.kind === SyntaxKind.AsteriskToken || isExpression(_currentToken))) { - return new YieldExpressionSyntax(parseNodeData, yieldKeyword, tryEatToken(SyntaxKind.AsteriskToken), parseAssignmentExpressionOrHigher()); + return new YieldExpressionSyntax(contextFlags, yieldKeyword, tryEatToken(SyntaxKind.AsteriskToken), parseAssignmentExpressionOrHigher()); } else { // if the next token is not on the same line as yield. or we don't have an '*' or // the start of an expressin, then this is just a simple "yield" expression. - return new YieldExpressionSyntax(parseNodeData, yieldKeyword, /*asterixToken:*/ undefined, /*expression;*/ undefined); + return new YieldExpressionSyntax(contextFlags, yieldKeyword, /*asterixToken:*/ undefined, /*expression;*/ undefined); } } @@ -2543,7 +2542,7 @@ module TypeScript.Parser { case SyntaxKind.ExclamationToken: case SyntaxKind.PlusPlusToken: case SyntaxKind.MinusMinusToken: - return new PrefixUnaryExpressionSyntax(parseNodeData, consumeToken(_currentToken), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); + return new PrefixUnaryExpressionSyntax(contextFlags, consumeToken(_currentToken), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); case SyntaxKind.TypeOfKeyword: return parseTypeOfExpression(_currentToken); case SyntaxKind.VoidKeyword: return parseVoidExpression(_currentToken); case SyntaxKind.DeleteKeyword: return parseDeleteExpression(_currentToken); @@ -2583,7 +2582,7 @@ module TypeScript.Parser { // Note: we explicitly 'allowIn' in the whenTrue part of the condition expression, and // we do not that for the 'whenFalse' part. - return new ConditionalExpressionSyntax(parseNodeData, + return new ConditionalExpressionSyntax(contextFlags, leftOperand, consumeToken(_currentToken), allowInAnd(parseAssignmentExpressionOrHigher), @@ -2627,7 +2626,7 @@ module TypeScript.Parser { // Precedence is okay, so we'll "take" this operator. // Now skip the operator token we're on. - leftOperand = new BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), + leftOperand = new BinaryExpressionSyntax(contextFlags, leftOperand, consumeToken(operatorToken), tryParseBinaryExpressionOrHigher(currentToken(), /*force:*/ true, newPrecedence)); } @@ -2713,7 +2712,7 @@ module TypeScript.Parser { switch (currentTokenKind) { case SyntaxKind.OpenParenToken: - expression = new InvocationExpressionSyntax(parseNodeData, expression, parseArgumentList(/*typeArgumentList:*/ undefined, _currentToken)); + expression = new InvocationExpressionSyntax(contextFlags, expression, parseArgumentList(/*typeArgumentList:*/ undefined, _currentToken)); continue; case SyntaxKind.LessThanToken: @@ -2726,7 +2725,7 @@ module TypeScript.Parser { break; } - expression = new InvocationExpressionSyntax(parseNodeData, expression, argumentList); + expression = new InvocationExpressionSyntax(contextFlags, expression, argumentList); continue; case SyntaxKind.OpenBracketToken: @@ -2734,12 +2733,12 @@ module TypeScript.Parser { continue; case SyntaxKind.DotToken: - expression = new MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + expression = new MemberAccessExpressionSyntax(contextFlags, expression, consumeToken(_currentToken), eatIdentifierNameToken()); continue; case SyntaxKind.NoSubstitutionTemplateToken: case SyntaxKind.TemplateStartToken: - expression = new TemplateAccessExpressionSyntax(parseNodeData, expression, parseTemplateExpression(_currentToken)); + expression = new TemplateAccessExpressionSyntax(contextFlags, expression, parseTemplateExpression(_currentToken)); continue; } @@ -2758,12 +2757,12 @@ module TypeScript.Parser { continue; case SyntaxKind.DotToken: - expression = new MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + expression = new MemberAccessExpressionSyntax(contextFlags, expression, consumeToken(_currentToken), eatIdentifierNameToken()); continue; case SyntaxKind.NoSubstitutionTemplateToken: case SyntaxKind.TemplateStartToken: - expression = new TemplateAccessExpressionSyntax(parseNodeData, expression, parseTemplateExpression(_currentToken)); + expression = new TemplateAccessExpressionSyntax(contextFlags, expression, parseTemplateExpression(_currentToken)); continue; } @@ -2827,7 +2826,7 @@ module TypeScript.Parser { var currentTokenKind = currentToken().kind; return currentTokenKind === SyntaxKind.OpenParenToken || currentTokenKind === SyntaxKind.DotToken ? expression - : new MemberAccessExpressionSyntax(parseNodeData, expression, eatToken(SyntaxKind.DotToken), eatIdentifierNameToken()); + : new MemberAccessExpressionSyntax(contextFlags, expression, eatToken(SyntaxKind.DotToken), eatIdentifierNameToken()); } function tryParsePostfixExpressionOrHigher(_currentToken: ISyntaxToken, force: boolean): IPostfixExpressionSyntax { @@ -2848,7 +2847,7 @@ module TypeScript.Parser { break; } - return new PostfixUnaryExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken)); + return new PostfixUnaryExpressionSyntax(contextFlags, expression, consumeToken(_currentToken)); } return expression; @@ -2887,7 +2886,7 @@ module TypeScript.Parser { // we'll bail out here and give a poor error message when we try to parse this // as an arithmetic expression. if (isDot) { - return new ArgumentListSyntax(parseNodeData, typeArgumentList, + return new ArgumentListSyntax(contextFlags, typeArgumentList, createMissingToken(SyntaxKind.OpenParenToken, undefined, DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected), [], eatToken(SyntaxKind.CloseParenToken)); @@ -2916,7 +2915,7 @@ module TypeScript.Parser { function parseArgumentList(typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken): ArgumentListSyntax { Debug.assert(openParenToken.kind === SyntaxKind.OpenParenToken && openParenToken.fullWidth() > 0); - return new ArgumentListSyntax(parseNodeData, + return new ArgumentListSyntax(contextFlags, typeArgumentList, consumeToken(openParenToken), parseSeparatedSyntaxList(ListParsingState.ArgumentList_AssignmentExpressions), @@ -2948,7 +2947,7 @@ module TypeScript.Parser { function parseElementAccessExpression(expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken): ElementAccessExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBracketToken); - return new ElementAccessExpressionSyntax(parseNodeData, expression, consumeToken(openBracketToken), + return new ElementAccessExpressionSyntax(contextFlags, expression, consumeToken(openBracketToken), parseElementAccessArgumentExpression(openBracketToken), eatToken(SyntaxKind.CloseBracketToken)); } @@ -3016,15 +3015,15 @@ module TypeScript.Parser { } function parseTypeOfExpression(typeOfKeyword: ISyntaxToken): TypeOfExpressionSyntax { - return new TypeOfExpressionSyntax(parseNodeData, consumeToken(typeOfKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); + return new TypeOfExpressionSyntax(contextFlags, consumeToken(typeOfKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); } function parseDeleteExpression(deleteKeyword: ISyntaxToken): DeleteExpressionSyntax { - return new DeleteExpressionSyntax(parseNodeData, consumeToken(deleteKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); + return new DeleteExpressionSyntax(contextFlags, consumeToken(deleteKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); } function parseVoidExpression(voidKeyword: ISyntaxToken): VoidExpressionSyntax { - return new VoidExpressionSyntax(parseNodeData, consumeToken(voidKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); + return new VoidExpressionSyntax(contextFlags, consumeToken(voidKeyword), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); } function parseFunctionExpression(functionKeyword: ISyntaxToken): FunctionExpressionSyntax { @@ -3036,7 +3035,7 @@ module TypeScript.Parser { // function * BindingIdentifier[Yield]opt (FormalParameters[Yield, GeneratorParameter]) { GeneratorBody[Yield] } var isGenerator = asteriskToken !== undefined; - return new FunctionExpressionSyntax(parseNodeData, + return new FunctionExpressionSyntax(contextFlags, functionKeyword, asteriskToken, enterYieldContextAnd(eatOptionalIdentifierToken), @@ -3054,7 +3053,7 @@ module TypeScript.Parser { // See comment in tryParseMemberExpressionOrHigher for a more complete explanation of // this decision. - return new ObjectCreationExpressionSyntax(parseNodeData, + return new ObjectCreationExpressionSyntax(contextFlags, consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), /*force:*/ true), tryParseArgumentList()); } @@ -3074,7 +3073,7 @@ module TypeScript.Parser { } while (templateClauses[templateClauses.length - 1].templateMiddleOrEndToken.kind === SyntaxKind.TemplateMiddleToken); - return new TemplateExpressionSyntax(parseNodeData, startToken, Syntax.list(templateClauses)); + return new TemplateExpressionSyntax(contextFlags, startToken, Syntax.list(templateClauses)); } function parseTemplateClause(): TemplateClauseSyntax { @@ -3095,18 +3094,18 @@ module TypeScript.Parser { token = createMissingToken(SyntaxKind.TemplateEndToken, undefined, DiagnosticCode._0_expected, ["{"]); } - return new TemplateClauseSyntax(parseNodeData, expression, token); + return new TemplateClauseSyntax(contextFlags, expression, token); } function parseCastExpression(lessThanToken: ISyntaxToken): CastExpressionSyntax { - return new CastExpressionSyntax(parseNodeData, + return new CastExpressionSyntax(contextFlags, consumeToken(lessThanToken), parseType(), eatToken(SyntaxKind.GreaterThanToken), tryParseUnaryExpressionOrHigher(currentToken(), /*force:*/ true)); } function parseParenthesizedExpression(openParenToken: ISyntaxToken): ParenthesizedExpressionSyntax { // ( Expression[In, ?Yield] ) - return new ParenthesizedExpressionSyntax(parseNodeData, + return new ParenthesizedExpressionSyntax(contextFlags, consumeToken(openParenToken), allowInAnd(parseExpression), eatToken(SyntaxKind.CloseParenToken)); @@ -3171,7 +3170,7 @@ module TypeScript.Parser { return undefined; } - return new ParenthesizedArrowFunctionExpressionSyntax(parseNodeData, + return new ParenthesizedArrowFunctionExpressionSyntax(contextFlags, callSignature, eatToken(SyntaxKind.EqualsGreaterThanToken), parseArrowFunctionBody()); @@ -3202,7 +3201,7 @@ module TypeScript.Parser { // We've seen a statement (and it isn't an expressionStatement like 'foo()'), so // treat this like a block with a missing open brace. - return new BlockSyntax(parseNodeData, + return new BlockSyntax(contextFlags, /*equalsGreaterThanToken*/ undefined, eatToken(SyntaxKind.OpenBraceToken), parseFunctionBlockStatements(), @@ -3226,7 +3225,7 @@ module TypeScript.Parser { function parseSimpleArrowFunctionExpression(): SimpleArrowFunctionExpressionSyntax { // Debug.assert(isSimpleArrowFunctionExpression()); - return new SimpleArrowFunctionExpressionSyntax(parseNodeData, + return new SimpleArrowFunctionExpressionSyntax(contextFlags, eatSimpleParameter(), eatToken(SyntaxKind.EqualsGreaterThanToken), parseArrowFunctionBody()); @@ -3403,7 +3402,7 @@ module TypeScript.Parser { function parseObjectLiteralExpression(openBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBraceToken); - return new ObjectLiteralExpressionSyntax(parseNodeData, + return new ObjectLiteralExpressionSyntax(contextFlags, consumeToken(openBraceToken), parseSeparatedSyntaxList(ListParsingState.ObjectLiteralExpression_PropertyAssignments), eatToken(SyntaxKind.CloseBraceToken)); @@ -3463,7 +3462,7 @@ module TypeScript.Parser { // // Also, if we have an identifier and it is followed by a colon then this is // definitely a simple property assignment. - return new SimplePropertyAssignmentSyntax(parseNodeData, + return new SimplePropertyAssignmentSyntax(contextFlags, propertyName, eatToken(SyntaxKind.ColonToken), allowInAnd(parseAssignmentExpressionOrHigher)); @@ -3548,7 +3547,7 @@ module TypeScript.Parser { // ComputedPropertyName[Yield] : // [AssignmentExpression[In, ?Yield]] - return new ComputedPropertyNameSyntax(parseNodeData, + return new ComputedPropertyNameSyntax(contextFlags, eatToken(SyntaxKind.OpenBracketToken), allowInAnd(parseAssignmentExpressionOrHigher), eatToken(SyntaxKind.CloseBracketToken)); @@ -3556,7 +3555,7 @@ module TypeScript.Parser { function parseFunctionPropertyAssignment(asteriskToken: ISyntaxToken, propertyName: IPropertyNameSyntax): FunctionPropertyAssignmentSyntax { var isGenerator = asteriskToken !== undefined; - return new FunctionPropertyAssignmentSyntax(parseNodeData, + return new FunctionPropertyAssignmentSyntax(contextFlags, asteriskToken, propertyName, parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), @@ -3565,7 +3564,7 @@ module TypeScript.Parser { function parseArrayLiteralExpression(openBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBracketToken); - return new ArrayLiteralExpressionSyntax(parseNodeData, + return new ArrayLiteralExpressionSyntax(contextFlags, consumeToken(openBracketToken), parseSeparatedSyntaxList(ListParsingState.ArrayLiteralExpression_AssignmentExpressions), eatToken(SyntaxKind.CloseBracketToken)); @@ -3575,7 +3574,7 @@ module TypeScript.Parser { // Different from function blocks in that we don't check for strict mode, nor do accept // a block without an open curly. var openBraceToken: ISyntaxToken; - return new BlockSyntax(parseNodeData, + return new BlockSyntax(contextFlags, tryEatToken(SyntaxKind.EqualsGreaterThanToken), openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.Block_Statements) : [], @@ -3591,7 +3590,7 @@ module TypeScript.Parser { // check if they wrote something like: => expr // or if it was more like : => statement if (isExpression(currentToken())) { - return new ExpressionBody(parseNodeData, equalsGreaterThanToken, parseExpression()); + return new ExpressionBody(contextFlags, equalsGreaterThanToken, parseExpression()); } } @@ -3600,7 +3599,7 @@ module TypeScript.Parser { function parseFunctionBlock(_allowYield: boolean, equalsGreaterThanToken: ISyntaxToken): BlockSyntax { var openBraceToken: ISyntaxToken; - return new BlockSyntax(parseNodeData, + return new BlockSyntax(contextFlags, equalsGreaterThanToken, openBraceToken = eatToken(SyntaxKind.OpenBraceToken), equalsGreaterThanToken || openBraceToken.fullWidth() > 0 @@ -3618,7 +3617,7 @@ module TypeScript.Parser { } function parseCallSignature(requireCompleteTypeParameterList: boolean, _yieldContext: boolean, _generatorParameterContext: boolean): CallSignatureSyntax { - return new CallSignatureSyntax(parseNodeData, + return new CallSignatureSyntax(contextFlags, tryParseTypeParameterList(requireCompleteTypeParameterList), parseParameterList(_yieldContext, _generatorParameterContext), parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false)); @@ -3645,7 +3644,7 @@ module TypeScript.Parser { } else { releaseRewindPoint(rewindPoint); - return new TypeParameterListSyntax(parseNodeData, lessThanToken, typeParameters, greaterThanToken); + return new TypeParameterListSyntax(contextFlags, lessThanToken, typeParameters, greaterThanToken); } } @@ -3659,7 +3658,7 @@ module TypeScript.Parser { return undefined; } - return new TypeParameterSyntax(parseNodeData, eatIdentifierToken(), tryParseConstraint()); + return new TypeParameterSyntax(contextFlags, eatIdentifierToken(), tryParseConstraint()); } function tryParseConstraint(): ConstraintSyntax { @@ -3667,7 +3666,7 @@ module TypeScript.Parser { return undefined; } - return new ConstraintSyntax(parseNodeData, eatToken(SyntaxKind.ExtendsKeyword), parseTypeOrExpression()); + return new ConstraintSyntax(contextFlags, eatToken(SyntaxKind.ExtendsKeyword), parseTypeOrExpression()); } function parseParameterList(_yieldContext: boolean, _generatorParameterContext: boolean): ParameterListSyntax { @@ -3693,7 +3692,7 @@ module TypeScript.Parser { setGeneratorParameterContext(_generatorParameterContext); var openParenToken: ISyntaxToken; - var result = new ParameterListSyntax(parseNodeData, + var result = new ParameterListSyntax(contextFlags, openParenToken = eatToken(SyntaxKind.OpenParenToken), openParenToken.fullWidth() > 0 ? parseSeparatedSyntaxList(ListParsingState.ParameterList_Parameters) : [], eatToken(SyntaxKind.CloseParenToken)); @@ -3720,7 +3719,7 @@ module TypeScript.Parser { } function parseTypeAnnotation(allowStringLiteral: boolean): TypeAnnotationSyntax { - return new TypeAnnotationSyntax(parseNodeData, consumeToken(currentToken()), parseTypeAnnotationType(allowStringLiteral)); + return new TypeAnnotationSyntax(contextFlags, consumeToken(currentToken()), parseTypeAnnotationType(allowStringLiteral)); } function isType(): boolean { @@ -3804,7 +3803,7 @@ module TypeScript.Parser { if (type) { var barToken: ISyntaxToken; while ((barToken = currentToken()).kind === SyntaxKind.BarToken) { - type = new UnionTypeSyntax(parseNodeData, type, consumeToken(barToken), parsePrimaryType()); + type = new UnionTypeSyntax(contextFlags, type, consumeToken(barToken), parsePrimaryType()); } } @@ -3832,14 +3831,14 @@ module TypeScript.Parser { break; } - type = new ArrayTypeSyntax(parseNodeData, type, consumeToken(_currentToken), eatToken(SyntaxKind.CloseBracketToken)); + type = new ArrayTypeSyntax(contextFlags, type, consumeToken(_currentToken), eatToken(SyntaxKind.CloseBracketToken)); } return type; } function parseTypeQuery(typeOfKeyword: ISyntaxToken): TypeQuerySyntax { - return new TypeQuerySyntax(parseNodeData, consumeToken(typeOfKeyword), parseName(/*allowIdentifierNames:*/ true)); + return new TypeQuerySyntax(contextFlags, consumeToken(typeOfKeyword), parseName(/*allowIdentifierNames:*/ true)); } function tryParseNonArrayType(): ITypeSyntax { @@ -3867,7 +3866,7 @@ module TypeScript.Parser { } function parseParenthesizedType(openParenToken: ISyntaxToken): ParenthesizedTypeSyntax { - return new ParenthesizedTypeSyntax(parseNodeData, consumeToken(openParenToken), parseType(), eatToken(SyntaxKind.CloseParenToken)); + return new ParenthesizedTypeSyntax(contextFlags, consumeToken(openParenToken), parseType(), eatToken(SyntaxKind.CloseParenToken)); } function tryParseNameOrGenericType(): ITypeSyntax { @@ -3887,7 +3886,7 @@ module TypeScript.Parser { var typeArgumentList = tryParseTypeArgumentList(/*inExpression:*/ false); return !typeArgumentList ? name - : new GenericTypeSyntax(parseNodeData, name, typeArgumentList); + : new GenericTypeSyntax(contextFlags, name, typeArgumentList); } function isFunctionType(): boolean { @@ -3955,7 +3954,7 @@ module TypeScript.Parser { function parseFunctionType(): FunctionTypeSyntax { // Function types only exist in the type space and not the expression space. So they // aren't in the [Yield] or [GeneratorParameter] context. - return new FunctionTypeSyntax(parseNodeData, + return new FunctionTypeSyntax(contextFlags, tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), parseParameterList(/*yield:*/ false, /*generatorParameter:*/ false), eatToken(SyntaxKind.EqualsGreaterThanToken), parseType()); @@ -3964,7 +3963,7 @@ module TypeScript.Parser { function parseConstructorType(): ConstructorTypeSyntax { // Constructor types only exist in the type space and not the expression space. So they // aren't in the [Yield] or [GeneratorParameter] context. - return new ConstructorTypeSyntax(parseNodeData, + return new ConstructorTypeSyntax(contextFlags, eatToken(SyntaxKind.NewKeyword), tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), parseParameterList(/*yield:*/ false, /*generatorParameter:*/ false), @@ -3987,7 +3986,7 @@ module TypeScript.Parser { } function eatSimpleParameter() { - return new ParameterSyntax(parseNodeData, + return new ParameterSyntax(contextFlags, /*dotDotDotToken:*/ undefined, /*modifiers:*/ [], eatIdentifierToken(), /*questionToken:*/ undefined, /*typeAnnotation:*/ undefined, /*equalsValueClause:*/ undefined); } @@ -4036,7 +4035,7 @@ module TypeScript.Parser { : parseEqualsValueClause(); } - return new ParameterSyntax(parseNodeData, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); + return new ParameterSyntax(contextFlags, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); } function parseSyntaxList(currentListType: ListParsingState, processItems?: (items: any[]) => void): T[] { From 8a615669e5045fb47d27844d409bddeb192378bd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 18:56:53 -0800 Subject: [PATCH 160/178] Extract context flags into their own enum. --- src/compiler/parser.ts | 28 ++++++++++++++++------------ src/compiler/types.ts | 16 ++++++++++------ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b88f08dc6ca..60ffa5d4b3c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -897,12 +897,16 @@ module ts { // understand when these values should be changed versus when they should be inherited. var strictModeContext = false; var disallowInContext = false; + var yieldContext: boolean = false; + var generatorParameterContext: boolean = false; var contextFlags: number = 0; function updateContextFlags() { contextFlags = - (strictModeContext ? NodeFlags.ParsedInStrictModeContext : 0) | - (disallowInContext ? NodeFlags.ParsedInDisallowInContext : 0); + (strictModeContext ? ParserContextFlags.ParsedInStrictModeContext : 0) | + (disallowInContext ? ParserContextFlags.ParsedInDisallowInContext : 0) | + (yieldContext ? ParserContextFlags.ParsedInYieldContext : 0) | + (generatorParameterContext ? ParserContextFlags.ParsedInGeneratorParameterContext : 0); } function setStrictModeContext(val: boolean) { @@ -3759,7 +3763,7 @@ module ts { } function checkBinaryExpression(node: BinaryExpression) { - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { if (isEvalOrArgumentsIdentifier(node.left)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an @@ -3911,7 +3915,7 @@ module ts { var colonStart = skipTrivia(sourceText, node.variable.end); return grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); } - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments return reportInvalidUseInStrictMode(node.variable); @@ -4031,7 +4035,7 @@ module ts { } function checkFunctionName(name: Node) { - if (name && name.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { + if (name && name.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) return reportInvalidUseInStrictMode(name); @@ -4152,7 +4156,7 @@ module ts { var GetAccessor = 2; var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; - var inStrictMode = (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) !== 0; + var inStrictMode = (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) !== 0; for (var i = 0, n = node.properties.length; i < n; i++) { var prop = node.properties[i]; @@ -4216,7 +4220,7 @@ module ts { function checkNumericLiteral(node: LiteralExpression): boolean { if (node.flags & NodeFlags.OctalLiteral) { - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } else if (languageVersion >= ScriptTarget.ES5) { @@ -4360,7 +4364,7 @@ module ts { // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { return reportInvalidUseInStrictMode(node.name); } } @@ -4419,13 +4423,13 @@ module ts { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { return reportInvalidUseInStrictMode(node.operand); } } function checkPrefixOperator(node: UnaryExpression) { - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator @@ -4610,7 +4614,7 @@ module ts { if (!inAmbientContext && !node.initializer && isConst(node)) { return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); } - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments return reportInvalidUseInStrictMode(node.name); @@ -4672,7 +4676,7 @@ module ts { } function checkWithStatement(node: WithStatement): boolean { - if (node.parserContextFlags & NodeFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such // a context is an return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 6e4efbc3926..8539ac8fc83 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -270,18 +270,22 @@ module ts { Let = 0x00000800, // Variable declaration Const = 0x00001000, // Variable declaration - // Set if this node was parsed in strict mode. Used for grammar error checks, as well as - // checking if the node can be reused in incremental settings. - ParsedInStrictModeContext = 0x00002000, - ParsedInDisallowInContext = 0x00004000, - - OctalLiteral = 0x00008000, + OctalLiteral = 0x00002000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, BlockScoped = Let | Const } + export const enum ParserContextFlags { + // Set if this node was parsed in strict mode. Used for grammar error checks, as well as + // checking if the node can be reused in incremental settings. + ParsedInStrictModeContext = 0x1, + ParsedInDisallowInContext = 0x2, + ParsedInYieldContext = 0x4, + ParsedInGeneratorParameterContext = 0x8, + } + export interface Node extends TextRange { kind: SyntaxKind; flags: NodeFlags; From 726de4b40232083433220ee6fed8643453528034 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 21:04:46 -0800 Subject: [PATCH 161/178] Add the context mutation operators. --- src/compiler/parser.ts | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 60ffa5d4b3c..a7dff2ea809 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -919,6 +919,16 @@ module ts { updateContextFlags(); } + function setYieldContext(val: boolean) { + yieldContext = val; + updateContextFlags(); + } + + function setGeneratorParameterContext(val: boolean) { + generatorParameterContext = val; + updateContextFlags(); + } + function allowInAnd(func: () => T): T { if (disallowInContext) { setDisallowInContext(false); @@ -943,6 +953,54 @@ module ts { return result; } + function enterYieldContextAnd(func: () => T): T { + if (yieldContext) { + // no need to do anything special if we're already in the [Yield] context. + return func(); + } + + setYieldContext(true); + var result = func(); + setYieldContext(false); + return result; + } + + function exitYieldContextAnd(func: () => T): T { + if (yieldContext) { + setYieldContext(false); + var result = func(); + setYieldContext(true); + return result; + } + + // no need to do anything special if we're not in the [Yield] context. + return func(); + } + + function enterGeneratorParameterContextAnd(func: () => T): T { + if (generatorParameterContext) { + // no need to do anything special if we're already in the [GeneratorParameter] context + return func(); + } + + setGeneratorParameterContext(true); + var result = func(); + setGeneratorParameterContext(false); + return result; + } + + function exitGeneratorParameterContextAnd(func: () => T): T { + if (generatorParameterContext) { + setGeneratorParameterContext(false); + var result = func(); + setGeneratorParameterContext(true); + return result; + } + + // no need to do anything special if we're not in the [GeneratorParameter] context + return func(); + } + function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); } From 7e1a62a8c298aaed45fef9b840f5ccbbb87f11db Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 22:40:28 -0800 Subject: [PATCH 162/178] Add support for parsing generator functions and yield expressions. --- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 + src/compiler/parser.ts | 333 ++++++++++++++---- src/compiler/types.ts | 7 +- 4 files changed, 268 insertions(+), 77 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index cac9f75e2ee..c877c6f9773 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -125,6 +125,7 @@ module ts { Unterminated_template_literal: { code: 1160, category: DiagnosticCategory.Error, key: "Unterminated template literal." }, Unterminated_regular_expression_literal: { code: 1161, category: DiagnosticCategory.Error, key: "Unterminated regular expression literal." }, An_object_member_cannot_be_declared_optional: { code: 1162, category: DiagnosticCategory.Error, key: "An object member cannot be declared optional." }, + yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: DiagnosticCategory.Error, key: "'yield' expression must be contained_within a generator declaration." }, Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index adf1bf041cf..5ee797482a9 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -491,6 +491,10 @@ "category": "Error", "code": 1162 }, + "'yield' expression must be contained_within a generator declaration.": { + "category": "Error", + "code": 1163 + }, "Duplicate identifier '{0}'.": { "category": "Error", diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a7dff2ea809..88f4a9b4adb 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -977,30 +977,6 @@ module ts { return func(); } - function enterGeneratorParameterContextAnd(func: () => T): T { - if (generatorParameterContext) { - // no need to do anything special if we're already in the [GeneratorParameter] context - return func(); - } - - setGeneratorParameterContext(true); - var result = func(); - setGeneratorParameterContext(false); - return result; - } - - function exitGeneratorParameterContextAnd(func: () => T): T { - if (generatorParameterContext) { - setGeneratorParameterContext(false); - var result = func(); - setGeneratorParameterContext(true); - return result; - } - - // no need to do anything special if we're not in the [GeneratorParameter] context - return func(); - } - function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); } @@ -1126,7 +1102,17 @@ module ts { } function isIdentifier(): boolean { - return token === SyntaxKind.Identifier || (strictModeContext ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord); + if (token === SyntaxKind.Identifier) { + return true; + } + + // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is + // considered a keyword and is not an identifier. + if (token === SyntaxKind.YieldKeyword && yieldContext) { + return false; + } + + return strictModeContext ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord; } function parseExpected(t: SyntaxKind): boolean { @@ -1247,7 +1233,7 @@ module ts { function parseAnyContextualModifier(): boolean { return isModifier(token) && tryParse(() => { nextToken(); - return token === SyntaxKind.OpenBracketToken || isPropertyName(); + return token === SyntaxKind.OpenBracketToken || token === SyntaxKind.AsteriskToken || isPropertyName(); }); } @@ -1268,7 +1254,7 @@ module ts { return lookAhead(isClassMemberStart); case ParsingContext.EnumMembers: case ParsingContext.ObjectLiteralMembers: - return isPropertyName(); + return token === SyntaxKind.AsteriskToken || isPropertyName(); case ParsingContext.BaseTypeReferences: return isIdentifier() && ((token !== SyntaxKind.ExtendsKeyword && token !== SyntaxKind.ImplementsKeyword) || !lookAhead(() => (nextToken(), isIdentifier()))); case ParsingContext.VariableDeclarations: @@ -1460,12 +1446,13 @@ module ts { return result; } - function parseBracketedList(kind: ParsingContext, parseElement: () => T, startToken: SyntaxKind, endToken: SyntaxKind): NodeArray { - if (parseExpected(startToken)) { + function parseBracketedList(kind: ParsingContext, parseElement: () => T, open: SyntaxKind, close: SyntaxKind): NodeArray { + if (parseExpected(open)) { var result = parseDelimitedList(kind, parseElement); - parseExpected(endToken); + parseExpected(close); return result; } + return createMissingList(); } @@ -1637,7 +1624,15 @@ module ts { if (parseOptional(SyntaxKind.DotDotDotToken)) { node.flags |= NodeFlags.Rest; } - node.name = parseIdentifier(); + + // SingleNameBinding[Yield,GeneratorParameter] : See 13.2.3 + // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt + // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt + + node.name = generatorParameterContext + ? enterYieldContextAnd(parseIdentifier) + : parseIdentifier(); + if (node.name.kind === SyntaxKind.Missing && node.flags === 0 && isModifier(token)) { // in cases like // 'use strict' @@ -1654,7 +1649,9 @@ module ts { node.flags |= NodeFlags.QuestionMark; } node.type = parseParameterType(); - node.initializer = parseInitializer(/*inParameter*/ true); + node.initializer = generatorParameterContext + ? exitYieldContextAnd(parseParameterInitializer) + : parseParameterInitializer(); // Do not check for initializers in an ambient context for parameters. This is not // a grammar error because the grammar allows arbitrary call signatures in @@ -1667,18 +1664,28 @@ module ts { return finishNode(node); } - function parseSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean): ParsedSignature { + function parseParameterInitializer() { + return parseInitializer(/*inParameter*/ true); + } + + function parseSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, isGenerator: boolean): ParsedSignature { var signature = {}; - fillSignature(kind, returnToken, returnTokenRequired, signature); + fillSignature(kind, returnToken, returnTokenRequired, isGenerator, signature); return signature; } - function fillSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, signature: ParsedSignature): void { + function fillSignature( + kind: SyntaxKind, + returnToken: SyntaxKind, + returnTokenRequired: boolean, + isGenerator: boolean, + signature: ParsedSignature): void { + if (kind === SyntaxKind.ConstructSignature) { parseExpected(SyntaxKind.NewKeyword); } signature.typeParameters = parseTypeParameters(); - signature.parameters = parseParameterList(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken); + signature.parameters = parseParameterList(/*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator); if (returnTokenRequired) { parseExpected(returnToken); @@ -1691,13 +1698,43 @@ module ts { // Because we use this for index signatures as well, we sometimes use // parentheses, and sometimes use brackets. - function parseParameterList(startDelimiter: SyntaxKind, endDelimiter: SyntaxKind) { - return parseBracketedList(ParsingContext.Parameters, parseParameter, startDelimiter, endDelimiter); + function parseParameterList(_yieldContext: boolean, _generatorParameterContext: boolean) { + // FormalParameters[Yield,GeneratorParameter] : + // ... + // + // FormalParameter[Yield,GeneratorParameter] : + // BindingElement[?Yield, ?GeneratorParameter] + // + // BindingElement[Yield, GeneratorParameter ] : See 13.2.3 + // SingleNameBinding[?Yield, ?GeneratorParameter] + // [+GeneratorParameter]BindingPattern[?Yield, GeneratorParameter]Initializer[In]opt + // [~GeneratorParameter]BindingPattern[?Yield]Initializer[In, ?Yield]opt + // + // SingleNameBinding[Yield, GeneratorParameter] : See 13.2.3 + // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt + // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt + if (parseExpected(SyntaxKind.OpenParenToken)) { + var savedYieldContext = yieldContext; + var savedGeneratorParameterContext = generatorParameterContext; + + setYieldContext(_yieldContext); + setGeneratorParameterContext(_generatorParameterContext); + + var result = parseDelimitedList(ParsingContext.Parameters, parseParameter); + parseExpected(SyntaxKind.CloseParenToken); + + setYieldContext(savedYieldContext); + setGeneratorParameterContext(savedGeneratorParameterContext); + + return result; + } + + return createMissingList(); } function parseSignatureMember(kind: SyntaxKind, returnToken: SyntaxKind): SignatureDeclaration { var node = createNode(kind); - fillSignature(kind, returnToken, /* returnTokenRequired */ false, node); + fillSignature(kind, returnToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); parseSemicolon(); return finishNode(node); } @@ -1705,7 +1742,7 @@ module ts { function parseIndexSignatureMember(fullStart: number, modifiers: ModifiersArray): SignatureDeclaration { var node = createNode(SyntaxKind.IndexSignature, fullStart); setModifiers(node, modifiers); - node.parameters = parseParameterList(SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); + node.parameters = parseBracketedList(ParsingContext.Parameters, parseParameter, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken); node.type = parseTypeAnnotation(); parseSemicolon(); return finishNode(node) @@ -1723,7 +1760,11 @@ module ts { var method = createNode(SyntaxKind.Method, fullStart); method.name = name; method.flags = flags; - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, method); + + // Method signatues don't exist in expression contexts. So they have neither + // [Yield] nor [GeneratorParameter] + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, method); + parseSemicolon(); return finishNode(method); } @@ -1806,7 +1847,7 @@ module ts { function parseFunctionType(typeKind: SyntaxKind): SignatureDeclaration { var node = createNode(typeKind); fillSignature(typeKind === SyntaxKind.FunctionType ? SyntaxKind.CallSignature : SyntaxKind.ConstructSignature, - SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true, node); + SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true, /*isGenerator:*/ false, node); return finishNode(node); } @@ -1926,6 +1967,23 @@ module ts { } function parseType(): TypeNode { + // The rules about 'yield' only apply to actual code/expression contexts. They don't + // apply to 'type' contexts. So we disable these parameters here before moving on. + var savedYieldContext = yieldContext; + var savedGeneratorParameterContext = generatorParameterContext; + + setYieldContext(false); + setGeneratorParameterContext(false); + + var result = parseTypeWorker(); + + setYieldContext(savedYieldContext); + setGeneratorParameterContext(savedGeneratorParameterContext); + + return result; + } + + function parseTypeWorker(): TypeNode { if (isStartOfFunctionType()) { return parseFunctionType(SyntaxKind.FunctionType); } @@ -1970,6 +2028,10 @@ module ts { case SyntaxKind.MinusMinusToken: case SyntaxKind.LessThanToken: case SyntaxKind.Identifier: + case SyntaxKind.YieldKeyword: + // Yield always starts an expression. Either it is an identifier (in which case + // it is definitely an expression). Or it's a keyword (either because we're in + // a generator, or in strict mode (or both)) and it started a yield expression. return true; default: return isIdentifier(); @@ -2018,18 +2080,22 @@ module ts { } function parseAssignmentExpression(): Expression { - // Augmented by TypeScript: - // - // AssignmentExpression[in]: - // 1) ConditionalExpression[in] - // 2) LeftHandSideExpression = AssignmentExpression[in] - // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[in] - // 4) ArrowFunctionExpression <-- added by TypeScript + // AssignmentExpression[in,yield]: + // 1) ConditionalExpression[?in,?yield] + // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield] + // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield] + // 4) ArrowFunctionExpression[?in,?yield] + // 5) [+Yield] YieldExpression[?In] // // Note: for ease of implementation we treat productions '2' and '3' as the same thing. // (i.e. they're both BinaryExpressions with an assignment operator in it). - // First, check if we have an arrow function (production '4') that starts with a parenthesized + // First, do the simple check if we have a YieldExpression (production '5'). + if (isYieldExpression()) { + return parseYieldExpression(); + } + + // Then, check if we have an arrow function (production '4') that starts with a parenthesized // parameter list. If we do, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is // not a LeftHandSideExpression, nor does it start a ConditionalExpression. So we are done // with AssignmentExpression if we see one. @@ -2062,6 +2128,66 @@ module ts { return expr; } + function isYieldExpression(): boolean { + if (token === SyntaxKind.YieldKeyword) { + // If we have a 'yield' keyword, and htis is a context where yield expressions are + // allowed, then definitely parse out a yield expression. + if (yieldContext) { + return true; + } + + if (strictModeContext) { + // If we're in strict mode, then 'yield' is a keyword, could only ever start + // a yield expression. + return true; + } + + // We're in a context where 'yield expr' is not allowed. However, if we can + // definitely tell that the user was trying to parse a 'yield expr' and not + // just a normal expr that start with a 'yield' identifier, then parse out + // a 'yield expr'. We can then report an error later that they are only + // allowed in generator expressions. + // + // for example, if we see 'yield(foo)', then we'll have to treat that as an + // invocation expression of something called 'yield'. However, if we have + // 'yield foo' then that is not legal as a normal expression, so we can + // definitely recognize this as a yield expression. + // + // for now we just check if the next token is an identifier. More heuristics + // can be added here later as necessary. We just need to make sure that we + // don't accidently consume something legal. + return lookAhead(() => { + nextToken(); + return !scanner.hasPrecedingLineBreak() && isIdentifier(); + }); + } + + return false; + } + + function parseYieldExpression(): YieldExpression { + var node = createNode(SyntaxKind.YieldExpression); + + // YieldExpression[In] : + // yield + // yield [no LineTerminator here] [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] + // yield [no LineTerminator here] * [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] + nextToken(); + + if (!scanner.hasPrecedingLineBreak() && + (token === SyntaxKind.AsteriskToken || isStartOfExpression())) { + parseOptional(SyntaxKind.AsteriskToken); + + node.expression = parseAssignmentExpression(); + return finishNode(node); + } + else { + // if the next token is not on the same line as yield. or we don't have an '*' or + // the start of an expressin, then this is just a simple "yield" expression. + return finishNode(node); + } + } + function parseSimpleArrowFunctionExpression(identifier: Identifier): Expression { Debug.assert(token === SyntaxKind.EqualsGreaterThanToken, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); parseExpected(SyntaxKind.EqualsGreaterThanToken); @@ -2091,7 +2217,8 @@ module ts { var pos = getNodePos(); if (triState === Tristate.True) { - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); + // Arrow function are never generators. + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false); // If we have an arrow, then try to parse the body. // Even if not, try to parse if we have an opening brace, just in case we're in an error state. @@ -2194,7 +2321,8 @@ module ts { function tryParseSignatureIfArrowOrBraceFollows(): ParsedSignature { return tryParse(() => { - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); + // Arrow functions are never generators. + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false); // Parsing a signature isn't enough. // Parenthesized arrow signatures often look like other valid expressions. @@ -2216,7 +2344,7 @@ module ts { var body: Node; if (token === SyntaxKind.OpenBraceToken) { - body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); + body = parseFunctionBlock(/*allowYield:*/ false, /* ignoreMissingOpenBrace */ false); } else if (isStatement(/* inErrorRecovery */ true) && !isStartOfExpressionStatement() && token !== SyntaxKind.FunctionKeyword) { // Check if we got a plain statement (i.e. no expression-statements, no functions expressions/declarations) @@ -2233,7 +2361,7 @@ module ts { // up preemptively closing the containing construct. // // Note: even when 'ignoreMissingOpenBrace' is passed as true, parseBody will still error. - body = parseFunctionBlock(/* ignoreMissingOpenBrace */ true); + body = parseFunctionBlock(/*allowYield:*/ false, /* ignoreMissingOpenBrace */ true); } else { body = parseAssignmentExpression(); @@ -2575,15 +2703,17 @@ module ts { function parsePropertyAssignment(): Declaration { var nodePos = scanner.getStartPos(); + var isGenerator = parseOptional(SyntaxKind.AsteriskToken); var tokenIsIdentifier = isIdentifier(); var nameToken = token; var propertyName = parsePropertyName(); var node: Declaration; - if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { + if (isGenerator || token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { node = createNode(SyntaxKind.PropertyAssignment, nodePos); node.name = propertyName; - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - var body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); + + var body = parseFunctionBlock(isGenerator, /* ignoreMissingOpenBrace */ false); // do not propagate property name as name for function expression // for scenarios like // var x = 1; @@ -2640,14 +2770,25 @@ module ts { } function parseFunctionExpression(): FunctionExpression { + // GeneratorExpression : + // function * BindingIdentifier[Yield]opt (FormalParameters[Yield, GeneratorParameter]) { GeneratorBody[Yield] } + // FunctionExpression: + // function BindingIdentifieropt(FormalParameters) { FunctionBody } + var pos = getNodePos(); parseExpected(SyntaxKind.FunctionKeyword); - var name = isIdentifier() ? parseIdentifier() : undefined; - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false); - var body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false); + var isGenerator = parseOptional(SyntaxKind.AsteriskToken); + var name = isGenerator ? enterYieldContextAnd(parseOptionalIdentifier) : parseOptionalIdentifier(); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); + + var body = parseFunctionBlock(/*allowYield:*/ isGenerator, /* ignoreMissingOpenBrace */ false); return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body); } + function parseOptionalIdentifier() { + return isIdentifier() ? parseIdentifier() : undefined; + } + function makeFunctionExpression(kind: SyntaxKind, pos: number, name: Identifier, sig: ParsedSignature, body: Node): FunctionExpression { var node = createNode(kind, pos); node.name = name; @@ -2682,10 +2823,15 @@ module ts { return finishNode(node); } - function parseFunctionBlock(ignoreMissingOpenBrace: boolean): Block { + function parseFunctionBlock(allowYield: boolean, ignoreMissingOpenBrace: boolean): Block { + var savedYieldContext = yieldContext; + setYieldContext(allowYield); + var block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true); block.kind = SyntaxKind.FunctionBlock; + setYieldContext(savedYieldContext); + return block; } @@ -3050,9 +3196,9 @@ module ts { } } - function parseFunctionBlockOrSemicolon(): Block { + function parseFunctionBlockOrSemicolon(isGenerator: boolean): Block { if (token === SyntaxKind.OpenBraceToken) { - return parseFunctionBlock(/* ignoreMissingOpenBrace */ false); + return parseFunctionBlock(isGenerator, /* ignoreMissingOpenBrace */ false); } if (canParseSemicolon()) { @@ -3111,9 +3257,10 @@ module ts { var node = createNode(SyntaxKind.FunctionDeclaration, fullStart); setModifiers(node, modifiers); parseExpected(SyntaxKind.FunctionKeyword); + var isGenerator = parseOptional(SyntaxKind.AsteriskToken); node.name = parseIdentifier(); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); - node.body = parseFunctionBlockOrSemicolon(); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator, node); + node.body = parseFunctionBlockOrSemicolon(isGenerator); return finishNode(node); } @@ -3121,12 +3268,13 @@ module ts { var node = createNode(SyntaxKind.Constructor, pos); setModifiers(node, modifiers); parseExpected(SyntaxKind.ConstructorKeyword); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); - node.body = parseFunctionBlockOrSemicolon(); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); + node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } function parsePropertyMemberDeclaration(fullStart: number, modifiers: ModifiersArray): Declaration { + var isGenerator = parseOptional(SyntaxKind.AsteriskToken); var name = parsePropertyName(); var flags = modifiers ? modifiers.flags : 0; if (parseOptional(SyntaxKind.QuestionToken)) { @@ -3135,15 +3283,15 @@ module ts { flags |= NodeFlags.QuestionMark; } - if (token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { + if (isGenerator || token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { var method = createNode(SyntaxKind.Method, fullStart); setModifiers(method, modifiers); if (flags) { method.flags = flags; } method.name = name; - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, method); - method.body = parseFunctionBlockOrSemicolon(); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator, method); + method.body = parseFunctionBlockOrSemicolon(isGenerator); return finishNode(method); } else { @@ -3164,8 +3312,8 @@ module ts { var node = createNode(kind, fullStart); setModifiers(node, modifiers); node.name = parsePropertyName(); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, node); - node.body = parseFunctionBlockOrSemicolon(); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); + node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } @@ -3178,6 +3326,10 @@ module ts { nextToken(); } + if (token === SyntaxKind.AsteriskToken) { + return true; + } + // Try to get the first property-like token following all modifiers. // This can either be an identifier or the 'get' or 'set' keywords. if (isPropertyName()) { @@ -3254,7 +3406,7 @@ module ts { if (token === SyntaxKind.ConstructorKeyword) { return parseConstructorDeclaration(fullStart, modifiers); } - if (token >= SyntaxKind.Identifier || token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral) { + if (token >= SyntaxKind.Identifier || token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral || token === SyntaxKind.AsteriskToken) { return parsePropertyMemberDeclaration(fullStart, modifiers); } if (token === SyntaxKind.OpenBracketToken) { @@ -3273,12 +3425,26 @@ module ts { node.typeParameters = parseTypeParameters(); // TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates - node.baseType = parseOptional(SyntaxKind.ExtendsKeyword) ? parseTypeReference() : undefined; + + // ClassTail[Yield,GeneratorParameter] : See 14.5 + // [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt } + // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } + + node.baseType = generatorParameterContext + ? exitYieldContextAnd(parseClassBaseType) + : parseClassBaseType(); + if (parseOptional(SyntaxKind.ImplementsKeyword)) { node.implementedTypes = parseDelimitedList(ParsingContext.BaseTypeReferences, parseTypeReference); } if (parseExpected(SyntaxKind.OpenBraceToken)) { - node.members = parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration); + // ClassTail[Yield,GeneratorParameter] : See 14.5 + // [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt } + // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } + + node.members = generatorParameterContext + ? exitYieldContextAnd(parseClassMembers) + : parseClassMembers(); parseExpected(SyntaxKind.CloseBraceToken); } else { @@ -3287,6 +3453,14 @@ module ts { return finishNode(node); } + function parseClassMembers() { + return parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration); + } + + function parseClassBaseType(): TypeReferenceNode { + return parseOptional(SyntaxKind.ExtendsKeyword) ? parseTypeReference() : undefined; + } + function parseInterfaceDeclaration(fullStart: number, modifiers: ModifiersArray): InterfaceDeclaration { var node = createNode(SyntaxKind.InterfaceDeclaration, fullStart); setModifiers(node, modifiers); @@ -3725,7 +3899,6 @@ module ts { return checkCallOrNewExpression(node); case SyntaxKind.EnumDeclaration: return checkEnumDeclaration(node); - case SyntaxKind.Parameter: return checkParameter(node); case SyntaxKind.BinaryExpression: return checkBinaryExpression(node); case SyntaxKind.CatchBlock: return checkCatchBlock(node); case SyntaxKind.ClassDeclaration: return checkClassDeclaration(node); @@ -3744,6 +3917,7 @@ module ts { case SyntaxKind.ModuleDeclaration: return checkModuleDeclaration(node); case SyntaxKind.ObjectLiteral: return checkObjectLiteral(node); case SyntaxKind.NumericLiteral: return checkNumericLiteral(node); + case SyntaxKind.Parameter: return checkParameter(node); case SyntaxKind.PostfixOperator: return checkPostfixOperator(node); case SyntaxKind.PrefixOperator: return checkPrefixOperator(node); case SyntaxKind.Property: return checkProperty(node); @@ -3760,6 +3934,7 @@ module ts { case SyntaxKind.VariableDeclaration: return checkVariableDeclaration(node); case SyntaxKind.VariableStatement: return checkVariableStatement(node); case SyntaxKind.WithStatement: return checkWithStatement(node); + case SyntaxKind.YieldExpression: return checkYieldExpression(node); } } @@ -4740,6 +4915,12 @@ module ts { return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); } } + + function checkYieldExpression(node: YieldExpression): boolean { + if (!(node.parserContextFlags & ParserContextFlags.ParsedInYieldContext)) { + return grammarErrorOnFirstToken(node, Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration); + } + } } export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 8539ac8fc83..68d74385c03 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -183,6 +183,7 @@ module ts { ConditionalExpression, TemplateExpression, TemplateSpan, + YieldExpression, OmittedExpression, // Element Block, @@ -291,7 +292,7 @@ module ts { flags: NodeFlags; // Specific context the parser was in when this node was created. Normally undefined. // Only set when the parser was in some interesting context (like async/yield). - parserContextFlags?: NodeFlags; + parserContextFlags?: ParserContextFlags; id?: number; // Unique id (used to look up NodeLinks) parent?: Node; // Parent node (initialized by binding) symbol?: Symbol; // Symbol declared by node (initialized by binding) @@ -438,6 +439,10 @@ module ts { operator: SyntaxKind; operand: Expression; } + + export interface YieldExpression extends Expression { + expression: Expression; + } export interface BinaryExpression extends Expression { left: Expression; From 78cd1b5f7e80788b763411abd5b08cfa363b321b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 22:40:54 -0800 Subject: [PATCH 163/178] Parser tests for generators and yield expressions. --- .../es6/computedPropertyNames/ComputedPropertyName1.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName10.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName11.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName12.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName13.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName14.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName15.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName16.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName17.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName18.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName19.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName2.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName3.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName4.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName5.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName6.ts | 1 + .../es6/computedPropertyNames/ComputedPropertyName7.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName8.ts | 3 +++ .../es6/computedPropertyNames/ComputedPropertyName9.ts | 3 +++ .../MemberFunctionDeclaration1.ts | 3 +++ .../MemberFunctionDeclaration2.ts | 3 +++ .../MemberFunctionDeclaration3.ts | 3 +++ .../MemberFunctionDeclaration4.ts | 3 +++ .../MemberFunctionDeclaration5.ts | 3 +++ .../MemberFunctionDeclaration6.ts | 3 +++ .../MemberFunctionDeclaration7.ts | 3 +++ .../MemberFunctionDeclaration8.ts | 7 +++++++ .../es6/functionDeclarations/FunctionDeclaration1.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration10.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration11.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration12.ts | 1 + .../es6/functionDeclarations/FunctionDeclaration13.ts | 4 ++++ .../es6/functionDeclarations/FunctionDeclaration2.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration3.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration4.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration5.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration6.ts | 2 ++ .../es6/functionDeclarations/FunctionDeclaration7.ts | 5 +++++ .../es6/functionDeclarations/FunctionDeclaration8.ts | 1 + .../es6/functionDeclarations/FunctionDeclaration9.ts | 3 +++ .../es6/functionExpressions/FunctionExpression1.ts | 1 + .../es6/functionExpressions/FunctionExpression2.ts | 1 + .../FunctionPropertyAssignments1.ts | 1 + .../FunctionPropertyAssignments2.ts | 1 + .../FunctionPropertyAssignments3.ts | 1 + .../FunctionPropertyAssignments4.ts | 1 + .../FunctionPropertyAssignments5.ts | 1 + .../FunctionPropertyAssignments6.ts | 1 + .../cases/conformance/es6/templates/TemplateExpression1.ts | 1 + .../es6/templates/templateStringInYieldKeyword.ts | 2 +- .../conformance/es6/yieldExpressions/YieldExpression1.ts | 1 + .../conformance/es6/yieldExpressions/YieldExpression10.ts | 4 ++++ .../conformance/es6/yieldExpressions/YieldExpression11.ts | 5 +++++ .../conformance/es6/yieldExpressions/YieldExpression12.ts | 5 +++++ .../conformance/es6/yieldExpressions/YieldExpression13.ts | 1 + .../conformance/es6/yieldExpressions/YieldExpression14.ts | 5 +++++ .../conformance/es6/yieldExpressions/YieldExpression15.ts | 3 +++ .../conformance/es6/yieldExpressions/YieldExpression16.ts | 5 +++++ .../conformance/es6/yieldExpressions/YieldExpression17.ts | 1 + .../conformance/es6/yieldExpressions/YieldExpression18.ts | 2 ++ .../conformance/es6/yieldExpressions/YieldExpression19.ts | 7 +++++++ .../conformance/es6/yieldExpressions/YieldExpression2.ts | 1 + .../conformance/es6/yieldExpressions/YieldExpression3.ts | 4 ++++ .../conformance/es6/yieldExpressions/YieldExpression4.ts | 4 ++++ .../conformance/es6/yieldExpressions/YieldExpression5.ts | 3 +++ .../conformance/es6/yieldExpressions/YieldExpression6.ts | 3 +++ .../conformance/es6/yieldExpressions/YieldExpression7.ts | 3 +++ .../conformance/es6/yieldExpressions/YieldExpression8.ts | 4 ++++ .../conformance/es6/yieldExpressions/YieldExpression9.ts | 3 +++ 69 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts create mode 100644 tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts create mode 100644 tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts create mode 100644 tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts create mode 100644 tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts create mode 100644 tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts create mode 100644 tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts create mode 100644 tests/cases/conformance/es6/templates/TemplateExpression1.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts new file mode 100644 index 00000000000..0703648cf0b --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts @@ -0,0 +1 @@ +var v = { [e] }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts new file mode 100644 index 00000000000..64f8b999003 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts @@ -0,0 +1,3 @@ +class C { + [e] = 1 +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts new file mode 100644 index 00000000000..cfb1c736b40 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts @@ -0,0 +1,3 @@ +class C { + [e](); +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts new file mode 100644 index 00000000000..7e030263fcc --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts @@ -0,0 +1,3 @@ +class C { + [e]() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts new file mode 100644 index 00000000000..2783955e804 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts @@ -0,0 +1 @@ +var v: { [e]: number }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts new file mode 100644 index 00000000000..534b418854b --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts @@ -0,0 +1 @@ +var v: { [e](): number }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts new file mode 100644 index 00000000000..7b9965e8177 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts @@ -0,0 +1 @@ +var v: { [e: number]: string; [e]: number }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts new file mode 100644 index 00000000000..a088319bf94 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts @@ -0,0 +1,3 @@ +enum E { + [e] = 1 +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts new file mode 100644 index 00000000000..2d002e9ca43 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts @@ -0,0 +1 @@ +var v = { set [e](v) { } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts new file mode 100644 index 00000000000..0659070d643 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts @@ -0,0 +1 @@ +var v: { [e]?(): number }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts new file mode 100644 index 00000000000..b6c1756d097 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts @@ -0,0 +1 @@ +var v: { [e]? }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts new file mode 100644 index 00000000000..34c9d6d918a --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts @@ -0,0 +1 @@ +var v = { [e]: 1 }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts new file mode 100644 index 00000000000..08ad781e2ba --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts @@ -0,0 +1 @@ +var v = { [e]() { } }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts new file mode 100644 index 00000000000..d5a331ebb4c --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts @@ -0,0 +1 @@ +var v = { get [e]() { } }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts new file mode 100644 index 00000000000..a254f65ee67 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts @@ -0,0 +1 @@ +var v = { public get [e]() { } }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts new file mode 100644 index 00000000000..c09627a0d46 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts @@ -0,0 +1 @@ +var v = { [e]: 1, [e + e]: 2 }; \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts new file mode 100644 index 00000000000..b23944da796 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts @@ -0,0 +1,3 @@ +class C { + [e] +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts new file mode 100644 index 00000000000..18f1fd61276 --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts @@ -0,0 +1,3 @@ +class C { + public [e] +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts new file mode 100644 index 00000000000..18e290722aa --- /dev/null +++ b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts @@ -0,0 +1,3 @@ +class C { + [e]: Type +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts new file mode 100644 index 00000000000..3bb832ccf49 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts @@ -0,0 +1,3 @@ +class C { + *foo() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts new file mode 100644 index 00000000000..2174110723d --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts @@ -0,0 +1,3 @@ +class C { + public * foo() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts new file mode 100644 index 00000000000..8db736f99bb --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts @@ -0,0 +1,3 @@ +class C { + *[foo]() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts new file mode 100644 index 00000000000..0fa98ce98c4 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts @@ -0,0 +1,3 @@ +class C { + *() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts new file mode 100644 index 00000000000..474316195f0 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts @@ -0,0 +1,3 @@ +class C { + * +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts new file mode 100644 index 00000000000..1efad0a7842 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts @@ -0,0 +1,3 @@ +class C { + *foo +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts new file mode 100644 index 00000000000..93f05494107 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts @@ -0,0 +1,3 @@ +class C { + *foo() { } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts new file mode 100644 index 00000000000..069d7339869 --- /dev/null +++ b/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts @@ -0,0 +1,7 @@ +class C { + foo() { + // Make sure we don't think of *bar as the start of a generator method. + if (a) # * bar; + return bar; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts new file mode 100644 index 00000000000..650e619fc00 --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts @@ -0,0 +1,2 @@ +function * foo() { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts new file mode 100644 index 00000000000..fa7a20f78ba --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts @@ -0,0 +1,2 @@ +function * foo(a = yield => yield) { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts new file mode 100644 index 00000000000..07b452678eb --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts @@ -0,0 +1,2 @@ +function * yield() { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts new file mode 100644 index 00000000000..ff08bd514af --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts @@ -0,0 +1 @@ +var v = function * yield() { } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts new file mode 100644 index 00000000000..e5e30dc4b0e --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts @@ -0,0 +1,4 @@ +function * foo() { + // Legal to use 'yield' in a type context. + var v: yield; +} diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts new file mode 100644 index 00000000000..136dd1f9b43 --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts @@ -0,0 +1,2 @@ +function f(yield) { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts new file mode 100644 index 00000000000..33324d88158 --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts @@ -0,0 +1,2 @@ +function f(yield = yield) { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts new file mode 100644 index 00000000000..fd9170a726a --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts @@ -0,0 +1,2 @@ +function yield() { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts new file mode 100644 index 00000000000..3e97edf26a6 --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts @@ -0,0 +1,2 @@ +function*foo(yield) { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts new file mode 100644 index 00000000000..144aae6b63c --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts @@ -0,0 +1,2 @@ +function*foo(a = yield) { +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts new file mode 100644 index 00000000000..3cc50e85592 --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts @@ -0,0 +1,5 @@ +function*bar() { + // 'yield' here is an identifier, and not a yield expression. + function*foo(a = yield) { + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts new file mode 100644 index 00000000000..4b65f204bab --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts @@ -0,0 +1 @@ +var v = { [yield]: foo } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts new file mode 100644 index 00000000000..d30d6535d4b --- /dev/null +++ b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts @@ -0,0 +1,3 @@ +function * foo() { + var v = { [yield]: foo } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts b/tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts new file mode 100644 index 00000000000..42ff543edf7 --- /dev/null +++ b/tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts @@ -0,0 +1 @@ +var v = function * () { } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts b/tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts new file mode 100644 index 00000000000..2669a3e386f --- /dev/null +++ b/tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts @@ -0,0 +1 @@ +var v = function * foo() { } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts new file mode 100644 index 00000000000..1d6cb9f92fb --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts @@ -0,0 +1 @@ +var v = { *foo() { } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts new file mode 100644 index 00000000000..e58c7077a49 --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts @@ -0,0 +1 @@ +var v = { *() { } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts new file mode 100644 index 00000000000..ebcd542a2a0 --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts @@ -0,0 +1 @@ +var v = { *{ } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts new file mode 100644 index 00000000000..3b23ea4fc97 --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts @@ -0,0 +1 @@ +var v = { * } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts new file mode 100644 index 00000000000..b1628dd2f2c --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts @@ -0,0 +1 @@ +var v = { *[foo()]() { } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts new file mode 100644 index 00000000000..6bfae9ec77c --- /dev/null +++ b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts @@ -0,0 +1 @@ +var v = { *() { } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/TemplateExpression1.ts b/tests/cases/conformance/es6/templates/TemplateExpression1.ts new file mode 100644 index 00000000000..e6980c4c8e2 --- /dev/null +++ b/tests/cases/conformance/es6/templates/TemplateExpression1.ts @@ -0,0 +1 @@ +var v = `foo ${ a \ No newline at end of file diff --git a/tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts b/tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts index 4a80e452251..d020d7c7607 100644 --- a/tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts +++ b/tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts @@ -1,4 +1,4 @@ -function* gen { +function* gen() { // Once this is supported, the inner expression does not need to be parenthesized. var x = yield `abc${ x }def`; } diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts new file mode 100644 index 00000000000..bdbfe1e27a7 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts @@ -0,0 +1 @@ +yield; \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts new file mode 100644 index 00000000000..b95174babdf --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts @@ -0,0 +1,4 @@ +var v = { * foo() { + yield(foo); + } +} diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts new file mode 100644 index 00000000000..7577e5ce46b --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts @@ -0,0 +1,5 @@ +class C { + *foo() { + yield(foo); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts new file mode 100644 index 00000000000..3ee6a464049 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts @@ -0,0 +1,5 @@ +class C { + constructor() { + yield foo + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts new file mode 100644 index 00000000000..2ac6f631465 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts @@ -0,0 +1 @@ +function* foo() { yield } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts new file mode 100644 index 00000000000..d545175c94a --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts @@ -0,0 +1,5 @@ +class C { + foo() { + yield foo + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts new file mode 100644 index 00000000000..b2793208aaa --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts @@ -0,0 +1,3 @@ +var v = () => { + yield foo + } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts new file mode 100644 index 00000000000..1933df26ecf --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts @@ -0,0 +1,5 @@ +function* foo() { + function bar() { + yield foo; + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts new file mode 100644 index 00000000000..7ef3a1fe350 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts @@ -0,0 +1 @@ +var v = { get foo() { yield foo; } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts new file mode 100644 index 00000000000..f91016aabf0 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts @@ -0,0 +1,2 @@ +"use strict"; +yield(foo); \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts new file mode 100644 index 00000000000..0183d72ea61 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts @@ -0,0 +1,7 @@ +function*foo() { + function bar() { + function* quux() { + yield(foo); + } + } +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts new file mode 100644 index 00000000000..39bbe4e7eb0 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts @@ -0,0 +1 @@ +yield foo; \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts new file mode 100644 index 00000000000..04ae4b8d223 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts @@ -0,0 +1,4 @@ +function* foo() { + yield + yield +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts new file mode 100644 index 00000000000..cd2f9708048 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts @@ -0,0 +1,4 @@ +function* foo() { + yield; + yield; +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts new file mode 100644 index 00000000000..af4b3a84d2f --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts @@ -0,0 +1,3 @@ +function* foo() { + yield* +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts new file mode 100644 index 00000000000..87d307dcda0 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts @@ -0,0 +1,3 @@ +function* foo() { + yield*foo +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts new file mode 100644 index 00000000000..0db38fd498b --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts @@ -0,0 +1,3 @@ +function* foo() { + yield foo +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts new file mode 100644 index 00000000000..b6b08301239 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts @@ -0,0 +1,4 @@ +yield(foo); +function* foo() { + yield(foo); +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts new file mode 100644 index 00000000000..9119deae832 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts @@ -0,0 +1,3 @@ +var v = function*() { + yield(foo); +} \ No newline at end of file From 2f075a1c06f900321b97130bf7c0f9dab9055c40 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 22:41:55 -0800 Subject: [PATCH 164/178] Fix parsing of function expression names. --- src/services/syntax/parser.ts | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 37e25579bf1..6b03a4721c1 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -1018,30 +1018,6 @@ module TypeScript.Parser { // no need to do anything special if we're not in the [Yield] context. return func(); } - - function enterGeneratorParameterContextAnd(func: () => T): T { - if (generatorParameterContext) { - // no need to do anything special if we're already in the [GeneratorParameter] context - return func(); - } - - setGeneratorParameterContext(true); - var result = func(); - setGeneratorParameterContext(false); - return result; - } - - function exitGeneratorParameterContextAnd(func: () => T): T { - if (generatorParameterContext) { - setGeneratorParameterContext(false); - var result = func(); - setGeneratorParameterContext(true); - return result; - } - - // no need to do anything special if we're not in the [GeneratorParameter] context - return func(); - } function tryParseEnumElementEqualsValueClause(): EqualsValueClauseSyntax { return isEqualsValueClause(/*inParameter*/ false) ? allowInAnd(parseEqualsValueClause) : undefined; @@ -2410,8 +2386,6 @@ module TypeScript.Parser { // precedence than 'comma'. Otherwise we'll get: "var a = (1, (b = 2))", instead of // "var a = (1), b = (2)"); function tryParseAssignmentExpressionOrHigherWorker(force: boolean): IExpressionSyntax { - // Augmented by TypeScript: - // // AssignmentExpression[in,yield]: // 1) ConditionalExpression[?in,?yield] // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield] @@ -3033,12 +3007,14 @@ module TypeScript.Parser { function parseFunctionExpressionWorker(functionKeyword: ISyntaxToken, asteriskToken: ISyntaxToken) { // GeneratorExpression : // function * BindingIdentifier[Yield]opt (FormalParameters[Yield, GeneratorParameter]) { GeneratorBody[Yield] } + // FunctionExpression: + // function BindingIdentifieropt(FormalParameters) { FunctionBody } var isGenerator = asteriskToken !== undefined; return new FunctionExpressionSyntax(contextFlags, functionKeyword, asteriskToken, - enterYieldContextAnd(eatOptionalIdentifierToken), + asteriskToken ? enterYieldContextAnd(eatOptionalIdentifierToken) : eatOptionalIdentifierToken(), parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), parseFunctionBody(isGenerator)); } From d11eabc81b6bcc7d242ede5425dfea05d0fc2026 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 22:45:33 -0800 Subject: [PATCH 165/178] Add test baselines. --- .../ComputedPropertyName1.errors.txt | 13 +++++++ .../ComputedPropertyName10.errors.txt | 9 +++++ .../ComputedPropertyName11.errors.txt | 15 ++++++++ .../ComputedPropertyName12.errors.txt | 15 ++++++++ .../ComputedPropertyName13.errors.txt | 7 ++++ .../ComputedPropertyName14.errors.txt | 7 ++++ .../ComputedPropertyName15.errors.txt | 7 ++++ .../ComputedPropertyName16.errors.txt | 18 ++++++++++ .../ComputedPropertyName17.errors.txt | 16 +++++++++ .../ComputedPropertyName18.errors.txt | 7 ++++ .../ComputedPropertyName19.errors.txt | 7 ++++ .../ComputedPropertyName2.errors.txt | 19 +++++++++++ .../ComputedPropertyName3.errors.txt | 16 +++++++++ .../ComputedPropertyName4.errors.txt | 16 +++++++++ .../ComputedPropertyName5.errors.txt | 19 +++++++++++ .../ComputedPropertyName6.errors.txt | 28 +++++++++++++++ .../ComputedPropertyName7.errors.txt | 9 +++++ .../ComputedPropertyName8.errors.txt | 9 +++++ .../ComputedPropertyName9.errors.txt | 12 +++++++ .../reference/FunctionDeclaration1.js | 7 ++++ .../reference/FunctionDeclaration1.types | 4 +++ .../reference/FunctionDeclaration10.js | 8 +++++ .../reference/FunctionDeclaration10.types | 8 +++++ .../reference/FunctionDeclaration11.js | 7 ++++ .../reference/FunctionDeclaration11.types | 4 +++ .../FunctionDeclaration12.errors.txt | 13 +++++++ .../FunctionDeclaration13.errors.txt | 11 ++++++ .../reference/FunctionDeclaration13.js | 12 +++++++ .../reference/FunctionDeclaration2.js | 7 ++++ .../reference/FunctionDeclaration2.types | 5 +++ .../reference/FunctionDeclaration4.types | 4 +++ .../reference/FunctionDeclaration5.errors.txt | 17 ++++++++++ .../reference/FunctionDeclaration8.errors.txt | 16 +++++++++ .../reference/FunctionDeclaration9.errors.txt | 15 ++++++++ .../reference/FunctionExpression1.js | 6 ++++ .../reference/FunctionExpression1.types | 5 +++ .../reference/FunctionExpression2.js | 6 ++++ .../reference/FunctionExpression2.types | 6 ++++ .../reference/FunctionPropertyAssignments1.js | 6 ++++ .../FunctionPropertyAssignments1.types | 7 ++++ .../FunctionPropertyAssignments2.errors.txt | 7 ++++ .../FunctionPropertyAssignments3.errors.txt | 7 ++++ .../FunctionPropertyAssignments4.errors.txt | 7 ++++ .../FunctionPropertyAssignments5.errors.txt | 16 +++++++++ .../FunctionPropertyAssignments6.errors.txt | 7 ++++ .../reference/MemberFunctionDeclaration1.js | 13 +++++++ .../MemberFunctionDeclaration1.types | 7 ++++ .../reference/MemberFunctionDeclaration2.js | 13 +++++++ .../MemberFunctionDeclaration2.types | 7 ++++ .../MemberFunctionDeclaration3.errors.txt | 18 ++++++++++ .../MemberFunctionDeclaration4.errors.txt | 9 +++++ .../MemberFunctionDeclaration5.errors.txt | 9 +++++ .../MemberFunctionDeclaration6.errors.txt | 12 +++++++ .../reference/MemberFunctionDeclaration7.js | 13 +++++++ .../MemberFunctionDeclaration7.types | 8 +++++ .../MemberFunctionDeclaration8.errors.txt | 34 +++++++++++++++++++ .../reference/TemplateExpression1.errors.txt | 10 ++++++ .../reference/YieldExpression1.errors.txt | 7 ++++ tests/baselines/reference/YieldExpression1.js | 5 +++ .../baselines/reference/YieldExpression10.js | 11 ++++++ .../reference/YieldExpression10.types | 11 ++++++ .../baselines/reference/YieldExpression11.js | 16 +++++++++ .../reference/YieldExpression11.types | 10 ++++++ .../reference/YieldExpression12.errors.txt | 11 ++++++ .../baselines/reference/YieldExpression13.js | 7 ++++ .../reference/YieldExpression13.types | 4 +++ .../reference/YieldExpression14.errors.txt | 11 ++++++ .../reference/YieldExpression15.errors.txt | 9 +++++ .../reference/YieldExpression16.errors.txt | 11 ++++++ .../reference/YieldExpression17.errors.txt | 10 ++++++ .../reference/YieldExpression18.errors.txt | 8 +++++ .../baselines/reference/YieldExpression19.js | 17 ++++++++++ .../reference/YieldExpression19.types | 14 ++++++++ .../reference/YieldExpression2.errors.txt | 7 ++++ tests/baselines/reference/YieldExpression3.js | 11 ++++++ .../reference/YieldExpression3.types | 7 ++++ tests/baselines/reference/YieldExpression4.js | 11 ++++++ .../reference/YieldExpression4.types | 7 ++++ .../reference/YieldExpression5.errors.txt | 9 +++++ tests/baselines/reference/YieldExpression6.js | 9 +++++ .../reference/YieldExpression6.types | 6 ++++ tests/baselines/reference/YieldExpression7.js | 9 +++++ .../reference/YieldExpression7.types | 6 ++++ .../reference/YieldExpression8.errors.txt | 10 ++++++ tests/baselines/reference/YieldExpression8.js | 11 ++++++ tests/baselines/reference/YieldExpression9.js | 9 +++++ .../reference/YieldExpression9.types | 7 ++++ .../templateStringInYieldKeyword.errors.txt | 20 ----------- .../reference/templateStringInYieldKeyword.js | 12 +++++++ .../templateStringInYieldKeyword.types | 9 +++++ ...eStringWithEmbeddedYieldKeyword.errors.txt | 26 +++----------- ...ringWithEmbeddedYieldKeywordES6.errors.txt | 29 ---------------- ...mplateStringWithEmbeddedYieldKeywordES6.js | 12 +++++++ ...ateStringWithEmbeddedYieldKeywordES6.types | 9 +++++ 94 files changed, 947 insertions(+), 71 deletions(-) create mode 100644 tests/baselines/reference/ComputedPropertyName1.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName10.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName11.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName12.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName13.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName14.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName15.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName16.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName17.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName18.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName19.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName2.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName3.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName4.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName5.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName6.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName7.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName8.errors.txt create mode 100644 tests/baselines/reference/ComputedPropertyName9.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration1.js create mode 100644 tests/baselines/reference/FunctionDeclaration1.types create mode 100644 tests/baselines/reference/FunctionDeclaration10.js create mode 100644 tests/baselines/reference/FunctionDeclaration10.types create mode 100644 tests/baselines/reference/FunctionDeclaration11.js create mode 100644 tests/baselines/reference/FunctionDeclaration11.types create mode 100644 tests/baselines/reference/FunctionDeclaration12.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration13.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration13.js create mode 100644 tests/baselines/reference/FunctionDeclaration2.js create mode 100644 tests/baselines/reference/FunctionDeclaration2.types create mode 100644 tests/baselines/reference/FunctionDeclaration4.types create mode 100644 tests/baselines/reference/FunctionDeclaration5.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration8.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration9.errors.txt create mode 100644 tests/baselines/reference/FunctionExpression1.js create mode 100644 tests/baselines/reference/FunctionExpression1.types create mode 100644 tests/baselines/reference/FunctionExpression2.js create mode 100644 tests/baselines/reference/FunctionExpression2.types create mode 100644 tests/baselines/reference/FunctionPropertyAssignments1.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments1.types create mode 100644 tests/baselines/reference/FunctionPropertyAssignments2.errors.txt create mode 100644 tests/baselines/reference/FunctionPropertyAssignments3.errors.txt create mode 100644 tests/baselines/reference/FunctionPropertyAssignments4.errors.txt create mode 100644 tests/baselines/reference/FunctionPropertyAssignments5.errors.txt create mode 100644 tests/baselines/reference/FunctionPropertyAssignments6.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration1.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration1.types create mode 100644 tests/baselines/reference/MemberFunctionDeclaration2.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration2.types create mode 100644 tests/baselines/reference/MemberFunctionDeclaration3.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration4.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration5.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration6.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration7.js create mode 100644 tests/baselines/reference/MemberFunctionDeclaration7.types create mode 100644 tests/baselines/reference/MemberFunctionDeclaration8.errors.txt create mode 100644 tests/baselines/reference/TemplateExpression1.errors.txt create mode 100644 tests/baselines/reference/YieldExpression1.errors.txt create mode 100644 tests/baselines/reference/YieldExpression1.js create mode 100644 tests/baselines/reference/YieldExpression10.js create mode 100644 tests/baselines/reference/YieldExpression10.types create mode 100644 tests/baselines/reference/YieldExpression11.js create mode 100644 tests/baselines/reference/YieldExpression11.types create mode 100644 tests/baselines/reference/YieldExpression12.errors.txt create mode 100644 tests/baselines/reference/YieldExpression13.js create mode 100644 tests/baselines/reference/YieldExpression13.types create mode 100644 tests/baselines/reference/YieldExpression14.errors.txt create mode 100644 tests/baselines/reference/YieldExpression15.errors.txt create mode 100644 tests/baselines/reference/YieldExpression16.errors.txt create mode 100644 tests/baselines/reference/YieldExpression17.errors.txt create mode 100644 tests/baselines/reference/YieldExpression18.errors.txt create mode 100644 tests/baselines/reference/YieldExpression19.js create mode 100644 tests/baselines/reference/YieldExpression19.types create mode 100644 tests/baselines/reference/YieldExpression2.errors.txt create mode 100644 tests/baselines/reference/YieldExpression3.js create mode 100644 tests/baselines/reference/YieldExpression3.types create mode 100644 tests/baselines/reference/YieldExpression4.js create mode 100644 tests/baselines/reference/YieldExpression4.types create mode 100644 tests/baselines/reference/YieldExpression5.errors.txt create mode 100644 tests/baselines/reference/YieldExpression6.js create mode 100644 tests/baselines/reference/YieldExpression6.types create mode 100644 tests/baselines/reference/YieldExpression7.js create mode 100644 tests/baselines/reference/YieldExpression7.types create mode 100644 tests/baselines/reference/YieldExpression8.errors.txt create mode 100644 tests/baselines/reference/YieldExpression8.js create mode 100644 tests/baselines/reference/YieldExpression9.js create mode 100644 tests/baselines/reference/YieldExpression9.types delete mode 100644 tests/baselines/reference/templateStringInYieldKeyword.errors.txt create mode 100644 tests/baselines/reference/templateStringInYieldKeyword.js create mode 100644 tests/baselines/reference/templateStringInYieldKeyword.types delete mode 100644 tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt create mode 100644 tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js create mode 100644 tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types diff --git a/tests/baselines/reference/ComputedPropertyName1.errors.txt b/tests/baselines/reference/ComputedPropertyName1.errors.txt new file mode 100644 index 00000000000..89423599a44 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,15): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,12): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts (3 errors) ==== + var v = { [e] }; + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName10.errors.txt b/tests/baselines/reference/ComputedPropertyName10.errors.txt new file mode 100644 index 00000000000..c880e57859c --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName10.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts(2,8): error TS1005: ';' expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts (1 errors) ==== + class C { + [e] = 1 + ~ +!!! error TS1005: ';' expected. + } \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName11.errors.txt b/tests/baselines/reference/ComputedPropertyName11.errors.txt new file mode 100644 index 00000000000..3b23c2f8287 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName11.errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(2,7): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(2,8): error TS1109: Expression expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(3,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts (3 errors) ==== + class C { + [e](); + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1109: Expression expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName12.errors.txt b/tests/baselines/reference/ComputedPropertyName12.errors.txt new file mode 100644 index 00000000000..575574c2d7e --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName12.errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(2,7): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(2,10): error TS1005: '=>' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(3,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts (3 errors) ==== + class C { + [e]() { } + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1005: '=>' expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName13.errors.txt b/tests/baselines/reference/ComputedPropertyName13.errors.txt new file mode 100644 index 00000000000..2024b4d7128 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName13.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts(1,11): error TS1022: An index signature parameter must have a type annotation. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts (1 errors) ==== + var v: { [e]: number }; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName14.errors.txt b/tests/baselines/reference/ComputedPropertyName14.errors.txt new file mode 100644 index 00000000000..4fe3cf4e121 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName14.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts(1,13): error TS1005: ';' expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts (1 errors) ==== + var v: { [e](): number }; + ~ +!!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName15.errors.txt b/tests/baselines/reference/ComputedPropertyName15.errors.txt new file mode 100644 index 00000000000..4ab96e131e9 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName15.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts(1,32): error TS1022: An index signature parameter must have a type annotation. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts (1 errors) ==== + var v: { [e: number]: string; [e]: number }; + ~ +!!! error TS1022: An index signature parameter must have a type annotation. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName16.errors.txt b/tests/baselines/reference/ComputedPropertyName16.errors.txt new file mode 100644 index 00000000000..631449a818e --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName16.errors.txt @@ -0,0 +1,18 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,3): error TS1132: Enum member expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,3): error TS2364: Invalid left-hand side of assignment expression. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,4): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts (4 errors) ==== + enum E { + [e] = 1 + ~ +!!! error TS1132: Enum member expected. + ~~~ +!!! error TS2364: Invalid left-hand side of assignment expression. + ~ +!!! error TS2304: Cannot find name 'e'. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName17.errors.txt b/tests/baselines/reference/ComputedPropertyName17.errors.txt new file mode 100644 index 00000000000..3a3d5ca80f9 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName17.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,15): error TS1003: Identifier expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,22): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,26): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,16): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts (4 errors) ==== + var v = { set [e](v) { } } + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName18.errors.txt b/tests/baselines/reference/ComputedPropertyName18.errors.txt new file mode 100644 index 00000000000..1df180bc9c1 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName18.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts(1,13): error TS1005: ';' expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts (1 errors) ==== + var v: { [e]?(): number }; + ~ +!!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName19.errors.txt b/tests/baselines/reference/ComputedPropertyName19.errors.txt new file mode 100644 index 00000000000..7e063befdc8 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName19.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts(1,13): error TS1005: ';' expected. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts (1 errors) ==== + var v: { [e]? }; + ~ +!!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName2.errors.txt b/tests/baselines/reference/ComputedPropertyName2.errors.txt new file mode 100644 index 00000000000..fd2bf09a094 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName2.errors.txt @@ -0,0 +1,19 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,14): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,16): error TS1134: Variable declaration expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,18): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,12): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts (5 errors) ==== + var v = { [e]: 1 }; + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1134: Variable declaration expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName3.errors.txt b/tests/baselines/reference/ComputedPropertyName3.errors.txt new file mode 100644 index 00000000000..4aaaa46ca68 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName3.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,17): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,21): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,12): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts (4 errors) ==== + var v = { [e]() { } }; + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName4.errors.txt b/tests/baselines/reference/ComputedPropertyName4.errors.txt new file mode 100644 index 00000000000..d03de72fb54 --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName4.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,15): error TS1003: Identifier expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,21): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,25): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,16): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts (4 errors) ==== + var v = { get [e]() { } }; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName5.errors.txt b/tests/baselines/reference/ComputedPropertyName5.errors.txt new file mode 100644 index 00000000000..61906ddcced --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName5.errors.txt @@ -0,0 +1,19 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,18): error TS1005: ':' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,28): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,32): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,18): error TS2304: Cannot find name 'get'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,23): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts (5 errors) ==== + var v = { public get [e]() { } }; + ~~~ +!!! error TS1005: ':' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~~~ +!!! error TS2304: Cannot find name 'get'. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName6.errors.txt b/tests/baselines/reference/ComputedPropertyName6.errors.txt new file mode 100644 index 00000000000..979ad0a664f --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName6.errors.txt @@ -0,0 +1,28 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,14): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,16): error TS1134: Variable declaration expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,26): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,30): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,12): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,20): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,24): error TS2304: Cannot find name 'e'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts (8 errors) ==== + var v = { [e]: 1, [e + e]: 2 }; + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1134: Variable declaration expected. + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~ +!!! error TS2304: Cannot find name 'e'. + ~ +!!! error TS2304: Cannot find name 'e'. + ~ +!!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName7.errors.txt b/tests/baselines/reference/ComputedPropertyName7.errors.txt new file mode 100644 index 00000000000..594928afa1f --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName7.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts(2,5): error TS1022: An index signature parameter must have a type annotation. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts (1 errors) ==== + class C { + [e] + ~ +!!! error TS1022: An index signature parameter must have a type annotation. + } \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName8.errors.txt b/tests/baselines/reference/ComputedPropertyName8.errors.txt new file mode 100644 index 00000000000..881d107a80b --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName8.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts(2,12): error TS1022: An index signature parameter must have a type annotation. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts (1 errors) ==== + class C { + public [e] + ~ +!!! error TS1022: An index signature parameter must have a type annotation. + } \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName9.errors.txt b/tests/baselines/reference/ComputedPropertyName9.errors.txt new file mode 100644 index 00000000000..e11503bb2fe --- /dev/null +++ b/tests/baselines/reference/ComputedPropertyName9.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts(2,5): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts(2,9): error TS2304: Cannot find name 'Type'. + + +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts (2 errors) ==== + class C { + [e]: Type + ~ +!!! error TS1022: An index signature parameter must have a type annotation. + ~~~~ +!!! error TS2304: Cannot find name 'Type'. + } \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration1.js b/tests/baselines/reference/FunctionDeclaration1.js new file mode 100644 index 00000000000..bc5afa0fece --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration1.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration1.ts] +function * foo() { +} + +//// [FunctionDeclaration1.js] +function foo() { +} diff --git a/tests/baselines/reference/FunctionDeclaration1.types b/tests/baselines/reference/FunctionDeclaration1.types new file mode 100644 index 00000000000..94f1f2d456c --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration1.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts === +function * foo() { +>foo : () => void +} diff --git a/tests/baselines/reference/FunctionDeclaration10.js b/tests/baselines/reference/FunctionDeclaration10.js new file mode 100644 index 00000000000..069433637eb --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration10.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration10.ts] +function * foo(a = yield => yield) { +} + +//// [FunctionDeclaration10.js] +function foo(a) { + if (a === void 0) { a = function (yield) { return yield; }; } +} diff --git a/tests/baselines/reference/FunctionDeclaration10.types b/tests/baselines/reference/FunctionDeclaration10.types new file mode 100644 index 00000000000..0e88aeecf07 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration10.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts === +function * foo(a = yield => yield) { +>foo : (a?: (yield: any) => any) => void +>a : (yield: any) => any +>yield => yield : (yield: any) => any +>yield : any +>yield : any +} diff --git a/tests/baselines/reference/FunctionDeclaration11.js b/tests/baselines/reference/FunctionDeclaration11.js new file mode 100644 index 00000000000..a4587554910 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration11.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration11.ts] +function * yield() { +} + +//// [FunctionDeclaration11.js] +function yield() { +} diff --git a/tests/baselines/reference/FunctionDeclaration11.types b/tests/baselines/reference/FunctionDeclaration11.types new file mode 100644 index 00000000000..8ba840b0202 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration11.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts === +function * yield() { +>yield : () => void +} diff --git a/tests/baselines/reference/FunctionDeclaration12.errors.txt b/tests/baselines/reference/FunctionDeclaration12.errors.txt new file mode 100644 index 00000000000..5bea114c4b3 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration12.errors.txt @@ -0,0 +1,13 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,20): error TS1005: '(' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,25): error TS1005: '=' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,28): error TS1005: '=>' expected. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts (3 errors) ==== + var v = function * yield() { } + ~~~~~ +!!! error TS1005: '(' expected. + ~ +!!! error TS1005: '=' expected. + ~ +!!! error TS1005: '=>' expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration13.errors.txt b/tests/baselines/reference/FunctionDeclaration13.errors.txt new file mode 100644 index 00000000000..2a0fc461e05 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration13.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts(3,11): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts (1 errors) ==== + function * foo() { + // Legal to use 'yield' in a type context. + var v: yield; + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration13.js b/tests/baselines/reference/FunctionDeclaration13.js new file mode 100644 index 00000000000..9846e19c140 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration13.js @@ -0,0 +1,12 @@ +//// [FunctionDeclaration13.ts] +function * foo() { + // Legal to use 'yield' in a type context. + var v: yield; +} + + +//// [FunctionDeclaration13.js] +function foo() { + // Legal to use 'yield' in a type context. + var v; +} diff --git a/tests/baselines/reference/FunctionDeclaration2.js b/tests/baselines/reference/FunctionDeclaration2.js new file mode 100644 index 00000000000..09f3d6dd4c0 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration2.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration2.ts] +function f(yield) { +} + +//// [FunctionDeclaration2.js] +function f(yield) { +} diff --git a/tests/baselines/reference/FunctionDeclaration2.types b/tests/baselines/reference/FunctionDeclaration2.types new file mode 100644 index 00000000000..89fcb53b20c --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration2.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts === +function f(yield) { +>f : (yield: any) => void +>yield : any +} diff --git a/tests/baselines/reference/FunctionDeclaration4.types b/tests/baselines/reference/FunctionDeclaration4.types new file mode 100644 index 00000000000..f2618678095 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration4.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts === +function yield() { +>yield : () => void +} diff --git a/tests/baselines/reference/FunctionDeclaration5.errors.txt b/tests/baselines/reference/FunctionDeclaration5.errors.txt new file mode 100644 index 00000000000..eebbae4d8c5 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration5.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,14): error TS1138: Parameter declaration expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,19): error TS1005: ';' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,14): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts (4 errors) ==== + function*foo(yield) { + ~~~~~ +!!! error TS1138: Parameter declaration expected. + ~ +!!! error TS1005: ';' expected. + ~~~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + } \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration8.errors.txt b/tests/baselines/reference/FunctionDeclaration8.errors.txt new file mode 100644 index 00000000000..a5deb7f655c --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration8.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,18): error TS1005: ',' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,24): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,12): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts (4 errors) ==== + var v = { [yield]: foo } + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration9.errors.txt b/tests/baselines/reference/FunctionDeclaration9.errors.txt new file mode 100644 index 00000000000..2d070e90ebb --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration9.errors.txt @@ -0,0 +1,15 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(2,13): error TS1136: Property assignment expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(2,20): error TS1005: ',' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(3,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts (3 errors) ==== + function * foo() { + var v = { [yield]: foo } + ~ +!!! error TS1136: Property assignment expected. + ~ +!!! error TS1005: ',' expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionExpression1.js b/tests/baselines/reference/FunctionExpression1.js new file mode 100644 index 00000000000..d74342ef366 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression1.js @@ -0,0 +1,6 @@ +//// [FunctionExpression1.ts] +var v = function * () { } + +//// [FunctionExpression1.js] +var v = function () { +}; diff --git a/tests/baselines/reference/FunctionExpression1.types b/tests/baselines/reference/FunctionExpression1.types new file mode 100644 index 00000000000..6a501aedf22 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression1.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts === +var v = function * () { } +>v : () => void +>function * () { } : () => void + diff --git a/tests/baselines/reference/FunctionExpression2.js b/tests/baselines/reference/FunctionExpression2.js new file mode 100644 index 00000000000..784aea781a3 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression2.js @@ -0,0 +1,6 @@ +//// [FunctionExpression2.ts] +var v = function * foo() { } + +//// [FunctionExpression2.js] +var v = function foo() { +}; diff --git a/tests/baselines/reference/FunctionExpression2.types b/tests/baselines/reference/FunctionExpression2.types new file mode 100644 index 00000000000..488c181f3e5 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression2.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts === +var v = function * foo() { } +>v : () => void +>function * foo() { } : () => void +>foo : () => void + diff --git a/tests/baselines/reference/FunctionPropertyAssignments1.js b/tests/baselines/reference/FunctionPropertyAssignments1.js new file mode 100644 index 00000000000..8285f88a5ee --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments1.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments1.ts] +var v = { *foo() { } } + +//// [FunctionPropertyAssignments1.js] +var v = { foo: function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments1.types b/tests/baselines/reference/FunctionPropertyAssignments1.types new file mode 100644 index 00000000000..5821956b66e --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts === +var v = { *foo() { } } +>v : { foo: () => void; } +>{ *foo() { } } : { foo: () => void; } +>foo : () => void +>*foo() { } : () => void + diff --git a/tests/baselines/reference/FunctionPropertyAssignments2.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments2.errors.txt new file mode 100644 index 00000000000..1737a65e029 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments2.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts(1,12): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts (1 errors) ==== + var v = { *() { } } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments3.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments3.errors.txt new file mode 100644 index 00000000000..a0e8a3b5e58 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments3.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts(1,12): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts (1 errors) ==== + var v = { *{ } } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments4.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments4.errors.txt new file mode 100644 index 00000000000..19288b269aa --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments4.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts(1,13): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts (1 errors) ==== + var v = { * } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments5.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments5.errors.txt new file mode 100644 index 00000000000..5b4a4b5a591 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments5.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,12): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,22): error TS1005: ',' expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,26): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,13): error TS2304: Cannot find name 'foo'. + + +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts (4 errors) ==== + var v = { *[foo()]() { } } + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1128: Declaration or statement expected. + ~~~ +!!! error TS2304: Cannot find name 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments6.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments6.errors.txt new file mode 100644 index 00000000000..bf0e237aadb --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts(1,12): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts (1 errors) ==== + var v = { *() { } } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration1.js b/tests/baselines/reference/MemberFunctionDeclaration1.js new file mode 100644 index 00000000000..b5630337c9a --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration1.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration1.ts] +class C { + *foo() { } +} + +//// [MemberFunctionDeclaration1.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration1.types b/tests/baselines/reference/MemberFunctionDeclaration1.types new file mode 100644 index 00000000000..869592d072a --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration1.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts === +class C { +>C : C + + *foo() { } +>foo : () => void +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration2.js b/tests/baselines/reference/MemberFunctionDeclaration2.js new file mode 100644 index 00000000000..22589facd29 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration2.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration2.ts] +class C { + public * foo() { } +} + +//// [MemberFunctionDeclaration2.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration2.types b/tests/baselines/reference/MemberFunctionDeclaration2.types new file mode 100644 index 00000000000..ad076636a2f --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration2.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts === +class C { +>C : C + + public * foo() { } +>foo : () => void +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt new file mode 100644 index 00000000000..a9091ef1de7 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt @@ -0,0 +1,18 @@ +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,5): error TS1003: Identifier expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,10): error TS1005: ';' expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,13): error TS1005: '=>' expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(3,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts (4 errors) ==== + class C { + *[foo]() { } + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1005: '=>' expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt new file mode 100644 index 00000000000..262942cccb4 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts(2,5): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts (1 errors) ==== + class C { + *() { } + ~ +!!! error TS1003: Identifier expected. + } \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt new file mode 100644 index 00000000000..262b9011e25 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts(3,1): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts (1 errors) ==== + class C { + * + } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt new file mode 100644 index 00000000000..eabbfc9ae79 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts(3,1): error TS1005: '(' expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts(2,5): error TS2391: Function implementation is missing or not immediately following the declaration. + + +==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts (2 errors) ==== + class C { + *foo + ~~~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + ~ +!!! error TS1005: '(' expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration7.js b/tests/baselines/reference/MemberFunctionDeclaration7.js new file mode 100644 index 00000000000..fbb3a10aab7 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration7.js @@ -0,0 +1,13 @@ +//// [MemberFunctionDeclaration7.ts] +class C { + *foo() { } +} + +//// [MemberFunctionDeclaration7.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + }; + return C; +})(); diff --git a/tests/baselines/reference/MemberFunctionDeclaration7.types b/tests/baselines/reference/MemberFunctionDeclaration7.types new file mode 100644 index 00000000000..8c725049782 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration7.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts === +class C { +>C : C + + *foo() { } +>foo : () => void +>T : T +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt new file mode 100644 index 00000000000..32f67c71ead --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt @@ -0,0 +1,34 @@ +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,12): error TS1127: Invalid character. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,14): error TS1129: Statement expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,19): error TS1005: '(' expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(5,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(6,3): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(7,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,9): error TS2304: Cannot find name 'a'. +tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,16): error TS2391: Function implementation is missing or not immediately following the declaration. + + +==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts (8 errors) ==== + class C { + foo() { + // Make sure we don't think of *bar as the start of a generator method. + if (a) # * bar; + +!!! error TS1127: Invalid character. + ~ +!!! error TS1129: Statement expected. + ~ +!!! error TS1005: '(' expected. + ~ +!!! error TS2304: Cannot find name 'a'. + ~~~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + return bar; + ~~~~~~ +!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. + } + ~ +!!! error TS1128: Declaration or statement expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/TemplateExpression1.errors.txt b/tests/baselines/reference/TemplateExpression1.errors.txt new file mode 100644 index 00000000000..bf57f5ef24e --- /dev/null +++ b/tests/baselines/reference/TemplateExpression1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/conformance/es6/templates/TemplateExpression1.ts(1,19): error TS1158: Invalid template literal; expected '}' +tests/cases/conformance/es6/templates/TemplateExpression1.ts(1,17): error TS2304: Cannot find name 'a'. + + +==== tests/cases/conformance/es6/templates/TemplateExpression1.ts (2 errors) ==== + var v = `foo ${ a + +!!! error TS1158: Invalid template literal; expected '}' + ~ +!!! error TS2304: Cannot find name 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression1.errors.txt b/tests/baselines/reference/YieldExpression1.errors.txt new file mode 100644 index 00000000000..ac9bdd04aba --- /dev/null +++ b/tests/baselines/reference/YieldExpression1.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts(1,1): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts (1 errors) ==== + yield; + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression1.js b/tests/baselines/reference/YieldExpression1.js new file mode 100644 index 00000000000..84f01f084a6 --- /dev/null +++ b/tests/baselines/reference/YieldExpression1.js @@ -0,0 +1,5 @@ +//// [YieldExpression1.ts] +yield; + +//// [YieldExpression1.js] +yield; diff --git a/tests/baselines/reference/YieldExpression10.js b/tests/baselines/reference/YieldExpression10.js new file mode 100644 index 00000000000..8d6a1bcfd74 --- /dev/null +++ b/tests/baselines/reference/YieldExpression10.js @@ -0,0 +1,11 @@ +//// [YieldExpression10.ts] +var v = { * foo() { + yield(foo); + } +} + + +//// [YieldExpression10.js] +var v = { foo: function () { + ; +} }; diff --git a/tests/baselines/reference/YieldExpression10.types b/tests/baselines/reference/YieldExpression10.types new file mode 100644 index 00000000000..1cc2cebafc1 --- /dev/null +++ b/tests/baselines/reference/YieldExpression10.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts === +var v = { * foo() { +>v : { foo: () => void; } +>{ * foo() { yield(foo); }} : { foo: () => void; } +>foo : () => void +>* foo() { yield(foo); } : () => void + + yield(foo); + } +} + diff --git a/tests/baselines/reference/YieldExpression11.js b/tests/baselines/reference/YieldExpression11.js new file mode 100644 index 00000000000..e69d9b6c064 --- /dev/null +++ b/tests/baselines/reference/YieldExpression11.js @@ -0,0 +1,16 @@ +//// [YieldExpression11.ts] +class C { + *foo() { + yield(foo); + } +} + +//// [YieldExpression11.js] +var C = (function () { + function C() { + } + C.prototype.foo = function () { + ; + }; + return C; +})(); diff --git a/tests/baselines/reference/YieldExpression11.types b/tests/baselines/reference/YieldExpression11.types new file mode 100644 index 00000000000..da261ed041f --- /dev/null +++ b/tests/baselines/reference/YieldExpression11.types @@ -0,0 +1,10 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts === +class C { +>C : C + + *foo() { +>foo : () => void + + yield(foo); + } +} diff --git a/tests/baselines/reference/YieldExpression12.errors.txt b/tests/baselines/reference/YieldExpression12.errors.txt new file mode 100644 index 00000000000..47f3edc220d --- /dev/null +++ b/tests/baselines/reference/YieldExpression12.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts (1 errors) ==== + class C { + constructor() { + yield foo + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression13.js b/tests/baselines/reference/YieldExpression13.js new file mode 100644 index 00000000000..f3f36cfecd3 --- /dev/null +++ b/tests/baselines/reference/YieldExpression13.js @@ -0,0 +1,7 @@ +//// [YieldExpression13.ts] +function* foo() { yield } + +//// [YieldExpression13.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression13.types b/tests/baselines/reference/YieldExpression13.types new file mode 100644 index 00000000000..0d1cb06ba51 --- /dev/null +++ b/tests/baselines/reference/YieldExpression13.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts === +function* foo() { yield } +>foo : () => void + diff --git a/tests/baselines/reference/YieldExpression14.errors.txt b/tests/baselines/reference/YieldExpression14.errors.txt new file mode 100644 index 00000000000..89d0cf477cf --- /dev/null +++ b/tests/baselines/reference/YieldExpression14.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts (1 errors) ==== + class C { + foo() { + yield foo + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression15.errors.txt b/tests/baselines/reference/YieldExpression15.errors.txt new file mode 100644 index 00000000000..3f90fce5993 --- /dev/null +++ b/tests/baselines/reference/YieldExpression15.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts(2,6): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts (1 errors) ==== + var v = () => { + yield foo + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. + } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression16.errors.txt b/tests/baselines/reference/YieldExpression16.errors.txt new file mode 100644 index 00000000000..8fb1775222d --- /dev/null +++ b/tests/baselines/reference/YieldExpression16.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts(3,5): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts (1 errors) ==== + function* foo() { + function bar() { + yield foo; + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression17.errors.txt b/tests/baselines/reference/YieldExpression17.errors.txt new file mode 100644 index 00000000000..9477ff2f134 --- /dev/null +++ b/tests/baselines/reference/YieldExpression17.errors.txt @@ -0,0 +1,10 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts(1,15): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts(1,15): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts (2 errors) ==== + var v = { get foo() { yield foo; } } + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ +!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression18.errors.txt b/tests/baselines/reference/YieldExpression18.errors.txt new file mode 100644 index 00000000000..2707e5780b0 --- /dev/null +++ b/tests/baselines/reference/YieldExpression18.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts(2,1): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts (1 errors) ==== + "use strict"; + yield(foo); + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression19.js b/tests/baselines/reference/YieldExpression19.js new file mode 100644 index 00000000000..39b9cda44f9 --- /dev/null +++ b/tests/baselines/reference/YieldExpression19.js @@ -0,0 +1,17 @@ +//// [YieldExpression19.ts] +function*foo() { + function bar() { + function* quux() { + yield(foo); + } + } +} + +//// [YieldExpression19.js] +function foo() { + function bar() { + function quux() { + ; + } + } +} diff --git a/tests/baselines/reference/YieldExpression19.types b/tests/baselines/reference/YieldExpression19.types new file mode 100644 index 00000000000..315c1a541cc --- /dev/null +++ b/tests/baselines/reference/YieldExpression19.types @@ -0,0 +1,14 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts === +function*foo() { +>foo : () => void + + function bar() { +>bar : () => void + + function* quux() { +>quux : () => void + + yield(foo); + } + } +} diff --git a/tests/baselines/reference/YieldExpression2.errors.txt b/tests/baselines/reference/YieldExpression2.errors.txt new file mode 100644 index 00000000000..4b4e549d7bf --- /dev/null +++ b/tests/baselines/reference/YieldExpression2.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts(1,1): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts (1 errors) ==== + yield foo; + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression3.js b/tests/baselines/reference/YieldExpression3.js new file mode 100644 index 00000000000..39a1c419e9b --- /dev/null +++ b/tests/baselines/reference/YieldExpression3.js @@ -0,0 +1,11 @@ +//// [YieldExpression3.ts] +function* foo() { + yield + yield +} + +//// [YieldExpression3.js] +function foo() { + ; + ; +} diff --git a/tests/baselines/reference/YieldExpression3.types b/tests/baselines/reference/YieldExpression3.types new file mode 100644 index 00000000000..702584b44f8 --- /dev/null +++ b/tests/baselines/reference/YieldExpression3.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts === +function* foo() { +>foo : () => void + + yield + yield +} diff --git a/tests/baselines/reference/YieldExpression4.js b/tests/baselines/reference/YieldExpression4.js new file mode 100644 index 00000000000..e85a41e8581 --- /dev/null +++ b/tests/baselines/reference/YieldExpression4.js @@ -0,0 +1,11 @@ +//// [YieldExpression4.ts] +function* foo() { + yield; + yield; +} + +//// [YieldExpression4.js] +function foo() { + ; + ; +} diff --git a/tests/baselines/reference/YieldExpression4.types b/tests/baselines/reference/YieldExpression4.types new file mode 100644 index 00000000000..cd57f45ba73 --- /dev/null +++ b/tests/baselines/reference/YieldExpression4.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts === +function* foo() { +>foo : () => void + + yield; + yield; +} diff --git a/tests/baselines/reference/YieldExpression5.errors.txt b/tests/baselines/reference/YieldExpression5.errors.txt new file mode 100644 index 00000000000..80363043874 --- /dev/null +++ b/tests/baselines/reference/YieldExpression5.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts(3,1): error TS1109: Expression expected. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts (1 errors) ==== + function* foo() { + yield* + } + ~ +!!! error TS1109: Expression expected. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression6.js b/tests/baselines/reference/YieldExpression6.js new file mode 100644 index 00000000000..27fda405cd7 --- /dev/null +++ b/tests/baselines/reference/YieldExpression6.js @@ -0,0 +1,9 @@ +//// [YieldExpression6.ts] +function* foo() { + yield*foo +} + +//// [YieldExpression6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression6.types b/tests/baselines/reference/YieldExpression6.types new file mode 100644 index 00000000000..6df16df5271 --- /dev/null +++ b/tests/baselines/reference/YieldExpression6.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts === +function* foo() { +>foo : () => void + + yield*foo +} diff --git a/tests/baselines/reference/YieldExpression7.js b/tests/baselines/reference/YieldExpression7.js new file mode 100644 index 00000000000..152fe36db50 --- /dev/null +++ b/tests/baselines/reference/YieldExpression7.js @@ -0,0 +1,9 @@ +//// [YieldExpression7.ts] +function* foo() { + yield foo +} + +//// [YieldExpression7.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression7.types b/tests/baselines/reference/YieldExpression7.types new file mode 100644 index 00000000000..40d4506c86e --- /dev/null +++ b/tests/baselines/reference/YieldExpression7.types @@ -0,0 +1,6 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts === +function* foo() { +>foo : () => void + + yield foo +} diff --git a/tests/baselines/reference/YieldExpression8.errors.txt b/tests/baselines/reference/YieldExpression8.errors.txt new file mode 100644 index 00000000000..ee0e5789313 --- /dev/null +++ b/tests/baselines/reference/YieldExpression8.errors.txt @@ -0,0 +1,10 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts(1,1): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts (1 errors) ==== + yield(foo); + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + function* foo() { + yield(foo); + } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression8.js b/tests/baselines/reference/YieldExpression8.js new file mode 100644 index 00000000000..07b80cf3e51 --- /dev/null +++ b/tests/baselines/reference/YieldExpression8.js @@ -0,0 +1,11 @@ +//// [YieldExpression8.ts] +yield(foo); +function* foo() { + yield(foo); +} + +//// [YieldExpression8.js] +yield(foo); +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression9.js b/tests/baselines/reference/YieldExpression9.js new file mode 100644 index 00000000000..72365abcd70 --- /dev/null +++ b/tests/baselines/reference/YieldExpression9.js @@ -0,0 +1,9 @@ +//// [YieldExpression9.ts] +var v = function*() { + yield(foo); +} + +//// [YieldExpression9.js] +var v = function () { + ; +}; diff --git a/tests/baselines/reference/YieldExpression9.types b/tests/baselines/reference/YieldExpression9.types new file mode 100644 index 00000000000..4c5242369c0 --- /dev/null +++ b/tests/baselines/reference/YieldExpression9.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts === +var v = function*() { +>v : () => void +>function*() { yield(foo);} : () => void + + yield(foo); +} diff --git a/tests/baselines/reference/templateStringInYieldKeyword.errors.txt b/tests/baselines/reference/templateStringInYieldKeyword.errors.txt deleted file mode 100644 index 50b780ad3cb..00000000000 --- a/tests/baselines/reference/templateStringInYieldKeyword.errors.txt +++ /dev/null @@ -1,20 +0,0 @@ -tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,9): error TS1003: Identifier expected. -tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,15): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(1,11): error TS2304: Cannot find name 'gen'. -tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts(3,13): error TS2304: Cannot find name 'yield'. - - -==== tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts (4 errors) ==== - function* gen { - ~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1005: ';' expected. - ~~~ -!!! error TS2304: Cannot find name 'gen'. - // Once this is supported, the inner expression does not need to be parenthesized. - var x = yield `abc${ x }def`; - ~~~~~ -!!! error TS2304: Cannot find name 'yield'. - } - \ No newline at end of file diff --git a/tests/baselines/reference/templateStringInYieldKeyword.js b/tests/baselines/reference/templateStringInYieldKeyword.js new file mode 100644 index 00000000000..8e98b269cd0 --- /dev/null +++ b/tests/baselines/reference/templateStringInYieldKeyword.js @@ -0,0 +1,12 @@ +//// [templateStringInYieldKeyword.ts] +function* gen() { + // Once this is supported, the inner expression does not need to be parenthesized. + var x = yield `abc${ x }def`; +} + + +//// [templateStringInYieldKeyword.js] +function gen() { + // Once this is supported, the inner expression does not need to be parenthesized. + var x = ; +} diff --git a/tests/baselines/reference/templateStringInYieldKeyword.types b/tests/baselines/reference/templateStringInYieldKeyword.types new file mode 100644 index 00000000000..c3d49ddffb7 --- /dev/null +++ b/tests/baselines/reference/templateStringInYieldKeyword.types @@ -0,0 +1,9 @@ +=== tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts === +function* gen() { +>gen : () => void + + // Once this is supported, the inner expression does not need to be parenthesized. + var x = yield `abc${ x }def`; +>x : unknown +} + diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt index 3bf910f3690..28f33943732 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt @@ -1,29 +1,11 @@ -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,9): error TS1003: Identifier expected. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,15): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,26): error TS1158: Invalid template literal; expected '}' -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(5,1): error TS1160: Unterminated template literal. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,11): error TS2304: Cannot find name 'gen'. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,20): error TS2304: Cannot find name 'yield'. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(3,30): error TS2304: Cannot find name 'def'. +tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,15): error TS1005: '(' expected. -==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts (7 errors) ==== +==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts (1 errors) ==== function* gen { - ~ -!!! error TS1003: Identifier expected. ~ -!!! error TS1005: ';' expected. - ~~~ -!!! error TS2304: Cannot find name 'gen'. +!!! error TS1005: '(' expected. // Once this is supported, yield *must* be parenthesized. var x = `abc${ yield 10 }def`; - ~~ -!!! error TS1158: Invalid template literal; expected '}' - ~~~~~ -!!! error TS2304: Cannot find name 'yield'. - ~~~ -!!! error TS2304: Cannot find name 'def'. } - - -!!! error TS1160: Unterminated template literal. \ No newline at end of file + \ No newline at end of file diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt deleted file mode 100644 index 4e62197e031..00000000000 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.errors.txt +++ /dev/null @@ -1,29 +0,0 @@ -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,9): error TS1003: Identifier expected. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,17): error TS1005: ';' expected. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,26): error TS1158: Invalid template literal; expected '}' -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(5,1): error TS1160: Unterminated template literal. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(1,11): error TS2304: Cannot find name 'gen'. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,20): error TS2304: Cannot find name 'yield'. -tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts(3,30): error TS2304: Cannot find name 'def'. - - -==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts (7 errors) ==== - function* gen() { - ~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1005: ';' expected. - ~~~ -!!! error TS2304: Cannot find name 'gen'. - // Once this is supported, yield *must* be parenthesized. - var x = `abc${ yield 10 }def`; - ~~ -!!! error TS1158: Invalid template literal; expected '}' - ~~~~~ -!!! error TS2304: Cannot find name 'yield'. - ~~~ -!!! error TS2304: Cannot find name 'def'. - } - - -!!! error TS1160: Unterminated template literal. \ No newline at end of file diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js new file mode 100644 index 00000000000..80021ecae2e --- /dev/null +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.js @@ -0,0 +1,12 @@ +//// [templateStringWithEmbeddedYieldKeywordES6.ts] +function* gen() { + // Once this is supported, yield *must* be parenthesized. + var x = `abc${ yield 10 }def`; +} + + +//// [templateStringWithEmbeddedYieldKeywordES6.js] +function gen() { + // Once this is supported, yield *must* be parenthesized. + var x = `abc${}def`; +} diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types new file mode 100644 index 00000000000..c55b40148b1 --- /dev/null +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types @@ -0,0 +1,9 @@ +=== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts === +function* gen() { +>gen : () => void + + // Once this is supported, yield *must* be parenthesized. + var x = `abc${ yield 10 }def`; +>x : string +} + From 3b253e9a4a0f402f16dc3368d78ea8379b456cff Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 24 Nov 2014 22:53:55 -0800 Subject: [PATCH 166/178] Add an _es6 suffix to prevent name collisions. --- ... => ComputedPropertyName10_es6.errors.txt} | 4 +-- ... => ComputedPropertyName11_es6.errors.txt} | 8 ++--- ... => ComputedPropertyName12_es6.errors.txt} | 8 ++--- ... => ComputedPropertyName13_es6.errors.txt} | 4 +-- ... => ComputedPropertyName14_es6.errors.txt} | 4 +-- ... => ComputedPropertyName15_es6.errors.txt} | 4 +-- ... => ComputedPropertyName16_es6.errors.txt} | 10 +++--- ... => ComputedPropertyName17_es6.errors.txt} | 10 +++--- ... => ComputedPropertyName18_es6.errors.txt} | 4 +-- ... => ComputedPropertyName19_es6.errors.txt} | 4 +-- ...t => ComputedPropertyName1_es6.errors.txt} | 8 ++--- ...t => ComputedPropertyName2_es6.errors.txt} | 12 +++---- ...t => ComputedPropertyName3_es6.errors.txt} | 10 +++--- ...t => ComputedPropertyName4_es6.errors.txt} | 10 +++--- ...t => ComputedPropertyName5_es6.errors.txt} | 12 +++---- ...t => ComputedPropertyName6_es6.errors.txt} | 18 +++++----- ...t => ComputedPropertyName7_es6.errors.txt} | 4 +-- ...t => ComputedPropertyName8_es6.errors.txt} | 4 +-- ...t => ComputedPropertyName9_es6.errors.txt} | 6 ++-- .../reference/FunctionDeclaration1.js | 7 ---- ...tion10.js => FunctionDeclaration10_es6.js} | 4 +-- ....types => FunctionDeclaration10_es6.types} | 2 +- .../reference/FunctionDeclaration11.js | 7 ---- .../reference/FunctionDeclaration11_es6.js | 7 ++++ ....types => FunctionDeclaration11_es6.types} | 2 +- ...t => FunctionDeclaration12_es6.errors.txt} | 8 ++--- ...t => FunctionDeclaration13_es6.errors.txt} | 4 +-- ...tion13.js => FunctionDeclaration13_es6.js} | 4 +-- .../reference/FunctionDeclaration1_es6.js | 7 ++++ ...1.types => FunctionDeclaration1_es6.types} | 2 +- .../reference/FunctionDeclaration2.js | 7 ---- .../reference/FunctionDeclaration2_es6.js | 7 ++++ ...2.types => FunctionDeclaration2_es6.types} | 2 +- .../FunctionDeclaration3_es6.errors.txt | 8 +++++ .../reference/FunctionDeclaration3_es6.js | 8 +++++ .../reference/FunctionDeclaration4_es6.js | 7 ++++ ...4.types => FunctionDeclaration4_es6.types} | 2 +- ...xt => FunctionDeclaration5_es6.errors.txt} | 10 +++--- .../FunctionDeclaration6_es6.errors.txt | 8 +++++ .../reference/FunctionDeclaration6_es6.js | 8 +++++ .../FunctionDeclaration7_es6.errors.txt | 11 ++++++ .../reference/FunctionDeclaration7_es6.js | 14 ++++++++ ...xt => FunctionDeclaration8_es6.errors.txt} | 10 +++--- ...xt => FunctionDeclaration9_es6.errors.txt} | 8 ++--- .../reference/FunctionExpression1.js | 6 ---- .../reference/FunctionExpression1_es6.js | 6 ++++ ...n1.types => FunctionExpression1_es6.types} | 2 +- .../reference/FunctionExpression2.js | 6 ---- .../reference/FunctionExpression2_es6.js | 6 ++++ ...n2.types => FunctionExpression2_es6.types} | 2 +- .../reference/FunctionPropertyAssignments1.js | 6 ---- .../FunctionPropertyAssignments1_es6.js | 6 ++++ ...=> FunctionPropertyAssignments1_es6.types} | 2 +- ...nctionPropertyAssignments2_es6.errors.txt} | 4 +-- ...nctionPropertyAssignments3_es6.errors.txt} | 4 +-- ...nctionPropertyAssignments4_es6.errors.txt} | 4 +-- ...nctionPropertyAssignments5_es6.errors.txt} | 10 +++--- ...nctionPropertyAssignments6_es6.errors.txt} | 4 +-- .../MemberFunctionDeclaration1.types | 7 ---- ...1.js => MemberFunctionDeclaration1_es6.js} | 4 +-- .../MemberFunctionDeclaration1_es6.types | 7 ++++ .../MemberFunctionDeclaration2.types | 7 ---- ...2.js => MemberFunctionDeclaration2_es6.js} | 4 +-- .../MemberFunctionDeclaration2_es6.types | 7 ++++ .../MemberFunctionDeclaration3.errors.txt | 18 ---------- .../MemberFunctionDeclaration3_es6.errors.txt | 18 ++++++++++ .../MemberFunctionDeclaration4.errors.txt | 9 ----- .../MemberFunctionDeclaration4_es6.errors.txt | 9 +++++ .../MemberFunctionDeclaration5.errors.txt | 9 ----- .../MemberFunctionDeclaration5_es6.errors.txt | 9 +++++ .../MemberFunctionDeclaration6.errors.txt | 12 ------- .../MemberFunctionDeclaration6_es6.errors.txt | 12 +++++++ .../MemberFunctionDeclaration7.types | 8 ----- ...7.js => MemberFunctionDeclaration7_es6.js} | 4 +-- .../MemberFunctionDeclaration7_es6.types | 8 +++++ .../MemberFunctionDeclaration8.errors.txt | 34 ------------------- .../MemberFunctionDeclaration8_es6.errors.txt | 34 +++++++++++++++++++ .../reference/YieldExpression1.errors.txt | 7 ---- tests/baselines/reference/YieldExpression1.js | 5 --- ...pression10.js => YieldExpression10_es6.js} | 4 +-- ...on10.types => YieldExpression10_es6.types} | 2 +- ...pression11.js => YieldExpression11_es6.js} | 4 +-- ...on11.types => YieldExpression11_es6.types} | 2 +- ...s.txt => YieldExpression12_es6.errors.txt} | 4 +-- .../baselines/reference/YieldExpression13.js | 7 ---- .../reference/YieldExpression13_es6.js | 7 ++++ ...on13.types => YieldExpression13_es6.types} | 2 +- ...s.txt => YieldExpression14_es6.errors.txt} | 4 +-- ...s.txt => YieldExpression15_es6.errors.txt} | 4 +-- ...s.txt => YieldExpression16_es6.errors.txt} | 4 +-- .../reference/YieldExpression17.errors.txt | 10 ------ .../YieldExpression17_es6.errors.txt | 10 ++++++ ...s.txt => YieldExpression18_es6.errors.txt} | 4 +-- ...pression19.js => YieldExpression19_es6.js} | 4 +-- ...on19.types => YieldExpression19_es6.types} | 2 +- .../reference/YieldExpression1_es6.errors.txt | 7 ++++ .../reference/YieldExpression1_es6.js | 5 +++ .../reference/YieldExpression2.errors.txt | 7 ---- .../reference/YieldExpression2_es6.errors.txt | 7 ++++ tests/baselines/reference/YieldExpression3.js | 11 ------ .../reference/YieldExpression3_es6.js | 11 ++++++ ...sion3.types => YieldExpression3_es6.types} | 2 +- ...Expression4.js => YieldExpression4_es6.js} | 4 +-- ...sion4.types => YieldExpression4_es6.types} | 2 +- ...rs.txt => YieldExpression5_es6.errors.txt} | 4 +-- tests/baselines/reference/YieldExpression6.js | 9 ----- .../reference/YieldExpression6_es6.js | 9 +++++ ...sion6.types => YieldExpression6_es6.types} | 2 +- tests/baselines/reference/YieldExpression7.js | 9 ----- .../reference/YieldExpression7_es6.js | 9 +++++ ...sion7.types => YieldExpression7_es6.types} | 2 +- ...rs.txt => YieldExpression8_es6.errors.txt} | 4 +-- ...Expression8.js => YieldExpression8_es6.js} | 4 +-- ...Expression9.js => YieldExpression9_es6.js} | 4 +-- ...sion9.types => YieldExpression9_es6.types} | 2 +- ...ame10.ts => ComputedPropertyName10_es6.ts} | 0 ...ame11.ts => ComputedPropertyName11_es6.ts} | 0 ...ame12.ts => ComputedPropertyName12_es6.ts} | 0 ...ame13.ts => ComputedPropertyName13_es6.ts} | 0 ...ame14.ts => ComputedPropertyName14_es6.ts} | 0 ...ame15.ts => ComputedPropertyName15_es6.ts} | 0 ...ame16.ts => ComputedPropertyName16_es6.ts} | 0 ...ame17.ts => ComputedPropertyName17_es6.ts} | 0 ...ame18.ts => ComputedPropertyName18_es6.ts} | 0 ...ame19.ts => ComputedPropertyName19_es6.ts} | 0 ...yName1.ts => ComputedPropertyName1_es6.ts} | 0 ...yName2.ts => ComputedPropertyName2_es6.ts} | 0 ...yName3.ts => ComputedPropertyName3_es6.ts} | 0 ...yName4.ts => ComputedPropertyName4_es6.ts} | 0 ...yName5.ts => ComputedPropertyName5_es6.ts} | 0 ...yName6.ts => ComputedPropertyName6_es6.ts} | 0 ...yName7.ts => ComputedPropertyName7_es6.ts} | 0 ...yName8.ts => ComputedPropertyName8_es6.ts} | 0 ...yName9.ts => ComputedPropertyName9_es6.ts} | 0 ...tion10.ts => FunctionDeclaration10_es6.ts} | 0 ...tion11.ts => FunctionDeclaration11_es6.ts} | 0 ...tion12.ts => FunctionDeclaration12_es6.ts} | 0 ...tion13.ts => FunctionDeclaration13_es6.ts} | 0 ...ration1.ts => FunctionDeclaration1_es6.ts} | 0 ...ration2.ts => FunctionDeclaration2_es6.ts} | 0 ...ration3.ts => FunctionDeclaration3_es6.ts} | 0 ...ration4.ts => FunctionDeclaration4_es6.ts} | 0 ...ration5.ts => FunctionDeclaration5_es6.ts} | 0 ...ration6.ts => FunctionDeclaration6_es6.ts} | 0 ...ration7.ts => FunctionDeclaration7_es6.ts} | 0 ...ration8.ts => FunctionDeclaration8_es6.ts} | 0 ...ration9.ts => FunctionDeclaration9_es6.ts} | 0 ...ression1.ts => FunctionExpression1_es6.ts} | 0 ...ression2.ts => FunctionExpression2_es6.ts} | 0 ...ts => FunctionPropertyAssignments1_es6.ts} | 0 ...ts => FunctionPropertyAssignments2_es6.ts} | 0 ...ts => FunctionPropertyAssignments3_es6.ts} | 0 ...ts => FunctionPropertyAssignments4_es6.ts} | 0 ...ts => FunctionPropertyAssignments5_es6.ts} | 0 ...ts => FunctionPropertyAssignments6_es6.ts} | 0 .../MemberFunctionDeclaration1_es6.ts} | 0 .../MemberFunctionDeclaration2_es6.ts} | 0 .../MemberFunctionDeclaration3_es6.ts} | 0 .../MemberFunctionDeclaration4_es6.ts} | 0 .../MemberFunctionDeclaration5_es6.ts} | 0 .../MemberFunctionDeclaration6_es6.ts} | 0 .../MemberFunctionDeclaration7_es6.ts} | 0 .../MemberFunctionDeclaration8_es6.ts} | 0 ...pression10.ts => YieldExpression10_es6.ts} | 0 ...pression11.ts => YieldExpression11_es6.ts} | 0 ...pression12.ts => YieldExpression12_es6.ts} | 0 ...pression13.ts => YieldExpression13_es6.ts} | 0 ...pression14.ts => YieldExpression14_es6.ts} | 0 ...pression15.ts => YieldExpression15_es6.ts} | 0 ...pression16.ts => YieldExpression16_es6.ts} | 0 ...pression17.ts => YieldExpression17_es6.ts} | 0 ...pression18.ts => YieldExpression18_es6.ts} | 0 ...pression19.ts => YieldExpression19_es6.ts} | 0 ...Expression1.ts => YieldExpression1_es6.ts} | 0 ...Expression2.ts => YieldExpression2_es6.ts} | 0 ...Expression3.ts => YieldExpression3_es6.ts} | 0 ...Expression4.ts => YieldExpression4_es6.ts} | 0 ...Expression5.ts => YieldExpression5_es6.ts} | 0 ...Expression6.ts => YieldExpression6_es6.ts} | 0 ...Expression7.ts => YieldExpression7_es6.ts} | 0 ...Expression8.ts => YieldExpression8_es6.ts} | 0 ...Expression9.ts => YieldExpression9_es6.ts} | 0 182 files changed, 430 insertions(+), 366 deletions(-) rename tests/baselines/reference/{ComputedPropertyName10.errors.txt => ComputedPropertyName10_es6.errors.txt} (68%) rename tests/baselines/reference/{ComputedPropertyName11.errors.txt => ComputedPropertyName11_es6.errors.txt} (66%) rename tests/baselines/reference/{ComputedPropertyName12.errors.txt => ComputedPropertyName12_es6.errors.txt} (66%) rename tests/baselines/reference/{ComputedPropertyName13.errors.txt => ComputedPropertyName13_es6.errors.txt} (64%) rename tests/baselines/reference/{ComputedPropertyName14.errors.txt => ComputedPropertyName14_es6.errors.txt} (68%) rename tests/baselines/reference/{ComputedPropertyName15.errors.txt => ComputedPropertyName15_es6.errors.txt} (67%) rename tests/baselines/reference/{ComputedPropertyName16.errors.txt => ComputedPropertyName16_es6.errors.txt} (64%) rename tests/baselines/reference/{ComputedPropertyName17.errors.txt => ComputedPropertyName17_es6.errors.txt} (67%) rename tests/baselines/reference/{ComputedPropertyName18.errors.txt => ComputedPropertyName18_es6.errors.txt} (69%) rename tests/baselines/reference/{ComputedPropertyName19.errors.txt => ComputedPropertyName19_es6.errors.txt} (68%) rename tests/baselines/reference/{ComputedPropertyName1.errors.txt => ComputedPropertyName1_es6.errors.txt} (66%) rename tests/baselines/reference/{ComputedPropertyName2.errors.txt => ComputedPropertyName2_es6.errors.txt} (66%) rename tests/baselines/reference/{ComputedPropertyName3.errors.txt => ComputedPropertyName3_es6.errors.txt} (67%) rename tests/baselines/reference/{ComputedPropertyName4.errors.txt => ComputedPropertyName4_es6.errors.txt} (68%) rename tests/baselines/reference/{ComputedPropertyName5.errors.txt => ComputedPropertyName5_es6.errors.txt} (69%) rename tests/baselines/reference/{ComputedPropertyName6.errors.txt => ComputedPropertyName6_es6.errors.txt} (67%) rename tests/baselines/reference/{ComputedPropertyName7.errors.txt => ComputedPropertyName7_es6.errors.txt} (64%) rename tests/baselines/reference/{ComputedPropertyName8.errors.txt => ComputedPropertyName8_es6.errors.txt} (65%) rename tests/baselines/reference/{ComputedPropertyName9.errors.txt => ComputedPropertyName9_es6.errors.txt} (65%) delete mode 100644 tests/baselines/reference/FunctionDeclaration1.js rename tests/baselines/reference/{FunctionDeclaration10.js => FunctionDeclaration10_es6.js} (61%) rename tests/baselines/reference/{FunctionDeclaration10.types => FunctionDeclaration10_es6.types} (88%) delete mode 100644 tests/baselines/reference/FunctionDeclaration11.js create mode 100644 tests/baselines/reference/FunctionDeclaration11_es6.js rename tests/baselines/reference/{FunctionDeclaration11.types => FunctionDeclaration11_es6.types} (80%) rename tests/baselines/reference/{FunctionDeclaration12.errors.txt => FunctionDeclaration12_es6.errors.txt} (71%) rename tests/baselines/reference/{FunctionDeclaration13.errors.txt => FunctionDeclaration13_es6.errors.txt} (73%) rename tests/baselines/reference/{FunctionDeclaration13.js => FunctionDeclaration13_es6.js} (67%) create mode 100644 tests/baselines/reference/FunctionDeclaration1_es6.js rename tests/baselines/reference/{FunctionDeclaration1.types => FunctionDeclaration1_es6.types} (80%) delete mode 100644 tests/baselines/reference/FunctionDeclaration2.js create mode 100644 tests/baselines/reference/FunctionDeclaration2_es6.js rename tests/baselines/reference/{FunctionDeclaration2.types => FunctionDeclaration2_es6.types} (82%) create mode 100644 tests/baselines/reference/FunctionDeclaration3_es6.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration3_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration4_es6.js rename tests/baselines/reference/{FunctionDeclaration4.types => FunctionDeclaration4_es6.types} (80%) rename tests/baselines/reference/{FunctionDeclaration5.errors.txt => FunctionDeclaration5_es6.errors.txt} (66%) create mode 100644 tests/baselines/reference/FunctionDeclaration6_es6.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration6_es6.js create mode 100644 tests/baselines/reference/FunctionDeclaration7_es6.errors.txt create mode 100644 tests/baselines/reference/FunctionDeclaration7_es6.js rename tests/baselines/reference/{FunctionDeclaration8.errors.txt => FunctionDeclaration8_es6.errors.txt} (67%) rename tests/baselines/reference/{FunctionDeclaration9.errors.txt => FunctionDeclaration9_es6.errors.txt} (68%) delete mode 100644 tests/baselines/reference/FunctionExpression1.js create mode 100644 tests/baselines/reference/FunctionExpression1_es6.js rename tests/baselines/reference/{FunctionExpression1.types => FunctionExpression1_es6.types} (85%) delete mode 100644 tests/baselines/reference/FunctionExpression2.js create mode 100644 tests/baselines/reference/FunctionExpression2_es6.js rename tests/baselines/reference/{FunctionExpression2.types => FunctionExpression2_es6.types} (86%) delete mode 100644 tests/baselines/reference/FunctionPropertyAssignments1.js create mode 100644 tests/baselines/reference/FunctionPropertyAssignments1_es6.js rename tests/baselines/reference/{FunctionPropertyAssignments1.types => FunctionPropertyAssignments1_es6.types} (82%) rename tests/baselines/reference/{FunctionPropertyAssignments2.errors.txt => FunctionPropertyAssignments2_es6.errors.txt} (62%) rename tests/baselines/reference/{FunctionPropertyAssignments3.errors.txt => FunctionPropertyAssignments3_es6.errors.txt} (62%) rename tests/baselines/reference/{FunctionPropertyAssignments4.errors.txt => FunctionPropertyAssignments4_es6.errors.txt} (62%) rename tests/baselines/reference/{FunctionPropertyAssignments5.errors.txt => FunctionPropertyAssignments5_es6.errors.txt} (63%) rename tests/baselines/reference/{FunctionPropertyAssignments6.errors.txt => FunctionPropertyAssignments6_es6.errors.txt} (62%) delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration1.types rename tests/baselines/reference/{MemberFunctionDeclaration1.js => MemberFunctionDeclaration1_es6.js} (59%) create mode 100644 tests/baselines/reference/MemberFunctionDeclaration1_es6.types delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration2.types rename tests/baselines/reference/{MemberFunctionDeclaration2.js => MemberFunctionDeclaration2_es6.js} (61%) create mode 100644 tests/baselines/reference/MemberFunctionDeclaration2_es6.types delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration3.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration3_es6.errors.txt delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration4.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration4_es6.errors.txt delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration5.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration5_es6.errors.txt delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration6.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration6_es6.errors.txt delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration7.types rename tests/baselines/reference/{MemberFunctionDeclaration7.js => MemberFunctionDeclaration7_es6.js} (60%) create mode 100644 tests/baselines/reference/MemberFunctionDeclaration7_es6.types delete mode 100644 tests/baselines/reference/MemberFunctionDeclaration8.errors.txt create mode 100644 tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt delete mode 100644 tests/baselines/reference/YieldExpression1.errors.txt delete mode 100644 tests/baselines/reference/YieldExpression1.js rename tests/baselines/reference/{YieldExpression10.js => YieldExpression10_es6.js} (54%) rename tests/baselines/reference/{YieldExpression10.types => YieldExpression10_es6.types} (90%) rename tests/baselines/reference/{YieldExpression11.js => YieldExpression11_es6.js} (68%) rename tests/baselines/reference/{YieldExpression11.types => YieldExpression11_es6.types} (84%) rename tests/baselines/reference/{YieldExpression12.errors.txt => YieldExpression12_es6.errors.txt} (54%) delete mode 100644 tests/baselines/reference/YieldExpression13.js create mode 100644 tests/baselines/reference/YieldExpression13_es6.js rename tests/baselines/reference/{YieldExpression13.types => YieldExpression13_es6.types} (85%) rename tests/baselines/reference/{YieldExpression14.errors.txt => YieldExpression14_es6.errors.txt} (53%) rename tests/baselines/reference/{YieldExpression15.errors.txt => YieldExpression15_es6.errors.txt} (52%) rename tests/baselines/reference/{YieldExpression16.errors.txt => YieldExpression16_es6.errors.txt} (55%) delete mode 100644 tests/baselines/reference/YieldExpression17.errors.txt create mode 100644 tests/baselines/reference/YieldExpression17_es6.errors.txt rename tests/baselines/reference/{YieldExpression18.errors.txt => YieldExpression18_es6.errors.txt} (50%) rename tests/baselines/reference/{YieldExpression19.js => YieldExpression19_es6.js} (71%) rename tests/baselines/reference/{YieldExpression19.types => YieldExpression19_es6.types} (88%) create mode 100644 tests/baselines/reference/YieldExpression1_es6.errors.txt create mode 100644 tests/baselines/reference/YieldExpression1_es6.js delete mode 100644 tests/baselines/reference/YieldExpression2.errors.txt create mode 100644 tests/baselines/reference/YieldExpression2_es6.errors.txt delete mode 100644 tests/baselines/reference/YieldExpression3.js create mode 100644 tests/baselines/reference/YieldExpression3_es6.js rename tests/baselines/reference/{YieldExpression3.types => YieldExpression3_es6.types} (85%) rename tests/baselines/reference/{YieldExpression4.js => YieldExpression4_es6.js} (50%) rename tests/baselines/reference/{YieldExpression4.types => YieldExpression4_es6.types} (85%) rename tests/baselines/reference/{YieldExpression5.errors.txt => YieldExpression5_es6.errors.txt} (51%) delete mode 100644 tests/baselines/reference/YieldExpression6.js create mode 100644 tests/baselines/reference/YieldExpression6_es6.js rename tests/baselines/reference/{YieldExpression6.types => YieldExpression6_es6.types} (85%) delete mode 100644 tests/baselines/reference/YieldExpression7.js create mode 100644 tests/baselines/reference/YieldExpression7_es6.js rename tests/baselines/reference/{YieldExpression7.types => YieldExpression7_es6.types} (85%) rename tests/baselines/reference/{YieldExpression8.errors.txt => YieldExpression8_es6.errors.txt} (54%) rename tests/baselines/reference/{YieldExpression8.js => YieldExpression8_es6.js} (54%) rename tests/baselines/reference/{YieldExpression9.js => YieldExpression9_es6.js} (50%) rename tests/baselines/reference/{YieldExpression9.types => YieldExpression9_es6.types} (88%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName10.ts => ComputedPropertyName10_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName11.ts => ComputedPropertyName11_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName12.ts => ComputedPropertyName12_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName13.ts => ComputedPropertyName13_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName14.ts => ComputedPropertyName14_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName15.ts => ComputedPropertyName15_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName16.ts => ComputedPropertyName16_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName17.ts => ComputedPropertyName17_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName18.ts => ComputedPropertyName18_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName19.ts => ComputedPropertyName19_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName1.ts => ComputedPropertyName1_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName2.ts => ComputedPropertyName2_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName3.ts => ComputedPropertyName3_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName4.ts => ComputedPropertyName4_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName5.ts => ComputedPropertyName5_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName6.ts => ComputedPropertyName6_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName7.ts => ComputedPropertyName7_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName8.ts => ComputedPropertyName8_es6.ts} (100%) rename tests/cases/conformance/es6/computedPropertyNames/{ComputedPropertyName9.ts => ComputedPropertyName9_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration10.ts => FunctionDeclaration10_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration11.ts => FunctionDeclaration11_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration12.ts => FunctionDeclaration12_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration13.ts => FunctionDeclaration13_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration1.ts => FunctionDeclaration1_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration2.ts => FunctionDeclaration2_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration3.ts => FunctionDeclaration3_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration4.ts => FunctionDeclaration4_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration5.ts => FunctionDeclaration5_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration6.ts => FunctionDeclaration6_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration7.ts => FunctionDeclaration7_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration8.ts => FunctionDeclaration8_es6.ts} (100%) rename tests/cases/conformance/es6/functionDeclarations/{FunctionDeclaration9.ts => FunctionDeclaration9_es6.ts} (100%) rename tests/cases/conformance/es6/functionExpressions/{FunctionExpression1.ts => FunctionExpression1_es6.ts} (100%) rename tests/cases/conformance/es6/functionExpressions/{FunctionExpression2.ts => FunctionExpression2_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments1.ts => FunctionPropertyAssignments1_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments2.ts => FunctionPropertyAssignments2_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments3.ts => FunctionPropertyAssignments3_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments4.ts => FunctionPropertyAssignments4_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments5.ts => FunctionPropertyAssignments5_es6.ts} (100%) rename tests/cases/conformance/es6/functionPropertyAssignments/{FunctionPropertyAssignments6.ts => FunctionPropertyAssignments6_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts => memberFunctionDeclarations/MemberFunctionDeclaration1_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts => memberFunctionDeclarations/MemberFunctionDeclaration2_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts => memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts => memberFunctionDeclarations/MemberFunctionDeclaration4_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts => memberFunctionDeclarations/MemberFunctionDeclaration5_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts => memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts => memberFunctionDeclarations/MemberFunctionDeclaration7_es6.ts} (100%) rename tests/cases/conformance/es6/{fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts => memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression10.ts => YieldExpression10_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression11.ts => YieldExpression11_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression12.ts => YieldExpression12_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression13.ts => YieldExpression13_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression14.ts => YieldExpression14_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression15.ts => YieldExpression15_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression16.ts => YieldExpression16_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression17.ts => YieldExpression17_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression18.ts => YieldExpression18_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression19.ts => YieldExpression19_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression1.ts => YieldExpression1_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression2.ts => YieldExpression2_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression3.ts => YieldExpression3_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression4.ts => YieldExpression4_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression5.ts => YieldExpression5_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression6.ts => YieldExpression6_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression7.ts => YieldExpression7_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression8.ts => YieldExpression8_es6.ts} (100%) rename tests/cases/conformance/es6/yieldExpressions/{YieldExpression9.ts => YieldExpression9_es6.ts} (100%) diff --git a/tests/baselines/reference/ComputedPropertyName10.errors.txt b/tests/baselines/reference/ComputedPropertyName10_es6.errors.txt similarity index 68% rename from tests/baselines/reference/ComputedPropertyName10.errors.txt rename to tests/baselines/reference/ComputedPropertyName10_es6.errors.txt index c880e57859c..ba7154a9298 100644 --- a/tests/baselines/reference/ComputedPropertyName10.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName10_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts(2,8): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10_es6.ts(2,8): error TS1005: ';' expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10_es6.ts (1 errors) ==== class C { [e] = 1 ~ diff --git a/tests/baselines/reference/ComputedPropertyName11.errors.txt b/tests/baselines/reference/ComputedPropertyName11_es6.errors.txt similarity index 66% rename from tests/baselines/reference/ComputedPropertyName11.errors.txt rename to tests/baselines/reference/ComputedPropertyName11_es6.errors.txt index 3b23c2f8287..3f96913c1d5 100644 --- a/tests/baselines/reference/ComputedPropertyName11.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName11_es6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(2,7): error TS1005: ';' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(2,8): error TS1109: Expression expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts(2,7): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts(2,8): error TS1109: Expression expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts(3,1): error TS1128: Declaration or statement expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts (3 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts (3 errors) ==== class C { [e](); ~ diff --git a/tests/baselines/reference/ComputedPropertyName12.errors.txt b/tests/baselines/reference/ComputedPropertyName12_es6.errors.txt similarity index 66% rename from tests/baselines/reference/ComputedPropertyName12.errors.txt rename to tests/baselines/reference/ComputedPropertyName12_es6.errors.txt index 575574c2d7e..fefff058fe1 100644 --- a/tests/baselines/reference/ComputedPropertyName12.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName12_es6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(2,7): error TS1005: ';' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(2,10): error TS1005: '=>' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts(2,7): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts(2,10): error TS1005: '=>' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts(3,1): error TS1128: Declaration or statement expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts (3 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts (3 errors) ==== class C { [e]() { } ~ diff --git a/tests/baselines/reference/ComputedPropertyName13.errors.txt b/tests/baselines/reference/ComputedPropertyName13_es6.errors.txt similarity index 64% rename from tests/baselines/reference/ComputedPropertyName13.errors.txt rename to tests/baselines/reference/ComputedPropertyName13_es6.errors.txt index 2024b4d7128..3f8c10fc643 100644 --- a/tests/baselines/reference/ComputedPropertyName13.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName13_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts(1,11): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13_es6.ts(1,11): error TS1022: An index signature parameter must have a type annotation. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13_es6.ts (1 errors) ==== var v: { [e]: number }; ~ !!! error TS1022: An index signature parameter must have a type annotation. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName14.errors.txt b/tests/baselines/reference/ComputedPropertyName14_es6.errors.txt similarity index 68% rename from tests/baselines/reference/ComputedPropertyName14.errors.txt rename to tests/baselines/reference/ComputedPropertyName14_es6.errors.txt index 4fe3cf4e121..7d6052b4179 100644 --- a/tests/baselines/reference/ComputedPropertyName14.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName14_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts(1,13): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14_es6.ts(1,13): error TS1005: ';' expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14_es6.ts (1 errors) ==== var v: { [e](): number }; ~ !!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName15.errors.txt b/tests/baselines/reference/ComputedPropertyName15_es6.errors.txt similarity index 67% rename from tests/baselines/reference/ComputedPropertyName15.errors.txt rename to tests/baselines/reference/ComputedPropertyName15_es6.errors.txt index 4ab96e131e9..689df40f985 100644 --- a/tests/baselines/reference/ComputedPropertyName15.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName15_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts(1,32): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15_es6.ts(1,32): error TS1022: An index signature parameter must have a type annotation. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15_es6.ts (1 errors) ==== var v: { [e: number]: string; [e]: number }; ~ !!! error TS1022: An index signature parameter must have a type annotation. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName16.errors.txt b/tests/baselines/reference/ComputedPropertyName16_es6.errors.txt similarity index 64% rename from tests/baselines/reference/ComputedPropertyName16.errors.txt rename to tests/baselines/reference/ComputedPropertyName16_es6.errors.txt index 631449a818e..c3de61ddf07 100644 --- a/tests/baselines/reference/ComputedPropertyName16.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName16_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,3): error TS1132: Enum member expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(3,1): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,3): error TS2364: Invalid left-hand side of assignment expression. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts(2,4): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts(2,3): error TS1132: Enum member expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts(2,3): error TS2364: Invalid left-hand side of assignment expression. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts(2,4): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts (4 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts (4 errors) ==== enum E { [e] = 1 ~ diff --git a/tests/baselines/reference/ComputedPropertyName17.errors.txt b/tests/baselines/reference/ComputedPropertyName17_es6.errors.txt similarity index 67% rename from tests/baselines/reference/ComputedPropertyName17.errors.txt rename to tests/baselines/reference/ComputedPropertyName17_es6.errors.txt index 3a3d5ca80f9..4b8caf1e62d 100644 --- a/tests/baselines/reference/ComputedPropertyName17.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName17_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,15): error TS1003: Identifier expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,22): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,26): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts(1,16): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts(1,15): error TS1003: Identifier expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts(1,22): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts(1,26): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts(1,16): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts (4 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts (4 errors) ==== var v = { set [e](v) { } } ~ !!! error TS1003: Identifier expected. diff --git a/tests/baselines/reference/ComputedPropertyName18.errors.txt b/tests/baselines/reference/ComputedPropertyName18_es6.errors.txt similarity index 69% rename from tests/baselines/reference/ComputedPropertyName18.errors.txt rename to tests/baselines/reference/ComputedPropertyName18_es6.errors.txt index 1df180bc9c1..8e409750b5c 100644 --- a/tests/baselines/reference/ComputedPropertyName18.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName18_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts(1,13): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18_es6.ts(1,13): error TS1005: ';' expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18_es6.ts (1 errors) ==== var v: { [e]?(): number }; ~ !!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName19.errors.txt b/tests/baselines/reference/ComputedPropertyName19_es6.errors.txt similarity index 68% rename from tests/baselines/reference/ComputedPropertyName19.errors.txt rename to tests/baselines/reference/ComputedPropertyName19_es6.errors.txt index 7e063befdc8..1833deef789 100644 --- a/tests/baselines/reference/ComputedPropertyName19.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName19_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts(1,13): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19_es6.ts(1,13): error TS1005: ';' expected. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19_es6.ts (1 errors) ==== var v: { [e]? }; ~ !!! error TS1005: ';' expected. \ No newline at end of file diff --git a/tests/baselines/reference/ComputedPropertyName1.errors.txt b/tests/baselines/reference/ComputedPropertyName1_es6.errors.txt similarity index 66% rename from tests/baselines/reference/ComputedPropertyName1.errors.txt rename to tests/baselines/reference/ComputedPropertyName1_es6.errors.txt index 89423599a44..260ff20dc36 100644 --- a/tests/baselines/reference/ComputedPropertyName1.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName1_es6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,11): error TS1136: Property assignment expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,15): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts(1,12): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts(1,15): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts(1,12): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts (3 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts (3 errors) ==== var v = { [e] }; ~ !!! error TS1136: Property assignment expected. diff --git a/tests/baselines/reference/ComputedPropertyName2.errors.txt b/tests/baselines/reference/ComputedPropertyName2_es6.errors.txt similarity index 66% rename from tests/baselines/reference/ComputedPropertyName2.errors.txt rename to tests/baselines/reference/ComputedPropertyName2_es6.errors.txt index fd2bf09a094..f0a06ef84bc 100644 --- a/tests/baselines/reference/ComputedPropertyName2.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName2_es6.errors.txt @@ -1,11 +1,11 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,11): error TS1136: Property assignment expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,14): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,16): error TS1134: Variable declaration expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,18): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts(1,12): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts(1,14): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts(1,16): error TS1134: Variable declaration expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts(1,18): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts(1,12): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts (5 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts (5 errors) ==== var v = { [e]: 1 }; ~ !!! error TS1136: Property assignment expected. diff --git a/tests/baselines/reference/ComputedPropertyName3.errors.txt b/tests/baselines/reference/ComputedPropertyName3_es6.errors.txt similarity index 67% rename from tests/baselines/reference/ComputedPropertyName3.errors.txt rename to tests/baselines/reference/ComputedPropertyName3_es6.errors.txt index 4aaaa46ca68..3f1e5d707a8 100644 --- a/tests/baselines/reference/ComputedPropertyName3.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName3_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,11): error TS1136: Property assignment expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,17): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,21): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts(1,12): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts(1,17): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts(1,21): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts(1,12): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts (4 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts (4 errors) ==== var v = { [e]() { } }; ~ !!! error TS1136: Property assignment expected. diff --git a/tests/baselines/reference/ComputedPropertyName4.errors.txt b/tests/baselines/reference/ComputedPropertyName4_es6.errors.txt similarity index 68% rename from tests/baselines/reference/ComputedPropertyName4.errors.txt rename to tests/baselines/reference/ComputedPropertyName4_es6.errors.txt index d03de72fb54..a1f22f611f9 100644 --- a/tests/baselines/reference/ComputedPropertyName4.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName4_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,15): error TS1003: Identifier expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,21): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,25): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts(1,16): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts(1,15): error TS1003: Identifier expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts(1,21): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts(1,25): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts(1,16): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts (4 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts (4 errors) ==== var v = { get [e]() { } }; ~ !!! error TS1003: Identifier expected. diff --git a/tests/baselines/reference/ComputedPropertyName5.errors.txt b/tests/baselines/reference/ComputedPropertyName5_es6.errors.txt similarity index 69% rename from tests/baselines/reference/ComputedPropertyName5.errors.txt rename to tests/baselines/reference/ComputedPropertyName5_es6.errors.txt index 61906ddcced..2ce2faaee62 100644 --- a/tests/baselines/reference/ComputedPropertyName5.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName5_es6.errors.txt @@ -1,11 +1,11 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,18): error TS1005: ':' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,28): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,32): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,18): error TS2304: Cannot find name 'get'. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts(1,23): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts(1,18): error TS1005: ':' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts(1,28): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts(1,32): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts(1,18): error TS2304: Cannot find name 'get'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts(1,23): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts (5 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts (5 errors) ==== var v = { public get [e]() { } }; ~~~ !!! error TS1005: ':' expected. diff --git a/tests/baselines/reference/ComputedPropertyName6.errors.txt b/tests/baselines/reference/ComputedPropertyName6_es6.errors.txt similarity index 67% rename from tests/baselines/reference/ComputedPropertyName6.errors.txt rename to tests/baselines/reference/ComputedPropertyName6_es6.errors.txt index 979ad0a664f..ca6bce48295 100644 --- a/tests/baselines/reference/ComputedPropertyName6.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName6_es6.errors.txt @@ -1,14 +1,14 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,11): error TS1136: Property assignment expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,14): error TS1005: ',' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,16): error TS1134: Variable declaration expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,26): error TS1005: ';' expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,30): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,12): error TS2304: Cannot find name 'e'. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,20): error TS2304: Cannot find name 'e'. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts(1,24): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,14): error TS1005: ',' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,16): error TS1134: Variable declaration expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,26): error TS1005: ';' expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,30): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,12): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,20): error TS2304: Cannot find name 'e'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts(1,24): error TS2304: Cannot find name 'e'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts (8 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts (8 errors) ==== var v = { [e]: 1, [e + e]: 2 }; ~ !!! error TS1136: Property assignment expected. diff --git a/tests/baselines/reference/ComputedPropertyName7.errors.txt b/tests/baselines/reference/ComputedPropertyName7_es6.errors.txt similarity index 64% rename from tests/baselines/reference/ComputedPropertyName7.errors.txt rename to tests/baselines/reference/ComputedPropertyName7_es6.errors.txt index 594928afa1f..00be8f610e0 100644 --- a/tests/baselines/reference/ComputedPropertyName7.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName7_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts(2,5): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7_es6.ts(2,5): error TS1022: An index signature parameter must have a type annotation. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7_es6.ts (1 errors) ==== class C { [e] ~ diff --git a/tests/baselines/reference/ComputedPropertyName8.errors.txt b/tests/baselines/reference/ComputedPropertyName8_es6.errors.txt similarity index 65% rename from tests/baselines/reference/ComputedPropertyName8.errors.txt rename to tests/baselines/reference/ComputedPropertyName8_es6.errors.txt index 881d107a80b..58386bbe177 100644 --- a/tests/baselines/reference/ComputedPropertyName8.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName8_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts(2,12): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8_es6.ts(2,12): error TS1022: An index signature parameter must have a type annotation. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts (1 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8_es6.ts (1 errors) ==== class C { public [e] ~ diff --git a/tests/baselines/reference/ComputedPropertyName9.errors.txt b/tests/baselines/reference/ComputedPropertyName9_es6.errors.txt similarity index 65% rename from tests/baselines/reference/ComputedPropertyName9.errors.txt rename to tests/baselines/reference/ComputedPropertyName9_es6.errors.txt index e11503bb2fe..0872f69aebe 100644 --- a/tests/baselines/reference/ComputedPropertyName9.errors.txt +++ b/tests/baselines/reference/ComputedPropertyName9_es6.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts(2,5): error TS1022: An index signature parameter must have a type annotation. -tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts(2,9): error TS2304: Cannot find name 'Type'. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9_es6.ts(2,5): error TS1022: An index signature parameter must have a type annotation. +tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9_es6.ts(2,9): error TS2304: Cannot find name 'Type'. -==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts (2 errors) ==== +==== tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9_es6.ts (2 errors) ==== class C { [e]: Type ~ diff --git a/tests/baselines/reference/FunctionDeclaration1.js b/tests/baselines/reference/FunctionDeclaration1.js deleted file mode 100644 index bc5afa0fece..00000000000 --- a/tests/baselines/reference/FunctionDeclaration1.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [FunctionDeclaration1.ts] -function * foo() { -} - -//// [FunctionDeclaration1.js] -function foo() { -} diff --git a/tests/baselines/reference/FunctionDeclaration10.js b/tests/baselines/reference/FunctionDeclaration10_es6.js similarity index 61% rename from tests/baselines/reference/FunctionDeclaration10.js rename to tests/baselines/reference/FunctionDeclaration10_es6.js index 069433637eb..51694533964 100644 --- a/tests/baselines/reference/FunctionDeclaration10.js +++ b/tests/baselines/reference/FunctionDeclaration10_es6.js @@ -1,8 +1,8 @@ -//// [FunctionDeclaration10.ts] +//// [FunctionDeclaration10_es6.ts] function * foo(a = yield => yield) { } -//// [FunctionDeclaration10.js] +//// [FunctionDeclaration10_es6.js] function foo(a) { if (a === void 0) { a = function (yield) { return yield; }; } } diff --git a/tests/baselines/reference/FunctionDeclaration10.types b/tests/baselines/reference/FunctionDeclaration10_es6.types similarity index 88% rename from tests/baselines/reference/FunctionDeclaration10.types rename to tests/baselines/reference/FunctionDeclaration10_es6.types index 0e88aeecf07..973de97fab1 100644 --- a/tests/baselines/reference/FunctionDeclaration10.types +++ b/tests/baselines/reference/FunctionDeclaration10_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts === +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10_es6.ts === function * foo(a = yield => yield) { >foo : (a?: (yield: any) => any) => void >a : (yield: any) => any diff --git a/tests/baselines/reference/FunctionDeclaration11.js b/tests/baselines/reference/FunctionDeclaration11.js deleted file mode 100644 index a4587554910..00000000000 --- a/tests/baselines/reference/FunctionDeclaration11.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [FunctionDeclaration11.ts] -function * yield() { -} - -//// [FunctionDeclaration11.js] -function yield() { -} diff --git a/tests/baselines/reference/FunctionDeclaration11_es6.js b/tests/baselines/reference/FunctionDeclaration11_es6.js new file mode 100644 index 00000000000..ba497b3e529 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration11_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration11_es6.ts] +function * yield() { +} + +//// [FunctionDeclaration11_es6.js] +function yield() { +} diff --git a/tests/baselines/reference/FunctionDeclaration11.types b/tests/baselines/reference/FunctionDeclaration11_es6.types similarity index 80% rename from tests/baselines/reference/FunctionDeclaration11.types rename to tests/baselines/reference/FunctionDeclaration11_es6.types index 8ba840b0202..f57a385c359 100644 --- a/tests/baselines/reference/FunctionDeclaration11.types +++ b/tests/baselines/reference/FunctionDeclaration11_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts === +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11_es6.ts === function * yield() { >yield : () => void } diff --git a/tests/baselines/reference/FunctionDeclaration12.errors.txt b/tests/baselines/reference/FunctionDeclaration12_es6.errors.txt similarity index 71% rename from tests/baselines/reference/FunctionDeclaration12.errors.txt rename to tests/baselines/reference/FunctionDeclaration12_es6.errors.txt index 5bea114c4b3..358ec5ea041 100644 --- a/tests/baselines/reference/FunctionDeclaration12.errors.txt +++ b/tests/baselines/reference/FunctionDeclaration12_es6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,20): error TS1005: '(' expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,25): error TS1005: '=' expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts(1,28): error TS1005: '=>' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts(1,20): error TS1005: '(' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts(1,25): error TS1005: '=' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts(1,28): error TS1005: '=>' expected. -==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts (3 errors) ==== +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts (3 errors) ==== var v = function * yield() { } ~~~~~ !!! error TS1005: '(' expected. diff --git a/tests/baselines/reference/FunctionDeclaration13.errors.txt b/tests/baselines/reference/FunctionDeclaration13_es6.errors.txt similarity index 73% rename from tests/baselines/reference/FunctionDeclaration13.errors.txt rename to tests/baselines/reference/FunctionDeclaration13_es6.errors.txt index 2a0fc461e05..1f921475fd3 100644 --- a/tests/baselines/reference/FunctionDeclaration13.errors.txt +++ b/tests/baselines/reference/FunctionDeclaration13_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts(3,11): error TS2304: Cannot find name 'yield'. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13_es6.ts(3,11): error TS2304: Cannot find name 'yield'. -==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts (1 errors) ==== +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13_es6.ts (1 errors) ==== function * foo() { // Legal to use 'yield' in a type context. var v: yield; diff --git a/tests/baselines/reference/FunctionDeclaration13.js b/tests/baselines/reference/FunctionDeclaration13_es6.js similarity index 67% rename from tests/baselines/reference/FunctionDeclaration13.js rename to tests/baselines/reference/FunctionDeclaration13_es6.js index 9846e19c140..4c82b037569 100644 --- a/tests/baselines/reference/FunctionDeclaration13.js +++ b/tests/baselines/reference/FunctionDeclaration13_es6.js @@ -1,11 +1,11 @@ -//// [FunctionDeclaration13.ts] +//// [FunctionDeclaration13_es6.ts] function * foo() { // Legal to use 'yield' in a type context. var v: yield; } -//// [FunctionDeclaration13.js] +//// [FunctionDeclaration13_es6.js] function foo() { // Legal to use 'yield' in a type context. var v; diff --git a/tests/baselines/reference/FunctionDeclaration1_es6.js b/tests/baselines/reference/FunctionDeclaration1_es6.js new file mode 100644 index 00000000000..262c7ea02fb --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration1_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration1_es6.ts] +function * foo() { +} + +//// [FunctionDeclaration1_es6.js] +function foo() { +} diff --git a/tests/baselines/reference/FunctionDeclaration1.types b/tests/baselines/reference/FunctionDeclaration1_es6.types similarity index 80% rename from tests/baselines/reference/FunctionDeclaration1.types rename to tests/baselines/reference/FunctionDeclaration1_es6.types index 94f1f2d456c..69b26e5dd10 100644 --- a/tests/baselines/reference/FunctionDeclaration1.types +++ b/tests/baselines/reference/FunctionDeclaration1_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts === +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1_es6.ts === function * foo() { >foo : () => void } diff --git a/tests/baselines/reference/FunctionDeclaration2.js b/tests/baselines/reference/FunctionDeclaration2.js deleted file mode 100644 index 09f3d6dd4c0..00000000000 --- a/tests/baselines/reference/FunctionDeclaration2.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [FunctionDeclaration2.ts] -function f(yield) { -} - -//// [FunctionDeclaration2.js] -function f(yield) { -} diff --git a/tests/baselines/reference/FunctionDeclaration2_es6.js b/tests/baselines/reference/FunctionDeclaration2_es6.js new file mode 100644 index 00000000000..dc73cad330f --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration2_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration2_es6.ts] +function f(yield) { +} + +//// [FunctionDeclaration2_es6.js] +function f(yield) { +} diff --git a/tests/baselines/reference/FunctionDeclaration2.types b/tests/baselines/reference/FunctionDeclaration2_es6.types similarity index 82% rename from tests/baselines/reference/FunctionDeclaration2.types rename to tests/baselines/reference/FunctionDeclaration2_es6.types index 89fcb53b20c..f23d9cf6840 100644 --- a/tests/baselines/reference/FunctionDeclaration2.types +++ b/tests/baselines/reference/FunctionDeclaration2_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts === +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2_es6.ts === function f(yield) { >f : (yield: any) => void >yield : any diff --git a/tests/baselines/reference/FunctionDeclaration3_es6.errors.txt b/tests/baselines/reference/FunctionDeclaration3_es6.errors.txt new file mode 100644 index 00000000000..409baef3a50 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration3_es6.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3_es6.ts(1,20): error TS2372: Parameter 'yield' cannot be referenced in its initializer. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3_es6.ts (1 errors) ==== + function f(yield = yield) { + ~~~~~ +!!! error TS2372: Parameter 'yield' cannot be referenced in its initializer. + } \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration3_es6.js b/tests/baselines/reference/FunctionDeclaration3_es6.js new file mode 100644 index 00000000000..e1df936dd21 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration3_es6.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration3_es6.ts] +function f(yield = yield) { +} + +//// [FunctionDeclaration3_es6.js] +function f(yield) { + if (yield === void 0) { yield = yield; } +} diff --git a/tests/baselines/reference/FunctionDeclaration4_es6.js b/tests/baselines/reference/FunctionDeclaration4_es6.js new file mode 100644 index 00000000000..da6c695fcb9 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration4_es6.js @@ -0,0 +1,7 @@ +//// [FunctionDeclaration4_es6.ts] +function yield() { +} + +//// [FunctionDeclaration4_es6.js] +function yield() { +} diff --git a/tests/baselines/reference/FunctionDeclaration4.types b/tests/baselines/reference/FunctionDeclaration4_es6.types similarity index 80% rename from tests/baselines/reference/FunctionDeclaration4.types rename to tests/baselines/reference/FunctionDeclaration4_es6.types index f2618678095..e4f102a8f70 100644 --- a/tests/baselines/reference/FunctionDeclaration4.types +++ b/tests/baselines/reference/FunctionDeclaration4_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts === +=== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4_es6.ts === function yield() { >yield : () => void } diff --git a/tests/baselines/reference/FunctionDeclaration5.errors.txt b/tests/baselines/reference/FunctionDeclaration5_es6.errors.txt similarity index 66% rename from tests/baselines/reference/FunctionDeclaration5.errors.txt rename to tests/baselines/reference/FunctionDeclaration5_es6.errors.txt index eebbae4d8c5..9a8be921795 100644 --- a/tests/baselines/reference/FunctionDeclaration5.errors.txt +++ b/tests/baselines/reference/FunctionDeclaration5_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,14): error TS1138: Parameter declaration expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,19): error TS1005: ';' expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,10): error TS2391: Function implementation is missing or not immediately following the declaration. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts(1,14): error TS2304: Cannot find name 'yield'. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts(1,14): error TS1138: Parameter declaration expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts(1,19): error TS1005: ';' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts(1,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts(1,14): error TS2304: Cannot find name 'yield'. -==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts (4 errors) ==== +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts (4 errors) ==== function*foo(yield) { ~~~~~ !!! error TS1138: Parameter declaration expected. diff --git a/tests/baselines/reference/FunctionDeclaration6_es6.errors.txt b/tests/baselines/reference/FunctionDeclaration6_es6.errors.txt new file mode 100644 index 00000000000..7d5eb768be6 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration6_es6.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6_es6.ts(1,18): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6_es6.ts (1 errors) ==== + function*foo(a = yield) { + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + } \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration6_es6.js b/tests/baselines/reference/FunctionDeclaration6_es6.js new file mode 100644 index 00000000000..07b3ff52212 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration6_es6.js @@ -0,0 +1,8 @@ +//// [FunctionDeclaration6_es6.ts] +function*foo(a = yield) { +} + +//// [FunctionDeclaration6_es6.js] +function foo(a) { + if (a === void 0) { a = yield; } +} diff --git a/tests/baselines/reference/FunctionDeclaration7_es6.errors.txt b/tests/baselines/reference/FunctionDeclaration7_es6.errors.txt new file mode 100644 index 00000000000..95ad904bdd9 --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration7_es6.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7_es6.ts(3,20): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7_es6.ts (1 errors) ==== + function*bar() { + // 'yield' here is an identifier, and not a yield expression. + function*foo(a = yield) { + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/FunctionDeclaration7_es6.js b/tests/baselines/reference/FunctionDeclaration7_es6.js new file mode 100644 index 00000000000..661e1668e0f --- /dev/null +++ b/tests/baselines/reference/FunctionDeclaration7_es6.js @@ -0,0 +1,14 @@ +//// [FunctionDeclaration7_es6.ts] +function*bar() { + // 'yield' here is an identifier, and not a yield expression. + function*foo(a = yield) { + } +} + +//// [FunctionDeclaration7_es6.js] +function bar() { + // 'yield' here is an identifier, and not a yield expression. + function foo(a) { + if (a === void 0) { a = yield; } + } +} diff --git a/tests/baselines/reference/FunctionDeclaration8.errors.txt b/tests/baselines/reference/FunctionDeclaration8_es6.errors.txt similarity index 67% rename from tests/baselines/reference/FunctionDeclaration8.errors.txt rename to tests/baselines/reference/FunctionDeclaration8_es6.errors.txt index a5deb7f655c..a30b8d80310 100644 --- a/tests/baselines/reference/FunctionDeclaration8.errors.txt +++ b/tests/baselines/reference/FunctionDeclaration8_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,11): error TS1136: Property assignment expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,18): error TS1005: ',' expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,24): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts(1,12): error TS2304: Cannot find name 'yield'. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts(1,11): error TS1136: Property assignment expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts(1,18): error TS1005: ',' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts(1,24): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts(1,12): error TS2304: Cannot find name 'yield'. -==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts (4 errors) ==== +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts (4 errors) ==== var v = { [yield]: foo } ~ !!! error TS1136: Property assignment expected. diff --git a/tests/baselines/reference/FunctionDeclaration9.errors.txt b/tests/baselines/reference/FunctionDeclaration9_es6.errors.txt similarity index 68% rename from tests/baselines/reference/FunctionDeclaration9.errors.txt rename to tests/baselines/reference/FunctionDeclaration9_es6.errors.txt index 2d070e90ebb..b4cf83a7b6c 100644 --- a/tests/baselines/reference/FunctionDeclaration9.errors.txt +++ b/tests/baselines/reference/FunctionDeclaration9_es6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(2,13): error TS1136: Property assignment expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(2,20): error TS1005: ',' expected. -tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts(2,13): error TS1136: Property assignment expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts(2,20): error TS1005: ',' expected. +tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts(3,1): error TS1128: Declaration or statement expected. -==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts (3 errors) ==== +==== tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts (3 errors) ==== function * foo() { var v = { [yield]: foo } ~ diff --git a/tests/baselines/reference/FunctionExpression1.js b/tests/baselines/reference/FunctionExpression1.js deleted file mode 100644 index d74342ef366..00000000000 --- a/tests/baselines/reference/FunctionExpression1.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [FunctionExpression1.ts] -var v = function * () { } - -//// [FunctionExpression1.js] -var v = function () { -}; diff --git a/tests/baselines/reference/FunctionExpression1_es6.js b/tests/baselines/reference/FunctionExpression1_es6.js new file mode 100644 index 00000000000..7c8d82f4ca8 --- /dev/null +++ b/tests/baselines/reference/FunctionExpression1_es6.js @@ -0,0 +1,6 @@ +//// [FunctionExpression1_es6.ts] +var v = function * () { } + +//// [FunctionExpression1_es6.js] +var v = function () { +}; diff --git a/tests/baselines/reference/FunctionExpression1.types b/tests/baselines/reference/FunctionExpression1_es6.types similarity index 85% rename from tests/baselines/reference/FunctionExpression1.types rename to tests/baselines/reference/FunctionExpression1_es6.types index 6a501aedf22..c857d53baba 100644 --- a/tests/baselines/reference/FunctionExpression1.types +++ b/tests/baselines/reference/FunctionExpression1_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts === +=== tests/cases/conformance/es6/functionExpressions/FunctionExpression1_es6.ts === var v = function * () { } >v : () => void >function * () { } : () => void diff --git a/tests/baselines/reference/FunctionExpression2.js b/tests/baselines/reference/FunctionExpression2.js deleted file mode 100644 index 784aea781a3..00000000000 --- a/tests/baselines/reference/FunctionExpression2.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [FunctionExpression2.ts] -var v = function * foo() { } - -//// [FunctionExpression2.js] -var v = function foo() { -}; diff --git a/tests/baselines/reference/FunctionExpression2_es6.js b/tests/baselines/reference/FunctionExpression2_es6.js new file mode 100644 index 00000000000..0a2468bcb8c --- /dev/null +++ b/tests/baselines/reference/FunctionExpression2_es6.js @@ -0,0 +1,6 @@ +//// [FunctionExpression2_es6.ts] +var v = function * foo() { } + +//// [FunctionExpression2_es6.js] +var v = function foo() { +}; diff --git a/tests/baselines/reference/FunctionExpression2.types b/tests/baselines/reference/FunctionExpression2_es6.types similarity index 86% rename from tests/baselines/reference/FunctionExpression2.types rename to tests/baselines/reference/FunctionExpression2_es6.types index 488c181f3e5..7bd9f090435 100644 --- a/tests/baselines/reference/FunctionExpression2.types +++ b/tests/baselines/reference/FunctionExpression2_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts === +=== tests/cases/conformance/es6/functionExpressions/FunctionExpression2_es6.ts === var v = function * foo() { } >v : () => void >function * foo() { } : () => void diff --git a/tests/baselines/reference/FunctionPropertyAssignments1.js b/tests/baselines/reference/FunctionPropertyAssignments1.js deleted file mode 100644 index 8285f88a5ee..00000000000 --- a/tests/baselines/reference/FunctionPropertyAssignments1.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [FunctionPropertyAssignments1.ts] -var v = { *foo() { } } - -//// [FunctionPropertyAssignments1.js] -var v = { foo: function () { -} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments1_es6.js b/tests/baselines/reference/FunctionPropertyAssignments1_es6.js new file mode 100644 index 00000000000..a451dcfb363 --- /dev/null +++ b/tests/baselines/reference/FunctionPropertyAssignments1_es6.js @@ -0,0 +1,6 @@ +//// [FunctionPropertyAssignments1_es6.ts] +var v = { *foo() { } } + +//// [FunctionPropertyAssignments1_es6.js] +var v = { foo: function () { +} }; diff --git a/tests/baselines/reference/FunctionPropertyAssignments1.types b/tests/baselines/reference/FunctionPropertyAssignments1_es6.types similarity index 82% rename from tests/baselines/reference/FunctionPropertyAssignments1.types rename to tests/baselines/reference/FunctionPropertyAssignments1_es6.types index 5821956b66e..2dfbf5cb657 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments1.types +++ b/tests/baselines/reference/FunctionPropertyAssignments1_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts === +=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1_es6.ts === var v = { *foo() { } } >v : { foo: () => void; } >{ *foo() { } } : { foo: () => void; } diff --git a/tests/baselines/reference/FunctionPropertyAssignments2.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments2_es6.errors.txt similarity index 62% rename from tests/baselines/reference/FunctionPropertyAssignments2.errors.txt rename to tests/baselines/reference/FunctionPropertyAssignments2_es6.errors.txt index 1737a65e029..f0287f12696 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments2.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments2_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts(1,12): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts(1,12): error TS1003: Identifier expected. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts (1 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts (1 errors) ==== var v = { *() { } } ~ !!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments3.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments3_es6.errors.txt similarity index 62% rename from tests/baselines/reference/FunctionPropertyAssignments3.errors.txt rename to tests/baselines/reference/FunctionPropertyAssignments3_es6.errors.txt index a0e8a3b5e58..b5873e80796 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments3.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments3_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts(1,12): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts(1,12): error TS1003: Identifier expected. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts (1 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts (1 errors) ==== var v = { *{ } } ~ !!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments4.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments4_es6.errors.txt similarity index 62% rename from tests/baselines/reference/FunctionPropertyAssignments4.errors.txt rename to tests/baselines/reference/FunctionPropertyAssignments4_es6.errors.txt index 19288b269aa..285341f04dc 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments4.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments4_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts(1,13): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4_es6.ts(1,13): error TS1003: Identifier expected. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts (1 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4_es6.ts (1 errors) ==== var v = { * } ~ !!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments5.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt similarity index 63% rename from tests/baselines/reference/FunctionPropertyAssignments5.errors.txt rename to tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt index 5b4a4b5a591..961dabaa996 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments5.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,12): error TS1003: Identifier expected. -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,22): error TS1005: ',' expected. -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,26): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts(1,13): error TS2304: Cannot find name 'foo'. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,12): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,22): error TS1005: ',' expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,26): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,13): error TS2304: Cannot find name 'foo'. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts (4 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts (4 errors) ==== var v = { *[foo()]() { } } ~ !!! error TS1003: Identifier expected. diff --git a/tests/baselines/reference/FunctionPropertyAssignments6.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments6_es6.errors.txt similarity index 62% rename from tests/baselines/reference/FunctionPropertyAssignments6.errors.txt rename to tests/baselines/reference/FunctionPropertyAssignments6_es6.errors.txt index bf0e237aadb..a4e8450bd73 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments6.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments6_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts(1,12): error TS1003: Identifier expected. +tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts(1,12): error TS1003: Identifier expected. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts (1 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts (1 errors) ==== var v = { *() { } } ~ !!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration1.types b/tests/baselines/reference/MemberFunctionDeclaration1.types deleted file mode 100644 index 869592d072a..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration1.types +++ /dev/null @@ -1,7 +0,0 @@ -=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts === -class C { ->C : C - - *foo() { } ->foo : () => void -} diff --git a/tests/baselines/reference/MemberFunctionDeclaration1.js b/tests/baselines/reference/MemberFunctionDeclaration1_es6.js similarity index 59% rename from tests/baselines/reference/MemberFunctionDeclaration1.js rename to tests/baselines/reference/MemberFunctionDeclaration1_es6.js index b5630337c9a..86e7c9d418a 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration1.js +++ b/tests/baselines/reference/MemberFunctionDeclaration1_es6.js @@ -1,9 +1,9 @@ -//// [MemberFunctionDeclaration1.ts] +//// [MemberFunctionDeclaration1_es6.ts] class C { *foo() { } } -//// [MemberFunctionDeclaration1.js] +//// [MemberFunctionDeclaration1_es6.js] var C = (function () { function C() { } diff --git a/tests/baselines/reference/MemberFunctionDeclaration1_es6.types b/tests/baselines/reference/MemberFunctionDeclaration1_es6.types new file mode 100644 index 00000000000..265d3fdb291 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration1_es6.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration1_es6.ts === +class C { +>C : C + + *foo() { } +>foo : () => void +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration2.types b/tests/baselines/reference/MemberFunctionDeclaration2.types deleted file mode 100644 index ad076636a2f..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration2.types +++ /dev/null @@ -1,7 +0,0 @@ -=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts === -class C { ->C : C - - public * foo() { } ->foo : () => void -} diff --git a/tests/baselines/reference/MemberFunctionDeclaration2.js b/tests/baselines/reference/MemberFunctionDeclaration2_es6.js similarity index 61% rename from tests/baselines/reference/MemberFunctionDeclaration2.js rename to tests/baselines/reference/MemberFunctionDeclaration2_es6.js index 22589facd29..efd60844dc7 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration2.js +++ b/tests/baselines/reference/MemberFunctionDeclaration2_es6.js @@ -1,9 +1,9 @@ -//// [MemberFunctionDeclaration2.ts] +//// [MemberFunctionDeclaration2_es6.ts] class C { public * foo() { } } -//// [MemberFunctionDeclaration2.js] +//// [MemberFunctionDeclaration2_es6.js] var C = (function () { function C() { } diff --git a/tests/baselines/reference/MemberFunctionDeclaration2_es6.types b/tests/baselines/reference/MemberFunctionDeclaration2_es6.types new file mode 100644 index 00000000000..e1e3f9d17e5 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration2_es6.types @@ -0,0 +1,7 @@ +=== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration2_es6.ts === +class C { +>C : C + + public * foo() { } +>foo : () => void +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt deleted file mode 100644 index a9091ef1de7..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration3.errors.txt +++ /dev/null @@ -1,18 +0,0 @@ -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,5): error TS1003: Identifier expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,10): error TS1005: ';' expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(2,13): error TS1005: '=>' expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts(3,1): error TS1128: Declaration or statement expected. - - -==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts (4 errors) ==== - class C { - *[foo]() { } - ~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1005: ';' expected. - ~ -!!! error TS1005: '=>' expected. - } - ~ -!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration3_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration3_es6.errors.txt new file mode 100644 index 00000000000..b3a2de4eec6 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration3_es6.errors.txt @@ -0,0 +1,18 @@ +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts(2,5): error TS1003: Identifier expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts(2,10): error TS1005: ';' expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts(2,13): error TS1005: '=>' expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts(3,1): error TS1128: Declaration or statement expected. + + +==== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts (4 errors) ==== + class C { + *[foo]() { } + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: ';' expected. + ~ +!!! error TS1005: '=>' expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt deleted file mode 100644 index 262942cccb4..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration4.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts(2,5): error TS1003: Identifier expected. - - -==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts (1 errors) ==== - class C { - *() { } - ~ -!!! error TS1003: Identifier expected. - } \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration4_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration4_es6.errors.txt new file mode 100644 index 00000000000..988527ccfd7 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration4_es6.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration4_es6.ts(2,5): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration4_es6.ts (1 errors) ==== + class C { + *() { } + ~ +!!! error TS1003: Identifier expected. + } \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt deleted file mode 100644 index 262b9011e25..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration5.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts(3,1): error TS1003: Identifier expected. - - -==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts (1 errors) ==== - class C { - * - } - ~ -!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration5_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration5_es6.errors.txt new file mode 100644 index 00000000000..e27d6198104 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration5_es6.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration5_es6.ts(3,1): error TS1003: Identifier expected. + + +==== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration5_es6.ts (1 errors) ==== + class C { + * + } + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt deleted file mode 100644 index eabbfc9ae79..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration6.errors.txt +++ /dev/null @@ -1,12 +0,0 @@ -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts(3,1): error TS1005: '(' expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts(2,5): error TS2391: Function implementation is missing or not immediately following the declaration. - - -==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts (2 errors) ==== - class C { - *foo - ~~~ -!!! error TS2391: Function implementation is missing or not immediately following the declaration. - } - ~ -!!! error TS1005: '(' expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration6_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration6_es6.errors.txt new file mode 100644 index 00000000000..b79a61c8866 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration6_es6.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts(3,1): error TS1005: '(' expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts(2,5): error TS2391: Function implementation is missing or not immediately following the declaration. + + +==== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts (2 errors) ==== + class C { + *foo + ~~~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + ~ +!!! error TS1005: '(' expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration7.types b/tests/baselines/reference/MemberFunctionDeclaration7.types deleted file mode 100644 index 8c725049782..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration7.types +++ /dev/null @@ -1,8 +0,0 @@ -=== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts === -class C { ->C : C - - *foo() { } ->foo : () => void ->T : T -} diff --git a/tests/baselines/reference/MemberFunctionDeclaration7.js b/tests/baselines/reference/MemberFunctionDeclaration7_es6.js similarity index 60% rename from tests/baselines/reference/MemberFunctionDeclaration7.js rename to tests/baselines/reference/MemberFunctionDeclaration7_es6.js index fbb3a10aab7..211713c6e14 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration7.js +++ b/tests/baselines/reference/MemberFunctionDeclaration7_es6.js @@ -1,9 +1,9 @@ -//// [MemberFunctionDeclaration7.ts] +//// [MemberFunctionDeclaration7_es6.ts] class C { *foo() { } } -//// [MemberFunctionDeclaration7.js] +//// [MemberFunctionDeclaration7_es6.js] var C = (function () { function C() { } diff --git a/tests/baselines/reference/MemberFunctionDeclaration7_es6.types b/tests/baselines/reference/MemberFunctionDeclaration7_es6.types new file mode 100644 index 00000000000..e4c864b9422 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration7_es6.types @@ -0,0 +1,8 @@ +=== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration7_es6.ts === +class C { +>C : C + + *foo() { } +>foo : () => void +>T : T +} diff --git a/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt deleted file mode 100644 index 32f67c71ead..00000000000 --- a/tests/baselines/reference/MemberFunctionDeclaration8.errors.txt +++ /dev/null @@ -1,34 +0,0 @@ -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,12): error TS1127: Invalid character. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,14): error TS1129: Statement expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,19): error TS1005: '(' expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(5,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(6,3): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(7,1): error TS1128: Declaration or statement expected. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,9): error TS2304: Cannot find name 'a'. -tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts(4,16): error TS2391: Function implementation is missing or not immediately following the declaration. - - -==== tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts (8 errors) ==== - class C { - foo() { - // Make sure we don't think of *bar as the start of a generator method. - if (a) # * bar; - -!!! error TS1127: Invalid character. - ~ -!!! error TS1129: Statement expected. - ~ -!!! error TS1005: '(' expected. - ~ -!!! error TS2304: Cannot find name 'a'. - ~~~ -!!! error TS2391: Function implementation is missing or not immediately following the declaration. - return bar; - ~~~~~~ -!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. - } - ~ -!!! error TS1128: Declaration or statement expected. - } - ~ -!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt new file mode 100644 index 00000000000..1b216b72c89 --- /dev/null +++ b/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt @@ -0,0 +1,34 @@ +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(4,12): error TS1127: Invalid character. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(4,14): error TS1129: Statement expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(4,19): error TS1005: '(' expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(5,5): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(6,3): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(7,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(4,9): error TS2304: Cannot find name 'a'. +tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts(4,16): error TS2391: Function implementation is missing or not immediately following the declaration. + + +==== tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts (8 errors) ==== + class C { + foo() { + // Make sure we don't think of *bar as the start of a generator method. + if (a) # * bar; + +!!! error TS1127: Invalid character. + ~ +!!! error TS1129: Statement expected. + ~ +!!! error TS1005: '(' expected. + ~ +!!! error TS2304: Cannot find name 'a'. + ~~~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + return bar; + ~~~~~~ +!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. + } + ~ +!!! error TS1128: Declaration or statement expected. + } + ~ +!!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression1.errors.txt b/tests/baselines/reference/YieldExpression1.errors.txt deleted file mode 100644 index ac9bdd04aba..00000000000 --- a/tests/baselines/reference/YieldExpression1.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts(1,1): error TS2304: Cannot find name 'yield'. - - -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts (1 errors) ==== - yield; - ~~~~~ -!!! error TS2304: Cannot find name 'yield'. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression1.js b/tests/baselines/reference/YieldExpression1.js deleted file mode 100644 index 84f01f084a6..00000000000 --- a/tests/baselines/reference/YieldExpression1.js +++ /dev/null @@ -1,5 +0,0 @@ -//// [YieldExpression1.ts] -yield; - -//// [YieldExpression1.js] -yield; diff --git a/tests/baselines/reference/YieldExpression10.js b/tests/baselines/reference/YieldExpression10_es6.js similarity index 54% rename from tests/baselines/reference/YieldExpression10.js rename to tests/baselines/reference/YieldExpression10_es6.js index 8d6a1bcfd74..f111e6e1bdf 100644 --- a/tests/baselines/reference/YieldExpression10.js +++ b/tests/baselines/reference/YieldExpression10_es6.js @@ -1,11 +1,11 @@ -//// [YieldExpression10.ts] +//// [YieldExpression10_es6.ts] var v = { * foo() { yield(foo); } } -//// [YieldExpression10.js] +//// [YieldExpression10_es6.js] var v = { foo: function () { ; } }; diff --git a/tests/baselines/reference/YieldExpression10.types b/tests/baselines/reference/YieldExpression10_es6.types similarity index 90% rename from tests/baselines/reference/YieldExpression10.types rename to tests/baselines/reference/YieldExpression10_es6.types index 1cc2cebafc1..e0d3f84c6c8 100644 --- a/tests/baselines/reference/YieldExpression10.types +++ b/tests/baselines/reference/YieldExpression10_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts === var v = { * foo() { >v : { foo: () => void; } >{ * foo() { yield(foo); }} : { foo: () => void; } diff --git a/tests/baselines/reference/YieldExpression11.js b/tests/baselines/reference/YieldExpression11_es6.js similarity index 68% rename from tests/baselines/reference/YieldExpression11.js rename to tests/baselines/reference/YieldExpression11_es6.js index e69d9b6c064..306cef3051e 100644 --- a/tests/baselines/reference/YieldExpression11.js +++ b/tests/baselines/reference/YieldExpression11_es6.js @@ -1,11 +1,11 @@ -//// [YieldExpression11.ts] +//// [YieldExpression11_es6.ts] class C { *foo() { yield(foo); } } -//// [YieldExpression11.js] +//// [YieldExpression11_es6.js] var C = (function () { function C() { } diff --git a/tests/baselines/reference/YieldExpression11.types b/tests/baselines/reference/YieldExpression11_es6.types similarity index 84% rename from tests/baselines/reference/YieldExpression11.types rename to tests/baselines/reference/YieldExpression11_es6.types index da261ed041f..cdb70b3af0d 100644 --- a/tests/baselines/reference/YieldExpression11.types +++ b/tests/baselines/reference/YieldExpression11_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts === class C { >C : C diff --git a/tests/baselines/reference/YieldExpression12.errors.txt b/tests/baselines/reference/YieldExpression12_es6.errors.txt similarity index 54% rename from tests/baselines/reference/YieldExpression12.errors.txt rename to tests/baselines/reference/YieldExpression12_es6.errors.txt index 47f3edc220d..10843421a3f 100644 --- a/tests/baselines/reference/YieldExpression12.errors.txt +++ b/tests/baselines/reference/YieldExpression12_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. +tests/cases/conformance/es6/yieldExpressions/YieldExpression12_es6.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression12_es6.ts (1 errors) ==== class C { constructor() { yield foo diff --git a/tests/baselines/reference/YieldExpression13.js b/tests/baselines/reference/YieldExpression13.js deleted file mode 100644 index f3f36cfecd3..00000000000 --- a/tests/baselines/reference/YieldExpression13.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [YieldExpression13.ts] -function* foo() { yield } - -//// [YieldExpression13.js] -function foo() { - ; -} diff --git a/tests/baselines/reference/YieldExpression13_es6.js b/tests/baselines/reference/YieldExpression13_es6.js new file mode 100644 index 00000000000..328fc80dbdd --- /dev/null +++ b/tests/baselines/reference/YieldExpression13_es6.js @@ -0,0 +1,7 @@ +//// [YieldExpression13_es6.ts] +function* foo() { yield } + +//// [YieldExpression13_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression13.types b/tests/baselines/reference/YieldExpression13_es6.types similarity index 85% rename from tests/baselines/reference/YieldExpression13.types rename to tests/baselines/reference/YieldExpression13_es6.types index 0d1cb06ba51..23a9fe6299a 100644 --- a/tests/baselines/reference/YieldExpression13.types +++ b/tests/baselines/reference/YieldExpression13_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression13_es6.ts === function* foo() { yield } >foo : () => void diff --git a/tests/baselines/reference/YieldExpression14.errors.txt b/tests/baselines/reference/YieldExpression14_es6.errors.txt similarity index 53% rename from tests/baselines/reference/YieldExpression14.errors.txt rename to tests/baselines/reference/YieldExpression14_es6.errors.txt index 89d0cf477cf..baeaf3ba30e 100644 --- a/tests/baselines/reference/YieldExpression14.errors.txt +++ b/tests/baselines/reference/YieldExpression14_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. +tests/cases/conformance/es6/yieldExpressions/YieldExpression14_es6.ts(3,6): error TS1163: 'yield' expression must be contained_within a generator declaration. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression14_es6.ts (1 errors) ==== class C { foo() { yield foo diff --git a/tests/baselines/reference/YieldExpression15.errors.txt b/tests/baselines/reference/YieldExpression15_es6.errors.txt similarity index 52% rename from tests/baselines/reference/YieldExpression15.errors.txt rename to tests/baselines/reference/YieldExpression15_es6.errors.txt index 3f90fce5993..5e548799f5d 100644 --- a/tests/baselines/reference/YieldExpression15.errors.txt +++ b/tests/baselines/reference/YieldExpression15_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts(2,6): error TS1163: 'yield' expression must be contained_within a generator declaration. +tests/cases/conformance/es6/yieldExpressions/YieldExpression15_es6.ts(2,6): error TS1163: 'yield' expression must be contained_within a generator declaration. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression15_es6.ts (1 errors) ==== var v = () => { yield foo ~~~~~ diff --git a/tests/baselines/reference/YieldExpression16.errors.txt b/tests/baselines/reference/YieldExpression16_es6.errors.txt similarity index 55% rename from tests/baselines/reference/YieldExpression16.errors.txt rename to tests/baselines/reference/YieldExpression16_es6.errors.txt index 8fb1775222d..e5a9b93eece 100644 --- a/tests/baselines/reference/YieldExpression16.errors.txt +++ b/tests/baselines/reference/YieldExpression16_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts(3,5): error TS1163: 'yield' expression must be contained_within a generator declaration. +tests/cases/conformance/es6/yieldExpressions/YieldExpression16_es6.ts(3,5): error TS1163: 'yield' expression must be contained_within a generator declaration. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression16_es6.ts (1 errors) ==== function* foo() { function bar() { yield foo; diff --git a/tests/baselines/reference/YieldExpression17.errors.txt b/tests/baselines/reference/YieldExpression17.errors.txt deleted file mode 100644 index 9477ff2f134..00000000000 --- a/tests/baselines/reference/YieldExpression17.errors.txt +++ /dev/null @@ -1,10 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts(1,15): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts(1,15): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. - - -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts (2 errors) ==== - var v = { get foo() { yield foo; } } - ~~~ -!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ -!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression17_es6.errors.txt b/tests/baselines/reference/YieldExpression17_es6.errors.txt new file mode 100644 index 00000000000..38969a9c6fb --- /dev/null +++ b/tests/baselines/reference/YieldExpression17_es6.errors.txt @@ -0,0 +1,10 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression17_es6.ts(1,15): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression17_es6.ts(1,15): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression17_es6.ts (2 errors) ==== + var v = { get foo() { yield foo; } } + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ +!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression18.errors.txt b/tests/baselines/reference/YieldExpression18_es6.errors.txt similarity index 50% rename from tests/baselines/reference/YieldExpression18.errors.txt rename to tests/baselines/reference/YieldExpression18_es6.errors.txt index 2707e5780b0..3a67acdebcd 100644 --- a/tests/baselines/reference/YieldExpression18.errors.txt +++ b/tests/baselines/reference/YieldExpression18_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts(2,1): error TS1163: 'yield' expression must be contained_within a generator declaration. +tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts(2,1): error TS1163: 'yield' expression must be contained_within a generator declaration. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts (1 errors) ==== "use strict"; yield(foo); ~~~~~ diff --git a/tests/baselines/reference/YieldExpression19.js b/tests/baselines/reference/YieldExpression19_es6.js similarity index 71% rename from tests/baselines/reference/YieldExpression19.js rename to tests/baselines/reference/YieldExpression19_es6.js index 39b9cda44f9..91643e09b0e 100644 --- a/tests/baselines/reference/YieldExpression19.js +++ b/tests/baselines/reference/YieldExpression19_es6.js @@ -1,4 +1,4 @@ -//// [YieldExpression19.ts] +//// [YieldExpression19_es6.ts] function*foo() { function bar() { function* quux() { @@ -7,7 +7,7 @@ function*foo() { } } -//// [YieldExpression19.js] +//// [YieldExpression19_es6.js] function foo() { function bar() { function quux() { diff --git a/tests/baselines/reference/YieldExpression19.types b/tests/baselines/reference/YieldExpression19_es6.types similarity index 88% rename from tests/baselines/reference/YieldExpression19.types rename to tests/baselines/reference/YieldExpression19_es6.types index 315c1a541cc..a8af884c98f 100644 --- a/tests/baselines/reference/YieldExpression19.types +++ b/tests/baselines/reference/YieldExpression19_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression19_es6.ts === function*foo() { >foo : () => void diff --git a/tests/baselines/reference/YieldExpression1_es6.errors.txt b/tests/baselines/reference/YieldExpression1_es6.errors.txt new file mode 100644 index 00000000000..f8a13fe5409 --- /dev/null +++ b/tests/baselines/reference/YieldExpression1_es6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression1_es6.ts(1,1): error TS2304: Cannot find name 'yield'. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression1_es6.ts (1 errors) ==== + yield; + ~~~~~ +!!! error TS2304: Cannot find name 'yield'. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression1_es6.js b/tests/baselines/reference/YieldExpression1_es6.js new file mode 100644 index 00000000000..cb5c097df2c --- /dev/null +++ b/tests/baselines/reference/YieldExpression1_es6.js @@ -0,0 +1,5 @@ +//// [YieldExpression1_es6.ts] +yield; + +//// [YieldExpression1_es6.js] +yield; diff --git a/tests/baselines/reference/YieldExpression2.errors.txt b/tests/baselines/reference/YieldExpression2.errors.txt deleted file mode 100644 index 4b4e549d7bf..00000000000 --- a/tests/baselines/reference/YieldExpression2.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts(1,1): error TS1163: 'yield' expression must be contained_within a generator declaration. - - -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts (1 errors) ==== - yield foo; - ~~~~~ -!!! error TS1163: 'yield' expression must be contained_within a generator declaration. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression2_es6.errors.txt b/tests/baselines/reference/YieldExpression2_es6.errors.txt new file mode 100644 index 00000000000..553dab51fc2 --- /dev/null +++ b/tests/baselines/reference/YieldExpression2_es6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/conformance/es6/yieldExpressions/YieldExpression2_es6.ts(1,1): error TS1163: 'yield' expression must be contained_within a generator declaration. + + +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression2_es6.ts (1 errors) ==== + yield foo; + ~~~~~ +!!! error TS1163: 'yield' expression must be contained_within a generator declaration. \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression3.js b/tests/baselines/reference/YieldExpression3.js deleted file mode 100644 index 39a1c419e9b..00000000000 --- a/tests/baselines/reference/YieldExpression3.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [YieldExpression3.ts] -function* foo() { - yield - yield -} - -//// [YieldExpression3.js] -function foo() { - ; - ; -} diff --git a/tests/baselines/reference/YieldExpression3_es6.js b/tests/baselines/reference/YieldExpression3_es6.js new file mode 100644 index 00000000000..cc3716587ea --- /dev/null +++ b/tests/baselines/reference/YieldExpression3_es6.js @@ -0,0 +1,11 @@ +//// [YieldExpression3_es6.ts] +function* foo() { + yield + yield +} + +//// [YieldExpression3_es6.js] +function foo() { + ; + ; +} diff --git a/tests/baselines/reference/YieldExpression3.types b/tests/baselines/reference/YieldExpression3_es6.types similarity index 85% rename from tests/baselines/reference/YieldExpression3.types rename to tests/baselines/reference/YieldExpression3_es6.types index 702584b44f8..f9ad4faffdb 100644 --- a/tests/baselines/reference/YieldExpression3.types +++ b/tests/baselines/reference/YieldExpression3_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression3_es6.ts === function* foo() { >foo : () => void diff --git a/tests/baselines/reference/YieldExpression4.js b/tests/baselines/reference/YieldExpression4_es6.js similarity index 50% rename from tests/baselines/reference/YieldExpression4.js rename to tests/baselines/reference/YieldExpression4_es6.js index e85a41e8581..84b11a03a2c 100644 --- a/tests/baselines/reference/YieldExpression4.js +++ b/tests/baselines/reference/YieldExpression4_es6.js @@ -1,10 +1,10 @@ -//// [YieldExpression4.ts] +//// [YieldExpression4_es6.ts] function* foo() { yield; yield; } -//// [YieldExpression4.js] +//// [YieldExpression4_es6.js] function foo() { ; ; diff --git a/tests/baselines/reference/YieldExpression4.types b/tests/baselines/reference/YieldExpression4_es6.types similarity index 85% rename from tests/baselines/reference/YieldExpression4.types rename to tests/baselines/reference/YieldExpression4_es6.types index cd57f45ba73..083d145d06f 100644 --- a/tests/baselines/reference/YieldExpression4.types +++ b/tests/baselines/reference/YieldExpression4_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression4_es6.ts === function* foo() { >foo : () => void diff --git a/tests/baselines/reference/YieldExpression5.errors.txt b/tests/baselines/reference/YieldExpression5_es6.errors.txt similarity index 51% rename from tests/baselines/reference/YieldExpression5.errors.txt rename to tests/baselines/reference/YieldExpression5_es6.errors.txt index 80363043874..3ce8f20c985 100644 --- a/tests/baselines/reference/YieldExpression5.errors.txt +++ b/tests/baselines/reference/YieldExpression5_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts(3,1): error TS1109: Expression expected. +tests/cases/conformance/es6/yieldExpressions/YieldExpression5_es6.ts(3,1): error TS1109: Expression expected. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression5_es6.ts (1 errors) ==== function* foo() { yield* } diff --git a/tests/baselines/reference/YieldExpression6.js b/tests/baselines/reference/YieldExpression6.js deleted file mode 100644 index 27fda405cd7..00000000000 --- a/tests/baselines/reference/YieldExpression6.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [YieldExpression6.ts] -function* foo() { - yield*foo -} - -//// [YieldExpression6.js] -function foo() { - ; -} diff --git a/tests/baselines/reference/YieldExpression6_es6.js b/tests/baselines/reference/YieldExpression6_es6.js new file mode 100644 index 00000000000..5024e9bbd40 --- /dev/null +++ b/tests/baselines/reference/YieldExpression6_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression6_es6.ts] +function* foo() { + yield*foo +} + +//// [YieldExpression6_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression6.types b/tests/baselines/reference/YieldExpression6_es6.types similarity index 85% rename from tests/baselines/reference/YieldExpression6.types rename to tests/baselines/reference/YieldExpression6_es6.types index 6df16df5271..fd410d2c959 100644 --- a/tests/baselines/reference/YieldExpression6.types +++ b/tests/baselines/reference/YieldExpression6_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts === function* foo() { >foo : () => void diff --git a/tests/baselines/reference/YieldExpression7.js b/tests/baselines/reference/YieldExpression7.js deleted file mode 100644 index 152fe36db50..00000000000 --- a/tests/baselines/reference/YieldExpression7.js +++ /dev/null @@ -1,9 +0,0 @@ -//// [YieldExpression7.ts] -function* foo() { - yield foo -} - -//// [YieldExpression7.js] -function foo() { - ; -} diff --git a/tests/baselines/reference/YieldExpression7_es6.js b/tests/baselines/reference/YieldExpression7_es6.js new file mode 100644 index 00000000000..96ef5af107e --- /dev/null +++ b/tests/baselines/reference/YieldExpression7_es6.js @@ -0,0 +1,9 @@ +//// [YieldExpression7_es6.ts] +function* foo() { + yield foo +} + +//// [YieldExpression7_es6.js] +function foo() { + ; +} diff --git a/tests/baselines/reference/YieldExpression7.types b/tests/baselines/reference/YieldExpression7_es6.types similarity index 85% rename from tests/baselines/reference/YieldExpression7.types rename to tests/baselines/reference/YieldExpression7_es6.types index 40d4506c86e..17e1a3b2bfb 100644 --- a/tests/baselines/reference/YieldExpression7.types +++ b/tests/baselines/reference/YieldExpression7_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression7_es6.ts === function* foo() { >foo : () => void diff --git a/tests/baselines/reference/YieldExpression8.errors.txt b/tests/baselines/reference/YieldExpression8_es6.errors.txt similarity index 54% rename from tests/baselines/reference/YieldExpression8.errors.txt rename to tests/baselines/reference/YieldExpression8_es6.errors.txt index ee0e5789313..f4dd30b1a19 100644 --- a/tests/baselines/reference/YieldExpression8.errors.txt +++ b/tests/baselines/reference/YieldExpression8_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts(1,1): error TS2304: Cannot find name 'yield'. +tests/cases/conformance/es6/yieldExpressions/YieldExpression8_es6.ts(1,1): error TS2304: Cannot find name 'yield'. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression8_es6.ts (1 errors) ==== yield(foo); ~~~~~ !!! error TS2304: Cannot find name 'yield'. diff --git a/tests/baselines/reference/YieldExpression8.js b/tests/baselines/reference/YieldExpression8_es6.js similarity index 54% rename from tests/baselines/reference/YieldExpression8.js rename to tests/baselines/reference/YieldExpression8_es6.js index 07b80cf3e51..190c2cc3da5 100644 --- a/tests/baselines/reference/YieldExpression8.js +++ b/tests/baselines/reference/YieldExpression8_es6.js @@ -1,10 +1,10 @@ -//// [YieldExpression8.ts] +//// [YieldExpression8_es6.ts] yield(foo); function* foo() { yield(foo); } -//// [YieldExpression8.js] +//// [YieldExpression8_es6.js] yield(foo); function foo() { ; diff --git a/tests/baselines/reference/YieldExpression9.js b/tests/baselines/reference/YieldExpression9_es6.js similarity index 50% rename from tests/baselines/reference/YieldExpression9.js rename to tests/baselines/reference/YieldExpression9_es6.js index 72365abcd70..978e0d455bd 100644 --- a/tests/baselines/reference/YieldExpression9.js +++ b/tests/baselines/reference/YieldExpression9_es6.js @@ -1,9 +1,9 @@ -//// [YieldExpression9.ts] +//// [YieldExpression9_es6.ts] var v = function*() { yield(foo); } -//// [YieldExpression9.js] +//// [YieldExpression9_es6.js] var v = function () { ; }; diff --git a/tests/baselines/reference/YieldExpression9.types b/tests/baselines/reference/YieldExpression9_es6.types similarity index 88% rename from tests/baselines/reference/YieldExpression9.types rename to tests/baselines/reference/YieldExpression9_es6.types index 4c5242369c0..a570d2f09a0 100644 --- a/tests/baselines/reference/YieldExpression9.types +++ b/tests/baselines/reference/YieldExpression9_es6.types @@ -1,4 +1,4 @@ -=== tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts === +=== tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts === var v = function*() { >v : () => void >function*() { yield(foo);} : () => void diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName10_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName11_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName12_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName13_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName14_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName15_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName16_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName17_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName18_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName19_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName1_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName2_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName3_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName4_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName5_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName6_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName7_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName8_es6.ts diff --git a/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts b/tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9_es6.ts similarity index 100% rename from tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9.ts rename to tests/cases/conformance/es6/computedPropertyNames/ComputedPropertyName9_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration10_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration12_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration2_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration3_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration4_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration5_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration8_es6.ts diff --git a/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts b/tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9.ts rename to tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts diff --git a/tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts b/tests/cases/conformance/es6/functionExpressions/FunctionExpression1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionExpressions/FunctionExpression1.ts rename to tests/cases/conformance/es6/functionExpressions/FunctionExpression1_es6.ts diff --git a/tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts b/tests/cases/conformance/es6/functionExpressions/FunctionExpression2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionExpressions/FunctionExpression2.ts rename to tests/cases/conformance/es6/functionExpressions/FunctionExpression2_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts diff --git a/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts b/tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts similarity index 100% rename from tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6.ts rename to tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration1.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration1_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration2.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration2_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration3.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration3_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration4_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration4.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration4_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration5_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration5.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration5_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration6.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration6_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration7_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration7.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration7_es6.ts diff --git a/tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts b/tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts similarity index 100% rename from tests/cases/conformance/es6/fmmberFunctionDeclarations/MemberFunctionDeclaration8.ts rename to tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration8_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression10.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression11.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression12_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression12.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression12_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression13_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression13.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression13_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression14_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression14.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression14_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression15_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression15.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression15_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression16_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression16.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression16_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression17_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression17.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression17_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression18.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression18_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression19_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression19.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression19_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression1_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression1.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression1_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression2_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression2.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression2_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression3_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression3.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression3_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression4_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression4.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression4_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression5_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression5.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression5_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression6.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression7_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression7.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression7_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression8_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression8.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression8_es6.ts diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts similarity index 100% rename from tests/cases/conformance/es6/yieldExpressions/YieldExpression9.ts rename to tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts From d2aa68822679607b2fd9adea3b73726a847ca6ff Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:19:50 -0800 Subject: [PATCH 167/178] Don't store both boolean context flags and a unified flags value. --- src/compiler/parser.ts | 87 +++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 88f4a9b4adb..231120021e9 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -895,42 +895,35 @@ module ts { // // Getting this all correct is tricky and requires careful reading of the grammar to // understand when these values should be changed versus when they should be inherited. - var strictModeContext = false; - var disallowInContext = false; - var yieldContext: boolean = false; - var generatorParameterContext: boolean = false; - var contextFlags: number = 0; + var contextFlags: ParserContextFlags = 0; - function updateContextFlags() { - contextFlags = - (strictModeContext ? ParserContextFlags.ParsedInStrictModeContext : 0) | - (disallowInContext ? ParserContextFlags.ParsedInDisallowInContext : 0) | - (yieldContext ? ParserContextFlags.ParsedInYieldContext : 0) | - (generatorParameterContext ? ParserContextFlags.ParsedInGeneratorParameterContext : 0); + function setContextFlag(val: Boolean, flag: ParserContextFlags) { + if (val) { + contextFlags |= flag; + } + else { + contextFlags &= ~flag; + } } function setStrictModeContext(val: boolean) { - strictModeContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.ParsedInStrictModeContext); } function setDisallowInContext(val: boolean) { - disallowInContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.ParsedInDisallowInContext); } function setYieldContext(val: boolean) { - yieldContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.ParsedInYieldContext); } function setGeneratorParameterContext(val: boolean) { - generatorParameterContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.ParsedInGeneratorParameterContext); } function allowInAnd(func: () => T): T { - if (disallowInContext) { + if (contextFlags & ParserContextFlags.ParsedInDisallowInContext) { setDisallowInContext(false); var result = func(); setDisallowInContext(true); @@ -942,7 +935,7 @@ module ts { } function disallowInAnd(func: () => T): T { - if (disallowInContext) { + if (contextFlags & ParserContextFlags.ParsedInDisallowInContext) { // no need to do anything special if 'in' is already disallowed. return func(); } @@ -954,7 +947,7 @@ module ts { } function enterYieldContextAnd(func: () => T): T { - if (yieldContext) { + if (contextFlags & ParserContextFlags.ParsedInYieldContext) { // no need to do anything special if we're already in the [Yield] context. return func(); } @@ -966,7 +959,7 @@ module ts { } function exitYieldContextAnd(func: () => T): T { - if (yieldContext) { + if (contextFlags & ParserContextFlags.ParsedInYieldContext) { setYieldContext(false); var result = func(); setYieldContext(true); @@ -977,6 +970,22 @@ module ts { return func(); } + function inYieldContext() { + return (contextFlags & ParserContextFlags.ParsedInYieldContext) !== 0; + } + + function inStrictModeContext() { + return (contextFlags & ParserContextFlags.ParsedInStrictModeContext) !== 0; + } + + function inGeneratorParameterContext() { + return (contextFlags & ParserContextFlags.ParsedInGeneratorParameterContext) !== 0; + } + + function inDisallowInContext() { + return (contextFlags & ParserContextFlags.ParsedInDisallowInContext) !== 0; + } + function getLineStarts(): number[] { return lineStarts || (lineStarts = computeLineStarts(sourceText)); } @@ -1108,11 +1117,11 @@ module ts { // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is // considered a keyword and is not an identifier. - if (token === SyntaxKind.YieldKeyword && yieldContext) { + if (token === SyntaxKind.YieldKeyword && inYieldContext()) { return false; } - return strictModeContext ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord; + return inStrictModeContext() ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord; } function parseExpected(t: SyntaxKind): boolean { @@ -1358,13 +1367,13 @@ module ts { parsingContext |= 1 << kind; var result = >[]; result.pos = getNodePos(); - var savedStrictModeContext = strictModeContext; + var savedStrictModeContext = inStrictModeContext(); while (!isListTerminator(kind)) { if (isListElement(kind, /* inErrorRecovery */ false)) { var element = parseElement(); result.push(element); // test elements only if we are not already in strict mode - if (!strictModeContext && checkForStrictMode) { + if (!inStrictModeContext() && checkForStrictMode) { if (isPrologueDirective(element)) { if (isUseStrictPrologueDirective(element)) { setStrictModeContext(true); @@ -1629,7 +1638,7 @@ module ts { // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt - node.name = generatorParameterContext + node.name = inGeneratorParameterContext() ? enterYieldContextAnd(parseIdentifier) : parseIdentifier(); @@ -1649,7 +1658,7 @@ module ts { node.flags |= NodeFlags.QuestionMark; } node.type = parseParameterType(); - node.initializer = generatorParameterContext + node.initializer = inGeneratorParameterContext() ? exitYieldContextAnd(parseParameterInitializer) : parseParameterInitializer(); @@ -1714,8 +1723,8 @@ module ts { // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt if (parseExpected(SyntaxKind.OpenParenToken)) { - var savedYieldContext = yieldContext; - var savedGeneratorParameterContext = generatorParameterContext; + var savedYieldContext = inYieldContext(); + var savedGeneratorParameterContext = inGeneratorParameterContext(); setYieldContext(_yieldContext); setGeneratorParameterContext(_generatorParameterContext); @@ -1969,8 +1978,8 @@ module ts { function parseType(): TypeNode { // The rules about 'yield' only apply to actual code/expression contexts. They don't // apply to 'type' contexts. So we disable these parameters here before moving on. - var savedYieldContext = yieldContext; - var savedGeneratorParameterContext = generatorParameterContext; + var savedYieldContext = inYieldContext(); + var savedGeneratorParameterContext = inGeneratorParameterContext(); setYieldContext(false); setGeneratorParameterContext(false); @@ -2132,11 +2141,11 @@ module ts { if (token === SyntaxKind.YieldKeyword) { // If we have a 'yield' keyword, and htis is a context where yield expressions are // allowed, then definitely parse out a yield expression. - if (yieldContext) { + if (inYieldContext()) { return true; } - if (strictModeContext) { + if (inStrictModeContext()) { // If we're in strict mode, then 'yield' is a keyword, could only ever start // a yield expression. return true; @@ -2390,7 +2399,7 @@ module ts { while (true) { reScanGreaterToken(); var precedence = getOperatorPrecedence(); - if (precedence && precedence > minPrecedence && (!disallowInContext || token !== SyntaxKind.InKeyword)) { + if (precedence && precedence > minPrecedence && (!inDisallowInContext() || token !== SyntaxKind.InKeyword)) { var operator = token; nextToken(); expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence)); @@ -2824,7 +2833,7 @@ module ts { } function parseFunctionBlock(allowYield: boolean, ignoreMissingOpenBrace: boolean): Block { - var savedYieldContext = yieldContext; + var savedYieldContext = inYieldContext(); setYieldContext(allowYield); var block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true); @@ -3430,7 +3439,7 @@ module ts { // [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt } // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } - node.baseType = generatorParameterContext + node.baseType = inGeneratorParameterContext() ? exitYieldContextAnd(parseClassBaseType) : parseClassBaseType(); @@ -3442,7 +3451,7 @@ module ts { // [~GeneratorParameter]ClassHeritage[?Yield]opt { ClassBody[?Yield]opt } // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } - node.members = generatorParameterContext + node.members = inGeneratorParameterContext() ? exitYieldContextAnd(parseClassMembers) : parseClassMembers(); parseExpected(SyntaxKind.CloseBraceToken); From 1bf3ba85a266384e3bdad8e4fe8d332dcbf090e9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:23:03 -0800 Subject: [PATCH 168/178] Initialize enum in a way that makes it clearer that it is a Flags-enum. --- src/compiler/types.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 68d74385c03..ea0c8956ce8 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -281,10 +281,10 @@ module ts { export const enum ParserContextFlags { // Set if this node was parsed in strict mode. Used for grammar error checks, as well as // checking if the node can be reused in incremental settings. - ParsedInStrictModeContext = 0x1, - ParsedInDisallowInContext = 0x2, - ParsedInYieldContext = 0x4, - ParsedInGeneratorParameterContext = 0x8, + ParsedInStrictModeContext = 1 << 0, + ParsedInDisallowInContext = 1 << 1, + ParsedInYieldContext = 1 << 2, + ParsedInGeneratorParameterContext = 1 << 3, } export interface Node extends TextRange { From 530917179892bb0dfd34af6f55d4a32c97cc42eb Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:27:32 -0800 Subject: [PATCH 169/178] Rename methods as per CR feedback. --- src/compiler/parser.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 231120021e9..9da5d5cb111 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -946,7 +946,7 @@ module ts { return result; } - function enterYieldContextAnd(func: () => T): T { + function doInYieldContext(func: () => T): T { if (contextFlags & ParserContextFlags.ParsedInYieldContext) { // no need to do anything special if we're already in the [Yield] context. return func(); @@ -958,7 +958,7 @@ module ts { return result; } - function exitYieldContextAnd(func: () => T): T { + function doOutsideOfYieldContext(func: () => T): T { if (contextFlags & ParserContextFlags.ParsedInYieldContext) { setYieldContext(false); var result = func(); @@ -1639,7 +1639,7 @@ module ts { // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt node.name = inGeneratorParameterContext() - ? enterYieldContextAnd(parseIdentifier) + ? doInYieldContext(parseIdentifier) : parseIdentifier(); if (node.name.kind === SyntaxKind.Missing && node.flags === 0 && isModifier(token)) { @@ -1659,7 +1659,7 @@ module ts { } node.type = parseParameterType(); node.initializer = inGeneratorParameterContext() - ? exitYieldContextAnd(parseParameterInitializer) + ? doOutsideOfYieldContext(parseParameterInitializer) : parseParameterInitializer(); // Do not check for initializers in an ambient context for parameters. This is not @@ -2787,7 +2787,7 @@ module ts { var pos = getNodePos(); parseExpected(SyntaxKind.FunctionKeyword); var isGenerator = parseOptional(SyntaxKind.AsteriskToken); - var name = isGenerator ? enterYieldContextAnd(parseOptionalIdentifier) : parseOptionalIdentifier(); + var name = isGenerator ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier(); var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); var body = parseFunctionBlock(/*allowYield:*/ isGenerator, /* ignoreMissingOpenBrace */ false); @@ -3440,7 +3440,7 @@ module ts { // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } node.baseType = inGeneratorParameterContext() - ? exitYieldContextAnd(parseClassBaseType) + ? doOutsideOfYieldContext(parseClassBaseType) : parseClassBaseType(); if (parseOptional(SyntaxKind.ImplementsKeyword)) { @@ -3452,7 +3452,7 @@ module ts { // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } node.members = inGeneratorParameterContext() - ? exitYieldContextAnd(parseClassMembers) + ? doOutsideOfYieldContext(parseClassMembers) : parseClassMembers(); parseExpected(SyntaxKind.CloseBraceToken); } From ed2cd997bc8e88210469bdd317e335802132d3c6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:30:41 -0800 Subject: [PATCH 170/178] An asterisk is not a legal start of an enum member. --- src/compiler/parser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9da5d5cb111..fbf98071ff8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1262,6 +1262,7 @@ module ts { case ParsingContext.ClassMembers: return lookAhead(isClassMemberStart); case ParsingContext.EnumMembers: + return isPropertyName(); case ParsingContext.ObjectLiteralMembers: return token === SyntaxKind.AsteriskToken || isPropertyName(); case ParsingContext.BaseTypeReferences: From dac0a910f7d2d87d95109978b4f228137b5cdd0a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:35:18 -0800 Subject: [PATCH 171/178] Don't use underscores in names. --- src/compiler/parser.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index fbf98071ff8..b4d322537d0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1708,7 +1708,7 @@ module ts { // Because we use this for index signatures as well, we sometimes use // parentheses, and sometimes use brackets. - function parseParameterList(_yieldContext: boolean, _generatorParameterContext: boolean) { + function parseParameterList(yieldContext: boolean, generatorParameterContext: boolean) { // FormalParameters[Yield,GeneratorParameter] : // ... // @@ -1727,8 +1727,8 @@ module ts { var savedYieldContext = inYieldContext(); var savedGeneratorParameterContext = inGeneratorParameterContext(); - setYieldContext(_yieldContext); - setGeneratorParameterContext(_generatorParameterContext); + setYieldContext(yieldContext); + setGeneratorParameterContext(generatorParameterContext); var result = parseDelimitedList(ParsingContext.Parameters, parseParameter); parseExpected(SyntaxKind.CloseParenToken); From bdaccf6f81f5db53dcb7be34749979afcc48c974 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:39:15 -0800 Subject: [PATCH 172/178] Rename parser context flags. --- src/compiler/parser.ts | 46 +++++++++++++++++++++--------------------- src/compiler/types.ts | 8 ++++---- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b4d322537d0..15e7692e019 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -907,23 +907,23 @@ module ts { } function setStrictModeContext(val: boolean) { - setContextFlag(val, ParserContextFlags.ParsedInStrictModeContext); + setContextFlag(val, ParserContextFlags.StrictMode); } function setDisallowInContext(val: boolean) { - setContextFlag(val, ParserContextFlags.ParsedInDisallowInContext); + setContextFlag(val, ParserContextFlags.DisallowIn); } function setYieldContext(val: boolean) { - setContextFlag(val, ParserContextFlags.ParsedInYieldContext); + setContextFlag(val, ParserContextFlags.Yield); } function setGeneratorParameterContext(val: boolean) { - setContextFlag(val, ParserContextFlags.ParsedInGeneratorParameterContext); + setContextFlag(val, ParserContextFlags.GeneratorParameter); } function allowInAnd(func: () => T): T { - if (contextFlags & ParserContextFlags.ParsedInDisallowInContext) { + if (contextFlags & ParserContextFlags.DisallowIn) { setDisallowInContext(false); var result = func(); setDisallowInContext(true); @@ -935,7 +935,7 @@ module ts { } function disallowInAnd(func: () => T): T { - if (contextFlags & ParserContextFlags.ParsedInDisallowInContext) { + if (contextFlags & ParserContextFlags.DisallowIn) { // no need to do anything special if 'in' is already disallowed. return func(); } @@ -947,7 +947,7 @@ module ts { } function doInYieldContext(func: () => T): T { - if (contextFlags & ParserContextFlags.ParsedInYieldContext) { + if (contextFlags & ParserContextFlags.Yield) { // no need to do anything special if we're already in the [Yield] context. return func(); } @@ -959,7 +959,7 @@ module ts { } function doOutsideOfYieldContext(func: () => T): T { - if (contextFlags & ParserContextFlags.ParsedInYieldContext) { + if (contextFlags & ParserContextFlags.Yield) { setYieldContext(false); var result = func(); setYieldContext(true); @@ -971,19 +971,19 @@ module ts { } function inYieldContext() { - return (contextFlags & ParserContextFlags.ParsedInYieldContext) !== 0; + return (contextFlags & ParserContextFlags.Yield) !== 0; } function inStrictModeContext() { - return (contextFlags & ParserContextFlags.ParsedInStrictModeContext) !== 0; + return (contextFlags & ParserContextFlags.StrictMode) !== 0; } function inGeneratorParameterContext() { - return (contextFlags & ParserContextFlags.ParsedInGeneratorParameterContext) !== 0; + return (contextFlags & ParserContextFlags.GeneratorParameter) !== 0; } function inDisallowInContext() { - return (contextFlags & ParserContextFlags.ParsedInDisallowInContext) !== 0; + return (contextFlags & ParserContextFlags.DisallowIn) !== 0; } function getLineStarts(): number[] { @@ -4006,7 +4006,7 @@ module ts { } function checkBinaryExpression(node: BinaryExpression) { - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.StrictMode) { if (isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operator)) { if (isEvalOrArgumentsIdentifier(node.left)) { // ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an @@ -4158,7 +4158,7 @@ module ts { var colonStart = skipTrivia(sourceText, node.variable.end); return grammarErrorAtPos(colonStart, ":".length, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); } - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.variable)) { + if (node.parserContextFlags & ParserContextFlags.StrictMode && isEvalOrArgumentsIdentifier(node.variable)) { // It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the // Catch production is eval or arguments return reportInvalidUseInStrictMode(node.variable); @@ -4278,7 +4278,7 @@ module ts { } function checkFunctionName(name: Node) { - if (name && name.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(name)) { + if (name && name.parserContextFlags & ParserContextFlags.StrictMode && isEvalOrArgumentsIdentifier(name)) { // It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the // Identifier of a FunctionLikeDeclaration or FunctionExpression or as a formal parameter name(13.1) return reportInvalidUseInStrictMode(name); @@ -4399,7 +4399,7 @@ module ts { var GetAccessor = 2; var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; - var inStrictMode = (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) !== 0; + var inStrictMode = (node.parserContextFlags & ParserContextFlags.StrictMode) !== 0; for (var i = 0, n = node.properties.length; i < n; i++) { var prop = node.properties[i]; @@ -4463,7 +4463,7 @@ module ts { function checkNumericLiteral(node: LiteralExpression): boolean { if (node.flags & NodeFlags.OctalLiteral) { - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.StrictMode) { return grammarErrorOnNode(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } else if (languageVersion >= ScriptTarget.ES5) { @@ -4607,7 +4607,7 @@ module ts { // or if its FunctionBody is strict code(11.1.5). // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & ParserContextFlags.StrictMode && isEvalOrArgumentsIdentifier(node.name)) { return reportInvalidUseInStrictMode(node.name); } } @@ -4666,13 +4666,13 @@ module ts { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator. - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.operand)) { + if (node.parserContextFlags & ParserContextFlags.StrictMode && isEvalOrArgumentsIdentifier(node.operand)) { return reportInvalidUseInStrictMode(node.operand); } } function checkPrefixOperator(node: UnaryExpression) { - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.StrictMode) { // The identifier eval or arguments may not appear as the LeftHandSideExpression of an // Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression // operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator @@ -4857,7 +4857,7 @@ module ts { if (!inAmbientContext && !node.initializer && isConst(node)) { return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized); } - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext && isEvalOrArgumentsIdentifier(node.name)) { + if (node.parserContextFlags & ParserContextFlags.StrictMode && isEvalOrArgumentsIdentifier(node.name)) { // It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code // and its Identifier is eval or arguments return reportInvalidUseInStrictMode(node.name); @@ -4919,7 +4919,7 @@ module ts { } function checkWithStatement(node: WithStatement): boolean { - if (node.parserContextFlags & ParserContextFlags.ParsedInStrictModeContext) { + if (node.parserContextFlags & ParserContextFlags.StrictMode) { // Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such // a context is an return grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); @@ -4927,7 +4927,7 @@ module ts { } function checkYieldExpression(node: YieldExpression): boolean { - if (!(node.parserContextFlags & ParserContextFlags.ParsedInYieldContext)) { + if (!(node.parserContextFlags & ParserContextFlags.Yield)) { return grammarErrorOnFirstToken(node, Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration); } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ea0c8956ce8..328422d9f6e 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -281,10 +281,10 @@ module ts { export const enum ParserContextFlags { // Set if this node was parsed in strict mode. Used for grammar error checks, as well as // checking if the node can be reused in incremental settings. - ParsedInStrictModeContext = 1 << 0, - ParsedInDisallowInContext = 1 << 1, - ParsedInYieldContext = 1 << 2, - ParsedInGeneratorParameterContext = 1 << 3, + StrictMode = 1 << 0, + DisallowIn = 1 << 1, + Yield = 1 << 2, + GeneratorParameter = 1 << 3, } export interface Node extends TextRange { From 626e90ed3f342c1f268bad7d2936e3841e2f67bd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 00:45:25 -0800 Subject: [PATCH 173/178] Mark generator functions with an appropriate nodeflag. --- src/compiler/parser.ts | 23 +++++++++++++++++++---- src/compiler/types.ts | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 15e7692e019..8906bde9525 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2721,6 +2721,9 @@ module ts { if (isGenerator || token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { node = createNode(SyntaxKind.PropertyAssignment, nodePos); node.name = propertyName; + if (isGenerator) { + node.flags |= NodeFlags.Generator; + } var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); var body = parseFunctionBlock(isGenerator, /* ignoreMissingOpenBrace */ false); @@ -2792,15 +2795,19 @@ module ts { var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); var body = parseFunctionBlock(/*allowYield:*/ isGenerator, /* ignoreMissingOpenBrace */ false); - return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body); + return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body, isGenerator ? NodeFlags.Generator : undefined); } function parseOptionalIdentifier() { return isIdentifier() ? parseIdentifier() : undefined; } - function makeFunctionExpression(kind: SyntaxKind, pos: number, name: Identifier, sig: ParsedSignature, body: Node): FunctionExpression { + function makeFunctionExpression(kind: SyntaxKind, pos: number, name: Identifier, sig: ParsedSignature, body: Node, flags?: NodeFlags): FunctionExpression { var node = createNode(kind, pos); + if (flags) { + node.flags = flags; + } + node.name = name; node.typeParameters = sig.typeParameters; node.parameters = sig.parameters; @@ -3268,6 +3275,10 @@ module ts { setModifiers(node, modifiers); parseExpected(SyntaxKind.FunctionKeyword); var isGenerator = parseOptional(SyntaxKind.AsteriskToken); + if (isGenerator) { + node.flags |= NodeFlags.Generator; + } + node.name = parseIdentifier(); fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator, node); node.body = parseFunctionBlockOrSemicolon(isGenerator); @@ -3284,9 +3295,13 @@ module ts { } function parsePropertyMemberDeclaration(fullStart: number, modifiers: ModifiersArray): Declaration { - var isGenerator = parseOptional(SyntaxKind.AsteriskToken); - var name = parsePropertyName(); var flags = modifiers ? modifiers.flags : 0; + var isGenerator = parseOptional(SyntaxKind.AsteriskToken); + if (isGenerator) { + flags |= NodeFlags.Generator; + } + + var name = parsePropertyName(); if (parseOptional(SyntaxKind.QuestionToken)) { // Note: this is not legal as per the grammar. But we allow it in the parser and // report an error in the grammar checker. diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 328422d9f6e..0003317a9ce 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -270,8 +270,8 @@ module ts { DeclarationFile = 0x00000400, // Node is a .d.ts file Let = 0x00000800, // Variable declaration Const = 0x00001000, // Variable declaration - OctalLiteral = 0x00002000, + Generator = 0x00004000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, From 8bbc4090efe9627eea63506661f5126fcbc45f04 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 01:03:13 -0800 Subject: [PATCH 174/178] Simplify fidelity implementation of context flags. --- src/services/syntax/constants.ts | 31 ++++---- src/services/syntax/parser.ts | 110 ++++++++++++++------------- src/services/syntax/syntaxElement.ts | 31 +++----- 3 files changed, 81 insertions(+), 91 deletions(-) diff --git a/src/services/syntax/constants.ts b/src/services/syntax/constants.ts index 8845af18af6..87d4a6a2c77 100644 --- a/src/services/syntax/constants.ts +++ b/src/services/syntax/constants.ts @@ -1,29 +1,24 @@ /// module TypeScript { + export const enum ParserContextFlags { + StrictMode = 1 << 0, + DisallowIn = 1 << 1, + Yield = 1 << 2, + GeneratorParameter = 1 << 3, + + Mask = 0xF + } + export enum SyntaxNodeConstants { None = 0, - // Masks that we use to place information about a node into a single int. The first bit tells - // us if we've computed the data for a node. - // - // The second bit tells us if the node is incrementally reusable if it does not - // containe any skipped tokens, zero width tokens, regex tokens in it ("/", "/=" or "/.../"), - // and contains no tokens that were parser generated. - // - // The next bit lets us know if the nodes was parsed in a strict context or node. A node can - // only be used by the incremental parser if it is parsed in the same strict context as before. - // last masks off the part of the int - // + // The first four bit of the flags are used to store parser context flags. // The width of the node is stored in the remainder of the int. This allows us up to 128MB // for a node by using all 27 bits. However, in the common case, we'll use less than 27 bits // for the width. Thus, the info will be stored in a single int in chakra. - DataComputed = 0x00000001, // 0000 0000 0000 0000 0000 0000 0000 0001 - IncrementallyUnusableMask = 0x00000002, // 0000 0000 0000 0000 0000 0000 0000 0010 - ParsedInStrictModeContext = 0x00000004, // 0000 0000 0000 0000 0000 0000 0000 0100 - ParsedInDisallowInContext = 0x00000008, // 0000 0000 0000 0000 0000 0000 0000 1000 - ParsedInYieldContext = 0x00000010, // 0000 0000 0000 0000 0000 0000 0001 0000 - ParsedInGeneratorParameterContext = 0x00000020, // 0000 0000 0000 0000 0000 0000 0010 0000 - FullWidthShift = 1 << 6, // 1111 1111 1111 1111 1111 1111 1100 0000 + DataComputed = 1 << 4, // 0000 0000 0000 0000 0000 0000 0001 0000 + IncrementallyUnusableMask = 1 << 5, // 0000 0000 0000 0000 0000 0000 0010 0000 + FullWidthShift = 1 << 6, // 1111 1111 1111 1111 1111 1111 1100 0000 } } \ No newline at end of file diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 6b03a4721c1..924726649e1 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -195,11 +195,7 @@ module TypeScript.Parser { // // Getting this all correct is tricky and requires careful reading of the grammar to // understand when these values should be changed versus when they should be inherited. - var strictModeContext: boolean = false; - var disallowInContext: boolean = false; - var yieldContext: boolean = false; - var generatorParameterContext: boolean = false; - var contextFlags: number = 0; + var contextFlags: ParserContextFlags = 0; // Current state of the parser. If we need to rewind we will store and reset these values as // appropriate. @@ -223,7 +219,7 @@ module TypeScript.Parser { // Now, clear out our state so that our singleton parser doesn't keep things alive. diagnostics = []; - contextFlags = SyntaxNodeConstants.None; + contextFlags = 0; fileName = undefined; source.release(); source = undefined; @@ -284,10 +280,7 @@ module TypeScript.Parser { // are unaffected by strict mode. It's just the parser will decide what to do with it // differently depending on what mode it is in. if (node && - parsedInStrictModeContext(node) === strictModeContext && - parsedInDisallowInContext(node) === disallowInContext && - parsedInYieldContext(node) === yieldContext && - parsedInGeneratorParameterContext(node) === generatorParameterContext) { + parserContextFlags(node) === contextFlags) { return node; } @@ -421,7 +414,7 @@ module TypeScript.Parser { // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is // considered a keyword and is not an identifier. - if (tokenKind === SyntaxKind.YieldKeyword && yieldContext) { + if (tokenKind === SyntaxKind.YieldKeyword && inYieldContext()) { return false; } @@ -431,7 +424,7 @@ module TypeScript.Parser { if (tokenKind <= SyntaxKind.LastFutureReservedStrictKeyword) { // Could be a keyword or identifier. It's an identifier if we're not in strict // mode. - return !strictModeContext; + return !inStrictModeContext(); } // If it's typescript keyword, then it's actually a javascript identifier. @@ -633,39 +626,52 @@ module TypeScript.Parser { throw Errors.invalidOperation(); } - function updateContextFlags() { - contextFlags = - (strictModeContext ? SyntaxNodeConstants.ParsedInStrictModeContext : 0) | - (disallowInContext ? SyntaxNodeConstants.ParsedInDisallowInContext : 0) | - (yieldContext ? SyntaxNodeConstants.ParsedInYieldContext : 0) | - (generatorParameterContext ? SyntaxNodeConstants.ParsedInGeneratorParameterContext : 0); + function setContextFlag(val: boolean, flag: ParserContextFlags) { + if (val) { + contextFlags |= flag; + } + else { + contextFlags &= ~flag; + } } function setStrictModeContext(val: boolean) { - strictModeContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.StrictMode); } function setDisallowInContext(val: boolean) { - disallowInContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.DisallowIn); } function setYieldContext(val: boolean) { - yieldContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.Yield); } function setGeneratorParameterContext(val: boolean) { - generatorParameterContext = val; - updateContextFlags(); + setContextFlag(val, ParserContextFlags.GeneratorParameter); + } + + function inStrictModeContext() { + return (contextFlags & ParserContextFlags.StrictMode) !== 0; + } + + function inDisallowInContext() { + return (contextFlags & ParserContextFlags.DisallowIn) !== 0; + } + + function inYieldContext() { + return (contextFlags & ParserContextFlags.Yield) !== 0; + } + + function inGeneratorParameterContext() { + return (contextFlags & ParserContextFlags.GeneratorParameter) !== 0; } function parseSourceUnit(): SourceUnitSyntax { // Note: saving and restoring the 'isInStrictMode' state is not really necessary here // (as it will never be read afterwards). However, for symmetry with the rest of the // parsing code, we do the same here. - var savedIsInStrictMode = strictModeContext + var savedIsInStrictMode = inStrictModeContext() // Note: any skipped tokens produced after the end of all the module elements will be // added as skipped trivia to the start of the EOF token. @@ -692,7 +698,7 @@ module TypeScript.Parser { } function updateStrictModeState(items: any[]): void { - if (!strictModeContext) { + if (!inStrictModeContext()) { // Check if all the items are directive prologue elements. for (var i = 0, n = items.length; i < n; i++) { if (!isDirectivePrologueElement(items[i])) { @@ -972,7 +978,7 @@ module TypeScript.Parser { } function allowInAnd(func: () => T): T { - if (disallowInContext) { + if (inDisallowInContext()) { setDisallowInContext(false); var result = func(); setDisallowInContext(true); @@ -984,7 +990,7 @@ module TypeScript.Parser { } function disallowInAnd(func: () => T): T { - if (disallowInContext) { + if (inDisallowInContext()) { // no need to do anything special if 'in' is already disallowed. return func(); } @@ -996,7 +1002,7 @@ module TypeScript.Parser { } function enterYieldContextAnd(func: () => T): T { - if (yieldContext) { + if (inYieldContext()) { // no need to do anything special if we're already in the [Yield] context. return func(); } @@ -1008,7 +1014,7 @@ module TypeScript.Parser { } function exitYieldContextAnd(func: () => T): T { - if (yieldContext) { + if (inYieldContext()) { setYieldContext(false); var result = func(); setYieldContext(true); @@ -1108,7 +1114,7 @@ module TypeScript.Parser { // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } if (isHeritageClause()) { - return isClassHeritageClause && generatorParameterContext + return isClassHeritageClause && inGeneratorParameterContext() ? exitYieldContextAnd(parseHeritageClausesWorker) : parseHeritageClausesWorker(); } @@ -1143,7 +1149,7 @@ module TypeScript.Parser { // [+GeneratorParameter] ClassHeritageopt { ClassBodyopt } if (openBraceToken.fullWidth() > 0) { - return generatorParameterContext + return inGeneratorParameterContext() ? exitYieldContextAnd(parseClassElements) : parseClassElements(); } @@ -2446,11 +2452,11 @@ module TypeScript.Parser { if (_currentToken.kind === SyntaxKind.YieldKeyword) { // If we have a 'yield' keyword, and htis is a context where yield expressions are // allowed, then definitely parse out a yield expression. - if (yieldContext) { + if (inYieldContext()) { return true; } - if (strictModeContext) { + if (inStrictModeContext()) { // If we're in strict mode, then 'yield' is a keyword, could only ever start // a yield expression. return true; @@ -2583,7 +2589,7 @@ module TypeScript.Parser { } // also, if it's the 'in' operator, only allow if our caller allows it. - if (tokenKind === SyntaxKind.InKeyword && disallowInContext) { + if (tokenKind === SyntaxKind.InKeyword && inDisallowInContext()) { break; } @@ -3140,7 +3146,7 @@ module TypeScript.Parser { // // [Yield], on the other hand, is available, and is passed through. - var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yield:*/ yieldContext, /*generatorParameter:*/ false); + var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yield:*/ inYieldContext(), /*generatorParameter:*/ false); if (requireArrow && currentToken().kind !== SyntaxKind.EqualsGreaterThanToken) { return undefined; @@ -3502,7 +3508,7 @@ module TypeScript.Parser { var _currentToken = currentToken(); if (_currentToken.kind === SyntaxKind.OpenBracketToken) { - return generatorParameterContext + return inGeneratorParameterContext() ? exitYieldContextAnd(parseComputedPropertyName) : parseComputedPropertyName(); } @@ -3585,17 +3591,17 @@ module TypeScript.Parser { } function parseFunctionBlockStatements() { - var savedIsInStrictMode = strictModeContext; + var savedIsInStrictMode = inStrictModeContext(); var statements = parseSyntaxList(ListParsingState.Block_Statements, updateStrictModeState); setStrictModeContext(savedIsInStrictMode); return statements; } - function parseCallSignature(requireCompleteTypeParameterList: boolean, _yieldContext: boolean, _generatorParameterContext: boolean): CallSignatureSyntax { + function parseCallSignature(requireCompleteTypeParameterList: boolean, yieldContext: boolean, generatorParameterContext: boolean): CallSignatureSyntax { return new CallSignatureSyntax(contextFlags, tryParseTypeParameterList(requireCompleteTypeParameterList), - parseParameterList(_yieldContext, _generatorParameterContext), + parseParameterList(yieldContext, generatorParameterContext), parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false)); } @@ -3645,7 +3651,7 @@ module TypeScript.Parser { return new ConstraintSyntax(contextFlags, eatToken(SyntaxKind.ExtendsKeyword), parseTypeOrExpression()); } - function parseParameterList(_yieldContext: boolean, _generatorParameterContext: boolean): ParameterListSyntax { + function parseParameterList(yieldContext: boolean, generatorParameterContext: boolean): ParameterListSyntax { // FormalParameters[Yield,GeneratorParameter] : // ... // @@ -3661,11 +3667,11 @@ module TypeScript.Parser { // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt - var savedYieldContext = yieldContext; - var savedGeneratorParameterContext = generatorParameterContext; + var savedYieldContext = inYieldContext(); + var savedGeneratorParameterContext = inGeneratorParameterContext(); - setYieldContext(_yieldContext); - setGeneratorParameterContext(_generatorParameterContext); + setYieldContext(yieldContext); + setGeneratorParameterContext(generatorParameterContext); var openParenToken: ISyntaxToken; var result = new ParameterListSyntax(contextFlags, @@ -3747,8 +3753,8 @@ module TypeScript.Parser { function tryParseType(): ITypeSyntax { // The rules about 'yield' only apply to actual code/expression contexts. They don't // apply to 'type' contexts. So we disable these parameters here before moving on. - var savedYieldContext = yieldContext; - var savedGeneratorParameterContext = generatorParameterContext; + var savedYieldContext = inYieldContext(); + var savedGeneratorParameterContext = inGeneratorParameterContext(); setYieldContext(false); setGeneratorParameterContext(false); @@ -3997,7 +4003,7 @@ module TypeScript.Parser { // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt - var identifier = generatorParameterContext + var identifier = inGeneratorParameterContext() ? enterYieldContextAnd(eatIdentifierToken) : eatIdentifierToken(); @@ -4006,7 +4012,7 @@ module TypeScript.Parser { var equalsValueClause: EqualsValueClauseSyntax = undefined; if (isEqualsValueClause(/*inParameter*/ true)) { - equalsValueClause = generatorParameterContext + equalsValueClause = inGeneratorParameterContext() ? exitYieldContextAnd(parseEqualsValueClause) : parseEqualsValueClause(); } @@ -4388,7 +4394,7 @@ module TypeScript.Parser { } function isExpectedVariableDeclaration_VariableDeclaratorsTerminator(): boolean { - if (disallowInContext) { + if (inDisallowInContext()) { // This is the case when we're parsing variable declarations in a for/for-in statement. var tokenKind = currentToken().kind; diff --git a/src/services/syntax/syntaxElement.ts b/src/services/syntax/syntaxElement.ts index fe10dcb23f9..e14ecf33b69 100644 --- a/src/services/syntax/syntaxElement.ts +++ b/src/services/syntax/syntaxElement.ts @@ -17,40 +17,29 @@ module TypeScript { return undefined; } - export function parsedInStrictModeContext(node: ISyntaxNode): boolean { + export function parserContextFlags(node: ISyntaxNode): ParserContextFlags { var info = node.__data; if (info === undefined) { - return false; + return 0; } - return (info & SyntaxNodeConstants.ParsedInStrictModeContext) !== 0; + return info & ParserContextFlags.Mask; + } + + export function parsedInStrictModeContext(node: ISyntaxNode): boolean { + return (parserContextFlags(node) & ParserContextFlags.StrictMode) !== 0; } export function parsedInDisallowInContext(node: ISyntaxNode): boolean { - var info = node.__data; - if (info === undefined) { - return false; - } - - return (info & SyntaxNodeConstants.ParsedInDisallowInContext) !== 0; + return (parserContextFlags(node) & ParserContextFlags.DisallowIn) !== 0; } export function parsedInYieldContext(node: ISyntaxNode): boolean { - var info = node.__data; - if (info === undefined) { - return false; - } - - return (info & SyntaxNodeConstants.ParsedInYieldContext) !== 0; + return (parserContextFlags(node) & ParserContextFlags.Yield) !== 0; } export function parsedInGeneratorParameterContext(node: ISyntaxNode): boolean { - var info = node.__data; - if (info === undefined) { - return false; - } - - return (info & SyntaxNodeConstants.ParsedInGeneratorParameterContext) !== 0; + return (parserContextFlags(node) & ParserContextFlags.GeneratorParameter) !== 0; } export function previousToken(token: ISyntaxToken): ISyntaxToken { From ce2e7fc5d5a52ce7fd2efb320e4ad0bfbfc818d9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 01:11:58 -0800 Subject: [PATCH 175/178] Have a node flag to indicate if a yield expression has a *. --- src/compiler/parser.ts | 4 +++- src/compiler/types.ts | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 8906bde9525..dabd00c3432 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2186,7 +2186,9 @@ module ts { if (!scanner.hasPrecedingLineBreak() && (token === SyntaxKind.AsteriskToken || isStartOfExpression())) { - parseOptional(SyntaxKind.AsteriskToken); + if (parseOptional(SyntaxKind.AsteriskToken)) { + node.flags = NodeFlags.YieldStar; + } node.expression = parseAssignmentExpression(); return finishNode(node); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0003317a9ce..a2fc1f144fe 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -272,6 +272,7 @@ module ts { Const = 0x00001000, // Variable declaration OctalLiteral = 0x00002000, Generator = 0x00004000, + YieldStar = 0x00008000, Modifier = Export | Ambient | Public | Private | Protected | Static, AccessibilityModifier = Public | Private | Protected, From dc6886c1ca7b08ee7ef6c2bee8713d7d5c33e9fa Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 01:12:21 -0800 Subject: [PATCH 176/178] Add clarifying comments. --- src/services/syntax/parser.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 924726649e1..b02233544be 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -1371,6 +1371,7 @@ module TypeScript.Parser { } function parseFunctionDeclarationWorker(modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asteriskToken: ISyntaxToken): FunctionDeclarationSyntax { + // FunctionDeclaration[Yield, Default] : // function BindingIdentifier[?Yield] ( FormalParameters ) { FunctionBody } // GeneratorDeclaration[Yield, Default] : // function * BindingIdentifier[?Yield](FormalParameters[Yield, GeneratorParameter]) { GeneratorBody[Yield] } @@ -3136,17 +3137,14 @@ module TypeScript.Parser { var _currentToken = currentToken(); // Debug.assert(currentToken.kind === SyntaxKind.OpenParenToken || currentToken.kind === SyntaxKind.LessThanToken); - // Note: ES6 specifies the formal parametes of an arrow function like this: - // - // ArrowFormalParameters[Yield, GeneratorParameter] : - // (StrictFormalParameters[?Yield, ?GeneratorParameter]) - // - // However, the 'GeneratorParameter' portion appears to be a spec bug. There does not - // appear to be any way for that value to be passed in through any grammar constructs. - // - // [Yield], on the other hand, is available, and is passed through. - - var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yield:*/ inYieldContext(), /*generatorParameter:*/ false); + // From the static semantic section: + // 1.If the [Yield] grammar parameter is present for CoverParenthesizedExpressionAndArrowParameterList[Yield] + // return the result of parsing the lexical token stream matched by CoverParenthesizedExpressionAndArrowParameterList[Yield] + // using ArrowFormalParameters[Yield, GeneratorParameter] as the goal symbol. + // 2.If the [Yield] grammar parameter is not present for CoverParenthesizedExpressionAndArrowParameterList[Yield] + // return the result of parsing the lexical token stream matched by CoverParenthesizedExpressionAndArrowParameterList + // using ArrowFormalParameters as the goal symbol. + var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yield:*/ inYieldContext(), /*generatorParameter:*/ inYieldContext()); if (requireArrow && currentToken().kind !== SyntaxKind.EqualsGreaterThanToken) { return undefined; From 3597f4f4d785481011bd580d73457ab6f82e045a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 25 Nov 2014 01:21:10 -0800 Subject: [PATCH 177/178] Improve comments for both parsers and bring more in sync. --- src/compiler/parser.ts | 42 ++++++++++++++++++----------------- src/services/syntax/parser.ts | 41 +++++++++++++++++++--------------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index dabd00c3432..4219ad40ef4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1678,9 +1678,9 @@ module ts { return parseInitializer(/*inParameter*/ true); } - function parseSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, isGenerator: boolean): ParsedSignature { + function parseSignature(kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, yieldAndGeneratorParameterContext: boolean): ParsedSignature { var signature = {}; - fillSignature(kind, returnToken, returnTokenRequired, isGenerator, signature); + fillSignature(kind, returnToken, returnTokenRequired, yieldAndGeneratorParameterContext, signature); return signature; } @@ -1688,14 +1688,14 @@ module ts { kind: SyntaxKind, returnToken: SyntaxKind, returnTokenRequired: boolean, - isGenerator: boolean, + yieldAndGeneratorParameterContext: boolean, signature: ParsedSignature): void { if (kind === SyntaxKind.ConstructSignature) { parseExpected(SyntaxKind.NewKeyword); } signature.typeParameters = parseTypeParameters(); - signature.parameters = parseParameterList(/*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator); + signature.parameters = parseParameterList(yieldAndGeneratorParameterContext); if (returnTokenRequired) { parseExpected(returnToken); @@ -1706,9 +1706,11 @@ module ts { } } - // Because we use this for index signatures as well, we sometimes use - // parentheses, and sometimes use brackets. - function parseParameterList(yieldContext: boolean, generatorParameterContext: boolean) { + // Note: after careful analysis of the grammar, it does not appear to be possible to + // have 'Yield' And 'GeneratorParameter' not in sync. i.e. any production calling + // this FormalParameters production either always sets both to true, or always sets + // both to false. As such we only have a single parameter to represent both. + function parseParameterList(yieldAndGeneratorParameterContext: boolean) { // FormalParameters[Yield,GeneratorParameter] : // ... // @@ -1727,8 +1729,8 @@ module ts { var savedYieldContext = inYieldContext(); var savedGeneratorParameterContext = inGeneratorParameterContext(); - setYieldContext(yieldContext); - setGeneratorParameterContext(generatorParameterContext); + setYieldContext(yieldAndGeneratorParameterContext); + setGeneratorParameterContext(yieldAndGeneratorParameterContext); var result = parseDelimitedList(ParsingContext.Parameters, parseParameter); parseExpected(SyntaxKind.CloseParenToken); @@ -1744,7 +1746,7 @@ module ts { function parseSignatureMember(kind: SyntaxKind, returnToken: SyntaxKind): SignatureDeclaration { var node = createNode(kind); - fillSignature(kind, returnToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); + fillSignature(kind, returnToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false, node); parseSemicolon(); return finishNode(node); } @@ -1773,7 +1775,7 @@ module ts { // Method signatues don't exist in expression contexts. So they have neither // [Yield] nor [GeneratorParameter] - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, method); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false, method); parseSemicolon(); return finishNode(method); @@ -1857,7 +1859,7 @@ module ts { function parseFunctionType(typeKind: SyntaxKind): SignatureDeclaration { var node = createNode(typeKind); fillSignature(typeKind === SyntaxKind.FunctionType ? SyntaxKind.CallSignature : SyntaxKind.ConstructSignature, - SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true, /*isGenerator:*/ false, node); + SyntaxKind.EqualsGreaterThanToken, /* returnTokenRequired */ true, /*yieldAndGeneratorParameterContext:*/ false, node); return finishNode(node); } @@ -2230,7 +2232,7 @@ module ts { if (triState === Tristate.True) { // Arrow function are never generators. - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false); // If we have an arrow, then try to parse the body. // Even if not, try to parse if we have an opening brace, just in case we're in an error state. @@ -2334,7 +2336,7 @@ module ts { function tryParseSignatureIfArrowOrBraceFollows(): ParsedSignature { return tryParse(() => { // Arrow functions are never generators. - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false); // Parsing a signature isn't enough. // Parenthesized arrow signatures often look like other valid expressions. @@ -2726,7 +2728,7 @@ module ts { if (isGenerator) { node.flags |= NodeFlags.Generator; } - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ isGenerator); var body = parseFunctionBlock(isGenerator, /* ignoreMissingOpenBrace */ false); // do not propagate property name as name for function expression @@ -2794,7 +2796,7 @@ module ts { parseExpected(SyntaxKind.FunctionKeyword); var isGenerator = parseOptional(SyntaxKind.AsteriskToken); var name = isGenerator ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier(); - var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator); + var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ isGenerator); var body = parseFunctionBlock(/*allowYield:*/ isGenerator, /* ignoreMissingOpenBrace */ false); return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body, isGenerator ? NodeFlags.Generator : undefined); @@ -3282,7 +3284,7 @@ module ts { } node.name = parseIdentifier(); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator, node); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ isGenerator, node); node.body = parseFunctionBlockOrSemicolon(isGenerator); return finishNode(node); } @@ -3291,7 +3293,7 @@ module ts { var node = createNode(SyntaxKind.Constructor, pos); setModifiers(node, modifiers); parseExpected(SyntaxKind.ConstructorKeyword); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false, node); node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } @@ -3317,7 +3319,7 @@ module ts { method.flags = flags; } method.name = name; - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ isGenerator, method); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ isGenerator, method); method.body = parseFunctionBlockOrSemicolon(isGenerator); return finishNode(method); } @@ -3339,7 +3341,7 @@ module ts { var node = createNode(kind, fullStart); setModifiers(node, modifiers); node.name = parsePropertyName(); - fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*isGenerator:*/ false, node); + fillSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken, /* returnTokenRequired */ false, /*yieldAndGeneratorParameterContext:*/ false, node); node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index b02233544be..53f4608ff57 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -1190,14 +1190,14 @@ module TypeScript.Parser { function parseGetAccessor(modifiers: ISyntaxToken[], getKeyword: ISyntaxToken): GetAccessorSyntax { return new GetAccessorSyntax(contextFlags, modifiers, consumeToken(getKeyword), parsePropertyName(), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameter:*/ false), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false), parseFunctionBody(/*isGenerator:*/ false)); } function parseSetAccessor(modifiers: ISyntaxToken[], setKeyword: ISyntaxToken): SetAccessorSyntax { return new SetAccessorSyntax(contextFlags, modifiers, consumeToken(setKeyword), parsePropertyName(), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false), parseFunctionBody(/*isGenerator:*/ false)); } @@ -1326,7 +1326,7 @@ module TypeScript.Parser { return new ConstructorDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ConstructorKeyword), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false), parseFunctionBody(/*isGenerator:*/ false)); } @@ -1339,7 +1339,7 @@ module TypeScript.Parser { modifiers, asteriskToken, propertyName, - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ isGenerator), parseFunctionBody(isGenerator)); } @@ -1381,7 +1381,7 @@ module TypeScript.Parser { functionKeyword, asteriskToken, eatIdentifierToken(), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ isGenerator, /*generatorParameterContext:*/ isGenerator), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ isGenerator), parseFunctionBody(isGenerator)); } @@ -1485,7 +1485,7 @@ module TypeScript.Parser { // A call signature for a type member can both use 'yield' as a parameter name, and // does not have parameter initializers. So we can pass 'false' for both [Yield] // and [GeneratorParameter]. - return parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false); + return parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false); } else if (isConstructSignature()) { return parseConstructSignature(); @@ -1513,7 +1513,7 @@ module TypeScript.Parser { // Construct signatures have no [Yield] or [GeneratorParameter] restrictions. return new ConstructSignatureSyntax(contextFlags, eatToken(SyntaxKind.NewKeyword), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false)); + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false)); } function parseIndexSignature(): IndexSignatureSyntax { @@ -1529,7 +1529,7 @@ module TypeScript.Parser { return new MethodSignatureSyntax(contextFlags, propertyName, questionToken, - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldContext:*/ false, /*generatorParameterContext:*/ false)); + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false)); } function parsePropertySignature(propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken): PropertySignatureSyntax { @@ -3022,7 +3022,7 @@ module TypeScript.Parser { functionKeyword, asteriskToken, asteriskToken ? enterYieldContextAnd(eatOptionalIdentifierToken) : eatOptionalIdentifierToken(), - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ isGenerator), parseFunctionBody(isGenerator)); } @@ -3144,7 +3144,7 @@ module TypeScript.Parser { // 2.If the [Yield] grammar parameter is not present for CoverParenthesizedExpressionAndArrowParameterList[Yield] // return the result of parsing the lexical token stream matched by CoverParenthesizedExpressionAndArrowParameterList // using ArrowFormalParameters as the goal symbol. - var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yield:*/ inYieldContext(), /*generatorParameter:*/ inYieldContext()); + var callSignature = parseCallSignature(/*requireCompleteTypeParameterList:*/ true, /*yieldAndGeneratorParameterContext:*/ inYieldContext()); if (requireArrow && currentToken().kind !== SyntaxKind.EqualsGreaterThanToken) { return undefined; @@ -3538,7 +3538,7 @@ module TypeScript.Parser { return new FunctionPropertyAssignmentSyntax(contextFlags, asteriskToken, propertyName, - parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yield:*/ isGenerator, /*generatorParameter:*/ isGenerator), + parseCallSignature(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ isGenerator), parseFunctionBody(isGenerator)); } @@ -3596,10 +3596,10 @@ module TypeScript.Parser { return statements; } - function parseCallSignature(requireCompleteTypeParameterList: boolean, yieldContext: boolean, generatorParameterContext: boolean): CallSignatureSyntax { + function parseCallSignature(requireCompleteTypeParameterList: boolean, yieldAndGeneratorParameterContext: boolean): CallSignatureSyntax { return new CallSignatureSyntax(contextFlags, tryParseTypeParameterList(requireCompleteTypeParameterList), - parseParameterList(yieldContext, generatorParameterContext), + parseParameterList(yieldAndGeneratorParameterContext), parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false)); } @@ -3649,7 +3649,11 @@ module TypeScript.Parser { return new ConstraintSyntax(contextFlags, eatToken(SyntaxKind.ExtendsKeyword), parseTypeOrExpression()); } - function parseParameterList(yieldContext: boolean, generatorParameterContext: boolean): ParameterListSyntax { + // Note: after careful analysis of the grammar, it does not appear to be possible to + // have 'Yield' And 'GeneratorParameter' not in sync. i.e. any production calling + // this FormalParameters production either always sets both to true, or always sets + // both to false. As such we only have a single parameter to represent both. + function parseParameterList(yieldAndGeneratorParameterContext: boolean): ParameterListSyntax { // FormalParameters[Yield,GeneratorParameter] : // ... // @@ -3665,11 +3669,12 @@ module TypeScript.Parser { // [+GeneratorParameter]BindingIdentifier[Yield]Initializer[In]opt // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt + var savedYieldContext = inYieldContext(); var savedGeneratorParameterContext = inGeneratorParameterContext(); - setYieldContext(yieldContext); - setGeneratorParameterContext(generatorParameterContext); + setYieldContext(yieldAndGeneratorParameterContext); + setGeneratorParameterContext(yieldAndGeneratorParameterContext); var openParenToken: ISyntaxToken; var result = new ParameterListSyntax(contextFlags, @@ -3936,7 +3941,7 @@ module TypeScript.Parser { // aren't in the [Yield] or [GeneratorParameter] context. return new FunctionTypeSyntax(contextFlags, tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), - parseParameterList(/*yield:*/ false, /*generatorParameter:*/ false), + parseParameterList(/*yieldAndGeneratorParameterContext:*/ false), eatToken(SyntaxKind.EqualsGreaterThanToken), parseType()); } @@ -3946,7 +3951,7 @@ module TypeScript.Parser { return new ConstructorTypeSyntax(contextFlags, eatToken(SyntaxKind.NewKeyword), tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), - parseParameterList(/*yield:*/ false, /*generatorParameter:*/ false), + parseParameterList(/*yieldAndGeneratorParameterContext:*/ false), eatToken(SyntaxKind.EqualsGreaterThanToken), parseType()); } From 92f8d0ba28e0e2b42571969575c1f3127e0fb2a5 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 25 Nov 2014 10:30:13 -0800 Subject: [PATCH 178/178] Change the name invokeEmitter back to emitFiles --- src/compiler/checker.ts | 2 +- src/compiler/tsc.ts | 2 +- src/compiler/types.ts | 2 +- src/harness/fourslash.ts | 2 +- src/harness/harness.ts | 2 +- src/harness/projectsRunner.ts | 2 +- src/services/services.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c80fbcdd8d6..5ee9fa4ab3e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -81,11 +81,11 @@ module ts { getTypeCount: () => typeCount, isUndefinedSymbol: symbol => symbol === undefinedSymbol, isArgumentsSymbol: symbol => symbol === argumentsSymbol, + emitFiles: invokeEmitter, getDiagnostics, getDeclarationDiagnostics, getGlobalDiagnostics, checkProgram, - invokeEmitter, getParentOfSymbol, getNarrowedTypeOfSymbol, getDeclaredTypeOfSymbol, diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 79972c7a891..9bb2db719f1 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -367,7 +367,7 @@ module ts { } else { var emitStart = new Date().getTime(); - var emitOutput = checker.invokeEmitter(); + var emitOutput = checker.emitFiles(); var emitErrors = emitOutput.diagnostics; exitStatus = emitOutput.emitResultStatus; var reportStart = new Date().getTime(); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0188067f108..c396499f54b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -738,7 +738,7 @@ module ts { getSymbolCount(): number; getTypeCount(): number; checkProgram(): void; - invokeEmitter(targetSourceFile?: SourceFile): EmitResult; + emitFiles(targetSourceFile?: SourceFile): EmitResult; getParentOfSymbol(symbol: Symbol): Symbol; getNarrowedTypeOfSymbol(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 88fb3639d1e..05e65f5648f 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2223,7 +2223,7 @@ module FourSlash { if (errs.length > 0) { throw new Error('Error compiling ' + fileName + ': ' + errs.map(e => e.messageText).join('\r\n')); } - checker.invokeEmitter(); + checker.emitFiles(); result = result || ''; // Might have an empty fourslash file // Compile and execute the test diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 0ce9ee1643e..1a5938d2be0 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -806,7 +806,7 @@ module Harness { // only emit if there weren't parse errors var emitResult: ts.EmitResult; if (!isEmitBlocked) { - emitResult = checker.invokeEmitter(); + emitResult = checker.emitFiles(); } var errors: HarnessDiagnostic[] = []; diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 44cd3a6d955..4734232d280 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -132,7 +132,7 @@ class ProjectRunner extends RunnerBase { if (!errors.length) { var checker = program.getTypeChecker(/*fullTypeCheck*/ true); errors = checker.getDiagnostics(); - var emitResult = checker.invokeEmitter(); + var emitResult = checker.emitFiles(); errors = ts.concatenate(errors, emitResult.diagnostics); sourceMapData = emitResult.sourceMaps; diff --git a/src/services/services.ts b/src/services/services.ts index cf5ca07132e..2ef21f01dd1 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4625,7 +4625,7 @@ module ts { // Perform semantic and force a type check before emit to ensure that all symbols are updated // EmitFiles will report if there is an error from TypeChecker and Emitter // Depend whether we will have to emit into a single file or not either emit only selected file in the project, emit all files into a single file - var emitFilesResult = getFullTypeCheckChecker().invokeEmitter(targetSourceFile); + var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile); emitOutput.emitOutputStatus = emitFilesResult.emitResultStatus; // Reset writer back to undefined to make sure that we produce an error message if CompilerHost.writeFile method is called when we are not in getEmitOutput