From 35a6d0e68a7ed4118619ca963dc1454f7f0d7a10 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 13:04:42 -0800 Subject: [PATCH 01/33] Introduce an object to store and manage diagnostics for different compiler components. --- src/compiler/checker.ts | 46 ++++++++-------------- src/compiler/parser.ts | 3 +- src/compiler/types.ts | 20 ++++++++++ src/compiler/utilities.ts | 80 +++++++++++++++++++++++++++++++++++++++ src/harness/harness.ts | 3 +- 5 files changed, 118 insertions(+), 34 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6aa4862abc5..433cb79d29b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -104,8 +104,7 @@ module ts { var nodeLinks: NodeLinks[] = []; var potentialThisCollisions: Node[] = []; - var diagnostics: Diagnostic[] = []; - var diagnosticsModified: boolean = false; + var diagnostics = createDiagnosticCollection(); var primitiveTypeInfo: Map<{ type: Type; flags: TypeFlags }> = { "string": { @@ -122,16 +121,11 @@ module ts { } }; - function addDiagnostic(diagnostic: Diagnostic) { - diagnostics.push(diagnostic); - diagnosticsModified = true; - } - function error(location: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { var diagnostic = location ? createDiagnosticForNode(location, message, arg0, arg1, arg2) : createCompilerDiagnostic(message, arg0, arg1, arg2); - addDiagnostic(diagnostic); + diagnostics.add(diagnostic); } function createSymbol(flags: SymbolFlags, name: string): Symbol { @@ -3479,7 +3473,8 @@ module ts { if (containingMessageChain) { errorInfo = concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); } - addDiagnostic(createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, host.getCompilerHost().getNewLine())); + + diagnostics.add(createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, host.getCompilerHost().getNewLine())); } return result !== Ternary.False; @@ -5705,9 +5700,9 @@ module ts { return false; } else { - var diagnosticsCount = diagnostics.length; + var modificationCount = diagnostics.getModificationCount(); checkClassPropertyAccess(node, left, type, prop); - return diagnostics.length === diagnosticsCount + return diagnostics.getModificationCount() === modificationCount; } } } @@ -8927,7 +8922,7 @@ module ts { var errorInfo = chainDiagnosticMessages(undefined, Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); - addDiagnostic(createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, host.getCompilerHost().getNewLine())); } } } @@ -9578,30 +9573,19 @@ module ts { } } - function getSortedDiagnostics(): Diagnostic[]{ - Debug.assert(produceDiagnostics, "diagnostics are available only in the full typecheck mode"); - - if (diagnosticsModified) { - diagnostics.sort(compareDiagnostics); - diagnostics = deduplicateSortedDiagnostics(diagnostics); - diagnosticsModified = false; - } - return diagnostics; - } - function getDiagnostics(sourceFile?: SourceFile): Diagnostic[] { throwIfNonDiagnosticsProducing(); if (sourceFile) { checkSourceFile(sourceFile); - return filter(getSortedDiagnostics(), d => d.file === sourceFile); + return diagnostics.getDiagnostics(sourceFile.fileName); } forEach(host.getSourceFiles(), checkSourceFile); - return getSortedDiagnostics(); + return diagnostics.getDiagnostics(); } function getGlobalDiagnostics(): Diagnostic[]{ throwIfNonDiagnosticsProducing(); - return filter(getSortedDiagnostics(), d => !d.file); + return diagnostics.getGlobalDiagnostics(); } function throwIfNonDiagnosticsProducing() { @@ -10234,7 +10218,7 @@ module ts { // Bind all source files and propagate errors forEach(host.getSourceFiles(), file => { bindSourceFile(file); - forEach(file.semanticDiagnostics, addDiagnostic); + forEach(file.semanticDiagnostics, d => diagnostics.add(d)); }); // Initialize global symbol table forEach(host.getSourceFiles(), file => { @@ -11035,14 +11019,14 @@ module ts { if (!hasParseDiagnostics(sourceFile)) { var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceFile.text); var start = scanToken(scanner, node.pos); - diagnostics.push(createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); + diagnostics.add(createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); return true; } } function grammarErrorAtPos(sourceFile: SourceFile, start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean { if (!hasParseDiagnostics(sourceFile)) { - diagnostics.push(createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); + diagnostics.add(createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); return true; } } @@ -11052,7 +11036,7 @@ module ts { if (!hasParseDiagnostics(sourceFile)) { var span = getErrorSpanForNode(node); var start = span.end > span.pos ? skipTrivia(sourceFile.text, span.pos) : span.pos; - diagnostics.push(createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); + diagnostics.add(createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); return true; } } @@ -11186,7 +11170,7 @@ module ts { if (!hasParseDiagnostics(sourceFile)) { var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceFile.text); scanToken(scanner, node.pos); - diagnostics.push(createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); + diagnostics.add(createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); return true; } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 866d66d5151..9589e25dd97 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -358,10 +358,9 @@ module ts { export function getSyntacticDiagnostics(sourceFile: SourceFile) { if (!sourceFile.syntacticDiagnostics) { - // Don't bother doing any grammar checks if there are already parser errors. - // Otherwise we may end up with too many cascading errors. sourceFile.syntacticDiagnostics = sourceFile.referenceDiagnostics.concat(sourceFile.parseDiagnostics); } + return sourceFile.syntacticDiagnostics; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ff8f5d2ed48..069f2a15bba 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1678,4 +1678,24 @@ module ts { span: TextSpan; newLength: number; } + + // @internal + export interface DiagnosticCollection { + // Adds a diagnostic to this diagnostic collection. + add(diagnostic?: Diagnostic): void; + + // Gets all the diagnostics that aren't associated with a file. + getGlobalDiagnostics(): Diagnostic[]; + + // If fileName is provided, gets all the diagnostics associated with that file name. + // Otherwise, returns all the diagnostics (global and file associated) in this colletion. + getDiagnostics(fileName?: string): Diagnostic[]; + + // Gets a count of how many times this collectoin has been modified. This value changes + // each time 'add' is called (regardless of whether or not an equivalent diagnostic was + // already in the collection). As such, it can be used as a simple way to tell if any + // operation caused diagnostics to be returned by storing and comparing the return value + // of this method before/after the operation is performed. + getModificationCount(): number; + } } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index f95952dc5c5..69c64ba4880 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1068,4 +1068,84 @@ module ts { return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), /*newLength: */newEndN - oldStartN); } + + // @internal + export function createDiagnosticCollection(): DiagnosticCollection { + var nonFileDiagnostics: Diagnostic[] = []; + var fileDiagnostics: Map = {}; + + var diagnosticsModified = false; + var modificationCount = 0; + + return { + add, + getGlobalDiagnostics, + getDiagnostics, + getModificationCount + }; + + function getModificationCount() { + return modificationCount; + } + + function add(diagnostic: Diagnostic): void { + var diagnostics: Diagnostic[]; + if (diagnostic.file) { + diagnostics = fileDiagnostics[diagnostic.file.fileName]; + if (!diagnostics) { + diagnostics = []; + fileDiagnostics[diagnostic.file.fileName] = diagnostics; + } + } + else { + diagnostics = nonFileDiagnostics; + } + + diagnostics.push(diagnostic); + diagnosticsModified = true; + modificationCount++; + } + + function getGlobalDiagnostics(): Diagnostic[] { + sortAndDeduplicate(); + return nonFileDiagnostics; + } + + function getDiagnostics(fileName?: string): Diagnostic[] { + sortAndDeduplicate(); + if (fileName) { + return fileDiagnostics[fileName] || []; + } + + var allDiagnostics: Diagnostic[] = []; + forEach(nonFileDiagnostics, d => { allDiagnostics.push(d) }); + + for (var key in fileDiagnostics) { + if (hasProperty(fileDiagnostics, key)) { + forEach(fileDiagnostics[key], d => { allDiagnostics.push(d) }); + } + } + + return sortAndDeplicateList(allDiagnostics); + } + + function sortAndDeduplicate() { + if (!diagnosticsModified) { + return; + } + + diagnosticsModified = false; + nonFileDiagnostics = sortAndDeplicateList(nonFileDiagnostics); + + for (var key in fileDiagnostics) { + if (hasProperty(fileDiagnostics, key)) { + fileDiagnostics[key] = sortAndDeplicateList(fileDiagnostics[key]); + } + } + } + + function sortAndDeplicateList(diagnostics: Diagnostic[]): Diagnostic[] { + return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)) + } + } } \ No newline at end of file diff --git a/src/harness/harness.ts b/src/harness/harness.ts index c17a8da78e8..02e14bec954 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -921,6 +921,7 @@ module Harness { // Current directory is needed for rwcRunner to be able to use currentDirectory defined in json file currentDirectory?: string) { + debugger; options = options || { noResolve: false }; options.target = options.target || ts.ScriptTarget.ES3; options.module = options.module || ts.ModuleKind.None; @@ -1074,7 +1075,7 @@ module Harness { otherFiles.forEach(register); var fileOutputs: GeneratedFile[] = []; - + var programFiles = inputFiles.map(file => file.unitName); var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(otherFiles), (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), From 9fac51b10863ccb03b61b3aaa6871303a47c30a2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 13:11:20 -0800 Subject: [PATCH 02/33] Make more diagnostic features internal so they're not exposed in our DTS. --- src/compiler/types.ts | 35 +++++++------------ .../baselines/reference/APISample_compile.js | 4 --- .../reference/APISample_compile.types | 12 ------- tests/baselines/reference/APISample_linter.js | 4 --- .../reference/APISample_linter.types | 12 ------- .../reference/APISample_transform.js | 4 --- .../reference/APISample_transform.types | 12 ------- .../baselines/reference/APISample_watcher.js | 4 --- .../reference/APISample_watcher.types | 12 ------- 9 files changed, 13 insertions(+), 86 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 069f2a15bba..91162998555 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -896,37 +896,27 @@ module ts { languageVersion: ScriptTarget; identifiers: Map; - // @internal - nodeCount: number; + /* @internal */ nodeCount: number; + /* @internal */ identifierCount: number; + /* @internal */ symbolCount: number; - // @internal - identifierCount: number; - - // @internal - symbolCount: number; - - // @internal // Diagnostics reported about the "///getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getNodeCount(): number; ->getNodeCount : () => number - - getIdentifierCount(): number; ->getIdentifierCount : () => number - - getSymbolCount(): number; ->getSymbolCount : () => number - - getTypeCount(): number; ->getTypeCount : () => number - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 9cc9c2ffd50..d850585ea37 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -820,10 +820,6 @@ declare module "typescript" { getEmitResolver(): EmitResolver; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getNodeCount(): number; - getIdentifierCount(): number; - getSymbolCount(): number; - getTypeCount(): number; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index aaa07714c61..f84338d9d1c 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2551,18 +2551,6 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getNodeCount(): number; ->getNodeCount : () => number - - getIdentifierCount(): number; ->getIdentifierCount : () => number - - getSymbolCount(): number; ->getSymbolCount : () => number - - getTypeCount(): number; ->getTypeCount : () => number - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 201053584ac..4c86119f6a0 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -821,10 +821,6 @@ declare module "typescript" { getEmitResolver(): EmitResolver; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getNodeCount(): number; - getIdentifierCount(): number; - getSymbolCount(): number; - getTypeCount(): number; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 408285caaaa..2093ec7d8f5 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2499,18 +2499,6 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getNodeCount(): number; ->getNodeCount : () => number - - getIdentifierCount(): number; ->getIdentifierCount : () => number - - getSymbolCount(): number; ->getSymbolCount : () => number - - getTypeCount(): number; ->getTypeCount : () => number - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 47f40c01d8e..0e242eaca34 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -858,10 +858,6 @@ declare module "typescript" { getEmitResolver(): EmitResolver; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getNodeCount(): number; - getIdentifierCount(): number; - getSymbolCount(): number; - getTypeCount(): number; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index dfdc133817e..9255c64511c 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2677,18 +2677,6 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getNodeCount(): number; ->getNodeCount : () => number - - getIdentifierCount(): number; ->getIdentifierCount : () => number - - getSymbolCount(): number; ->getSymbolCount : () => number - - getTypeCount(): number; ->getTypeCount : () => number - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol From c7160ddb319fc1b3da3884306cba1a96422b4ee6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 13:31:36 -0800 Subject: [PATCH 03/33] Rename semanticDiagnostics to bindDiagnotics. --- src/compiler/binder.ts | 6 +++--- src/compiler/checker.ts | 2 +- src/compiler/parser.ts | 4 ++-- src/compiler/types.ts | 6 ++++-- src/services/services.ts | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index c97e1f34772..a8055d993a1 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -136,9 +136,9 @@ module ts { : Diagnostics.Duplicate_identifier_0; forEach(symbol.declarations, declaration => { - file.semanticDiagnostics.push(createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.bindDiagnostics.push(createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticDiagnostics.push(createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.bindDiagnostics.push(createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } @@ -159,7 +159,7 @@ module ts { if (node.name) { node.name.parent = node; } - file.semanticDiagnostics.push(createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], + file.bindDiagnostics.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 433cb79d29b..05e60ddcd46 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10218,7 +10218,7 @@ module ts { // Bind all source files and propagate errors forEach(host.getSourceFiles(), file => { bindSourceFile(file); - forEach(file.semanticDiagnostics, d => diagnostics.add(d)); + forEach(file.bindDiagnostics, d => diagnostics.add(d)); }); // Initialize global symbol table forEach(host.getSourceFiles(), file => { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9589e25dd97..e563291f762 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -873,7 +873,7 @@ module ts { sourceFile.pos = sourceFile.end = 0; sourceFile.referenceDiagnostics = []; sourceFile.parseDiagnostics = []; - sourceFile.semanticDiagnostics = []; + sourceFile.bindDiagnostics = []; sourceFile.languageVersion = languageVersion; sourceFile.fileName = normalizePath(fileName); sourceFile.flags = fileExtensionIs(sourceFile.fileName, ".d.ts") ? NodeFlags.DeclarationFile : 0; @@ -958,7 +958,7 @@ module ts { sourceFile.syntacticDiagnostics = undefined; sourceFile.referenceDiagnostics = []; sourceFile.parseDiagnostics = []; - sourceFile.semanticDiagnostics = []; + sourceFile.bindDiagnostics = []; sourceFile.end = sourceText.length; sourceFile.text = sourceText; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 91162998555..ff71bd8a0a0 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -892,7 +892,9 @@ module ts { referencedFiles: FileReference[]; hasNoDefaultLib: boolean; - externalModuleIndicator: Node; // The first node that causes this file to be an external module + + // The first node that causes this file to be an external module + externalModuleIndicator: Node; languageVersion: ScriptTarget; identifiers: Map; @@ -908,7 +910,7 @@ module ts { /* @internal */ parseDiagnostics: Diagnostic[]; // File level diagnostics reported by the binder. - /* @internal */ semanticDiagnostics: Diagnostic[]; + /* @internal */ bindDiagnostics: Diagnostic[]; // Returns all syntactic diagnostics (i.e. the reference, parser and grammar diagnostics). // This field should never be used directly, use getSyntacticDiagnostics function instead. diff --git a/src/services/services.ts b/src/services/services.ts index 630e5567beb..6a2040543ba 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -733,7 +733,7 @@ module ts { public syntacticDiagnostics: Diagnostic[]; public referenceDiagnostics: Diagnostic[]; public parseDiagnostics: Diagnostic[]; - public semanticDiagnostics: Diagnostic[]; + public bindDiagnostics: Diagnostic[]; public hasNoDefaultLib: boolean; public externalModuleIndicator: Node; // The first node that causes this file to be an external module From 5b049feb36eafd59b07538e46652295d105c99d4 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 14:29:25 -0800 Subject: [PATCH 04/33] Hide the diagnostic producing methods from TypeChecker. Instead, consumers should get these diagnostics through the Program instance. --- src/compiler/program.ts | 18 ++++++-- src/compiler/types.ts | 10 ++++- src/services/services.ts | 3 +- .../baselines/reference/APISample_compile.js | 10 ++--- .../reference/APISample_compile.types | 44 ++++++++----------- tests/baselines/reference/APISample_linter.js | 4 +- .../reference/APISample_linter.types | 20 ++++----- .../reference/APISample_transform.js | 10 ++--- .../reference/APISample_transform.types | 39 +++++++--------- .../baselines/reference/APISample_watcher.js | 4 +- .../reference/APISample_watcher.types | 20 ++++----- tests/cases/compiler/APISample_compile.ts | 3 +- tests/cases/compiler/APISample_transform.ts | 3 +- 13 files changed, 91 insertions(+), 97 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e764e20f29f..56aaf75f667 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -98,9 +98,11 @@ module ts { getSourceFiles: () => files, getCompilerOptions: () => options, getCompilerHost: () => host, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getDeclarationDiagnostics: getDeclarationDiagnostics, + getDiagnostics, + getGlobalDiagnostics, + getTypeCheckerDiagnostics, + getTypeCheckerGlobalDiagnostics, + getDeclarationDiagnostics, getTypeChecker, getCommonSourceDirectory: () => commonSourceDirectory, emitFiles: invokeEmitter, @@ -115,7 +117,7 @@ module ts { function isEmitBlocked(sourceFile?: SourceFile): boolean { if (options.noEmitOnError) { - return getDiagnostics(sourceFile).length !== 0 || getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0; + return getDiagnostics(sourceFile).length !== 0 || getTypeCheckerDiagnostics(sourceFile).length !== 0; } return false; @@ -151,6 +153,14 @@ module ts { return hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; } + function getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[] { + return getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile); + } + + function getTypeCheckerGlobalDiagnostics(): Diagnostic[] { + return getDiagnosticsProducingTypeChecker().getGlobalDiagnostics(); + } + function getDiagnostics(sourceFile?: SourceFile): Diagnostic[] { return sourceFile ? filter(errors, e => e.file === sourceFile) : errors; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ff71bd8a0a0..1f139b093c4 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -931,6 +931,10 @@ module ts { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + // These will merge with the below diagnostics function in a followup checkin. + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; @@ -997,8 +1001,6 @@ module ts { export interface TypeChecker { getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -1028,6 +1030,10 @@ module ts { isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; + // Should not be called directly. Should only be accessed through the Program instance. + /* @internal */ getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + /* @internal */ getGlobalDiagnostics(): Diagnostic[]; + /* @internal */ getNodeCount(): number; /* @internal */ getIdentifierCount(): number; /* @internal */ getSymbolCount(): number; diff --git a/src/services/services.ts b/src/services/services.ts index 6a2040543ba..b58376f2c1e 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2184,13 +2184,12 @@ module ts { fileName = normalizeSlashes(fileName) var compilerOptions = program.getCompilerOptions(); - var checker = getDiagnosticsProducingTypeChecker(); var targetSourceFile = getValidSourceFile(fileName); // Only perform the action per file regardless of '-out' flag as LanguageServiceHost is expected to call this function per file. // Therefore only get diagnostics for given file. - var allDiagnostics = checker.getDiagnostics(targetSourceFile); + var allDiagnostics = program.getTypeCheckerDiagnostics(targetSourceFile); if (compilerOptions.declaration) { // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface allDiagnostics = allDiagnostics.concat(program.getDeclarationDiagnostics(targetSourceFile)); diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 4131e78284d..9033b832415 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -16,11 +16,10 @@ import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var checker = ts.createTypeChecker(program, /*produceDiagnostics*/ true); var result = program.emitFiles(); var allDiagnostics = program.getDiagnostics() - .concat(checker.getDiagnostics()) + .concat(program.getTypeCheckerDiagnostics()) .concat(result.diagnostics); allDiagnostics.forEach(diagnostic => { @@ -741,6 +740,8 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; @@ -789,8 +790,6 @@ declare module "typescript" { } interface TypeChecker { getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -1917,9 +1916,8 @@ var ts = require("typescript"); function compile(fileNames, options) { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var checker = ts.createTypeChecker(program, true); var result = program.emitFiles(); - var allDiagnostics = program.getDiagnostics().concat(checker.getDiagnostics()).concat(result.diagnostics); + var allDiagnostics = program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(result.diagnostics); allDiagnostics.forEach(function (diagnostic) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + diagnostic.messageText); diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 2b887bd94ab..744ca08b874 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -40,14 +40,6 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >options : ts.CompilerOptions >host : ts.CompilerHost - var checker = ts.createTypeChecker(program, /*produceDiagnostics*/ true); ->checker : ts.TypeChecker ->ts.createTypeChecker(program, /*produceDiagnostics*/ true) : ts.TypeChecker ->ts.createTypeChecker : (host: ts.TypeCheckerHost, produceDiagnostics: boolean) => ts.TypeChecker ->ts : typeof ts ->createTypeChecker : (host: ts.TypeCheckerHost, produceDiagnostics: boolean) => ts.TypeChecker ->program : ts.Program - var result = program.emitFiles(); >result : ts.EmitResult >program.emitFiles() : ts.EmitResult @@ -57,21 +49,21 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void var allDiagnostics = program.getDiagnostics() >allDiagnostics : ts.Diagnostic[] ->program.getDiagnostics() .concat(checker.getDiagnostics()) .concat(result.diagnostics) : ts.Diagnostic[] ->program.getDiagnostics() .concat(checker.getDiagnostics()) .concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->program.getDiagnostics() .concat(checker.getDiagnostics()) : ts.Diagnostic[] +>program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) .concat(result.diagnostics) : ts.Diagnostic[] +>program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) .concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } +>program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) : ts.Diagnostic[] >program.getDiagnostics() .concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } >program.getDiagnostics() : ts.Diagnostic[] >program.getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] >program : ts.Program >getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] - .concat(checker.getDiagnostics()) + .concat(program.getTypeCheckerDiagnostics()) >concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->checker.getDiagnostics() : ts.Diagnostic[] ->checker.getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] ->checker : ts.TypeChecker ->getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>program.getTypeCheckerDiagnostics() : ts.Diagnostic[] +>program.getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>program : ts.Program +>getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] .concat(result.diagnostics); >concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } @@ -2261,6 +2253,16 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; +>getTypeCheckerGlobalDiagnostics : () => Diagnostic[] +>Diagnostic : Diagnostic + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2411,16 +2413,6 @@ declare module "typescript" { >getEmitResolver : () => EmitResolver >EmitResolver : EmitResolver - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getGlobalDiagnostics(): Diagnostic[]; ->getGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index d850585ea37..49519af6f8e 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -770,6 +770,8 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; @@ -818,8 +820,6 @@ declare module "typescript" { } interface TypeChecker { getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index f84338d9d1c..9d5a62f9c66 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2391,6 +2391,16 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; +>getTypeCheckerGlobalDiagnostics : () => Diagnostic[] +>Diagnostic : Diagnostic + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2541,16 +2551,6 @@ declare module "typescript" { >getEmitResolver : () => EmitResolver >EmitResolver : EmitResolver - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getGlobalDiagnostics(): Diagnostic[]; ->getGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 4c86119f6a0..ec48720eb9c 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -49,8 +49,7 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { // Do not generate code in the presence of early errors if (!errors.length) { // Type check and get semantic errors - var checker = program.getTypeChecker(true); - errors = checker.getDiagnostics(); + errors = program.getTypeCheckerDiagnostics(); // Generate output program.emitFiles(); } @@ -771,6 +770,8 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; @@ -819,8 +820,6 @@ declare module "typescript" { } interface TypeChecker { getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -1974,8 +1973,7 @@ function transform(contents, compilerOptions) { // Do not generate code in the presence of early errors if (!errors.length) { // Type check and get semantic errors - var checker = program.getTypeChecker(true); - errors = checker.getDiagnostics(); + errors = program.getTypeCheckerDiagnostics(); // Generate output program.emitFiles(); } diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 2093ec7d8f5..bb9f6823e4c 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -162,20 +162,13 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { >length : number // Type check and get semantic errors - var checker = program.getTypeChecker(true); ->checker : ts.TypeChecker ->program.getTypeChecker(true) : ts.TypeChecker ->program.getTypeChecker : (produceDiagnostics: boolean) => ts.TypeChecker ->program : ts.Program ->getTypeChecker : (produceDiagnostics: boolean) => ts.TypeChecker - - errors = checker.getDiagnostics(); ->errors = checker.getDiagnostics() : ts.Diagnostic[] + errors = program.getTypeCheckerDiagnostics(); +>errors = program.getTypeCheckerDiagnostics() : ts.Diagnostic[] >errors : ts.Diagnostic[] ->checker.getDiagnostics() : ts.Diagnostic[] ->checker.getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] ->checker : ts.TypeChecker ->getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>program.getTypeCheckerDiagnostics() : ts.Diagnostic[] +>program.getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>program : ts.Program +>getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] // Generate output program.emitFiles(); @@ -2339,6 +2332,16 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; +>getTypeCheckerGlobalDiagnostics : () => Diagnostic[] +>Diagnostic : Diagnostic + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2489,16 +2492,6 @@ declare module "typescript" { >getEmitResolver : () => EmitResolver >EmitResolver : EmitResolver - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getGlobalDiagnostics(): Diagnostic[]; ->getGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 0e242eaca34..2abce891f35 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -808,6 +808,8 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; @@ -856,8 +858,6 @@ declare module "typescript" { } interface TypeChecker { getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 9255c64511c..949eab3e5eb 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2517,6 +2517,16 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getTypeCheckerGlobalDiagnostics(): Diagnostic[]; +>getTypeCheckerGlobalDiagnostics : () => Diagnostic[] +>Diagnostic : Diagnostic + getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2667,16 +2677,6 @@ declare module "typescript" { >getEmitResolver : () => EmitResolver >EmitResolver : EmitResolver - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getGlobalDiagnostics(): Diagnostic[]; ->getGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/cases/compiler/APISample_compile.ts b/tests/cases/compiler/APISample_compile.ts index 757574c0d7d..5278fb16682 100644 --- a/tests/cases/compiler/APISample_compile.ts +++ b/tests/cases/compiler/APISample_compile.ts @@ -16,11 +16,10 @@ import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var checker = ts.createTypeChecker(program, /*produceDiagnostics*/ true); var result = program.emitFiles(); var allDiagnostics = program.getDiagnostics() - .concat(checker.getDiagnostics()) + .concat(program.getTypeCheckerDiagnostics()) .concat(result.diagnostics); allDiagnostics.forEach(diagnostic => { diff --git a/tests/cases/compiler/APISample_transform.ts b/tests/cases/compiler/APISample_transform.ts index c3e214b0e37..284e8a4dc5d 100644 --- a/tests/cases/compiler/APISample_transform.ts +++ b/tests/cases/compiler/APISample_transform.ts @@ -49,8 +49,7 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { // Do not generate code in the presence of early errors if (!errors.length) { // Type check and get semantic errors - var checker = program.getTypeChecker(true); - errors = checker.getDiagnostics(); + errors = program.getTypeCheckerDiagnostics(); // Generate output program.emitFiles(); } From b6d083fa408fd6db7ca09e5ec94028b580e08ac5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 16:11:38 -0800 Subject: [PATCH 05/33] Do not publicly expose a way on a Program instance to get typecheckers with differing behavior. Now, you can only get the non-diagnostics, pull-type-checker from the Program instance. If you want diagnostics, you simply ask the Program instance for the diagnostics you want. --- src/compiler/program.ts | 16 +- src/compiler/tsc.ts | 11 +- src/compiler/types.ts | 14 +- src/harness/compilerRunner.ts | 35 +- src/harness/harness.ts | 4 +- src/harness/projectsRunner.ts | 3 +- src/harness/typeWriter.ts | 6 +- src/services/services.ts | 10 +- .../baselines/reference/APISample_compile.js | 4 +- .../reference/APISample_compile.types | 13 +- tests/baselines/reference/APISample_linter.js | 4 +- .../reference/APISample_linter.types | 13 +- .../reference/APISample_transform.js | 4 +- .../reference/APISample_transform.types | 13 +- .../baselines/reference/APISample_watcher.js | 4 +- .../reference/APISample_watcher.types | 13 +- .../TypeGuardWithEnumUnion.types.pull | 96 +++ .../aliasUsageInOrExpression.types.pull | 83 +++ .../reference/arrayLiterals.types.pull | 124 ++++ ...tedPropertyNamesContextualType6.types.pull | 40 ++ ...tedPropertyNamesContextualType7.types.pull | 40 ++ ...ontextualSignatureInstantiation.types.pull | 142 ++++ .../heterogeneousArrayLiterals.types.pull | 548 ++++++++++++++++ .../logicalOrOperatorWithEveryType.types.pull | 618 ++++++++++++++++++ ...peGuardsInConditionalExpression.types.pull | 356 ++++++++++ 25 files changed, 2145 insertions(+), 69 deletions(-) create mode 100644 tests/baselines/reference/TypeGuardWithEnumUnion.types.pull create mode 100644 tests/baselines/reference/aliasUsageInOrExpression.types.pull create mode 100644 tests/baselines/reference/arrayLiterals.types.pull create mode 100644 tests/baselines/reference/computedPropertyNamesContextualType6.types.pull create mode 100644 tests/baselines/reference/computedPropertyNamesContextualType7.types.pull create mode 100644 tests/baselines/reference/contextualSignatureInstantiation.types.pull create mode 100644 tests/baselines/reference/heterogeneousArrayLiterals.types.pull create mode 100644 tests/baselines/reference/logicalOrOperatorWithEveryType.types.pull create mode 100644 tests/baselines/reference/typeGuardsInConditionalExpression.types.pull diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 56aaf75f667..ddd9cb4ed3a 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -88,7 +88,6 @@ module ts { verifyCompilerOptions(); errors.sort(compareDiagnostics); - var diagnosticsProducingTypeChecker: TypeChecker; var noDiagnosticsTypeChecker: TypeChecker; var emitHost: EmitHost; @@ -104,10 +103,16 @@ module ts { getTypeCheckerGlobalDiagnostics, getDeclarationDiagnostics, getTypeChecker, + getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: () => commonSourceDirectory, emitFiles: invokeEmitter, isEmitBlocked, getCurrentDirectory: host.getCurrentDirectory, + getEmitResolver: () => getDiagnosticsProducingTypeChecker().getEmitResolver(), + getNodeCount: () => getDiagnosticsProducingTypeChecker().getNodeCount(), + getIdentifierCount: () => getDiagnosticsProducingTypeChecker().getIdentifierCount(), + getSymbolCount: () => getDiagnosticsProducingTypeChecker().getSymbolCount(), + getTypeCount: () => getDiagnosticsProducingTypeChecker().getTypeCount(), }; return program; @@ -127,13 +132,8 @@ module ts { return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ true)); } - function getTypeChecker(produceDiagnostics: boolean) { - if (produceDiagnostics) { - return getDiagnosticsProducingTypeChecker(); - } - else { - return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = createTypeChecker(program, produceDiagnostics)); - } + function getTypeChecker() { + return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ false)); } function getDeclarationDiagnostics(targetSourceFile: SourceFile): Diagnostic[]{ diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index cf71869ab14..2c31c008b21 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -336,9 +336,8 @@ module ts { exitStatus = EmitReturnStatus.AllOutputGenerationSkipped; } else { - var checker = program.getTypeChecker(/*fullTypeCheckMode*/ true); var checkStart = new Date().getTime(); - errors = checker.getDiagnostics(); + errors = program.getTypeCheckerDiagnostics(); if (program.isEmitBlocked()) { exitStatus = EmitReturnStatus.AllOutputGenerationSkipped; } @@ -367,10 +366,10 @@ module ts { var memoryUsed = sys.getMemoryUsage ? sys.getMemoryUsage() : -1; reportCountStatistic("Files", program.getSourceFiles().length); reportCountStatistic("Lines", countLines(program)); - reportCountStatistic("Nodes", checker ? checker.getNodeCount() : 0); - reportCountStatistic("Identifiers", checker ? checker.getIdentifierCount() : 0); - reportCountStatistic("Symbols", checker ? checker.getSymbolCount() : 0); - reportCountStatistic("Types", checker ? checker.getTypeCount() : 0); + reportCountStatistic("Nodes", program.getNodeCount()); + reportCountStatistic("Identifiers", program.getIdentifierCount()); + reportCountStatistic("Symbols", program.getSymbolCount()); + reportCountStatistic("Types", program.getTypeCount()); if (memoryUsed >= 0) { reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K"); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1f139b093c4..58898605959 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -930,6 +930,7 @@ module ts { export interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getEmitResolver(): EmitResolver; // These will merge with the below diagnostics function in a followup checkin. getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -947,11 +948,20 @@ module ts { // // If 'produceDiagnostics' is false, then any calls to get diagnostics from the TypeChecker // will throw an invalid operation exception. - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; emitFiles(targetSourceFile?: SourceFile): EmitResult; isEmitBlocked(sourceFile?: SourceFile): boolean; + + // For testing purposes only. Should not be used by any other consumers (including the + // language service). + /* @internal */ getDiagnosticsProducingTypeChecker(): TypeChecker; + + /* @internal */ getNodeCount(): number; + /* @internal */ getIdentifierCount(): number; + /* @internal */ getSymbolCount(): number; + /* @internal */ getTypeCount(): number; } export interface SourceMapSpan { @@ -1000,7 +1010,6 @@ module ts { } export interface TypeChecker { - getEmitResolver(): EmitResolver; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -1033,6 +1042,7 @@ module ts { // Should not be called directly. Should only be accessed through the Program instance. /* @internal */ getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; /* @internal */ getGlobalDiagnostics(): Diagnostic[]; + /* @internal */ getEmitResolver(): EmitResolver; /* @internal */ getNodeCount(): number; /* @internal */ getIdentifierCount(): number; diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index a88620c4e6c..e4979f7a3c4 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -256,11 +256,40 @@ class CompilerBaselineRunner extends RunnerBase { it('Correct type baselines for ' + fileName, () => { // NEWTODO: Type baselines if (result.errors.length === 0) { - Harness.Baseline.runBaseline('Correct expression types for ' + fileName, justName.replace(/\.ts/, '.types'), () => { + // The full walker simulates the types that you would get from doing a full + // compile. The pull walker simulates the types you get when you just do + // a type query for a random node (like how the LS would do it). Most of the + // time, these will be the same. However, occasionally, they can be different. + // Specifically, when the compiler internally depends on symbol IDs to order + // things, then we may see different results because symbols can be created in a + // different order with 'pull' operations, and thus can produce slightly differing + // output. + // + // For example, with a full type check, we may see a type outputed as: number | string + // But with a pull type check, we may see it as: string | number + // + // These types are equivalent, but depend on what order the compiler observed + // certain parts of the program. + + var fullWalker = new TypeWriterWalker(program, /*fullTypeCheck:*/ true); + var pullWalker = new TypeWriterWalker(program, /*fullTypeCheck:*/ false); + + var fullTypes = generateTypes(fullWalker); + var pullTypes = generateTypes(pullWalker); + + if (fullTypes !== pullTypes) { + Harness.Baseline.runBaseline('Correct full expression types for ' + fileName, justName.replace(/\.ts/, '.types'), () => fullTypes); + Harness.Baseline.runBaseline('Correct pull expression types for ' + fileName, justName.replace(/\.ts/, '.types.pull'), () => pullTypes); + } + else { + Harness.Baseline.runBaseline('Correct expression types for ' + fileName, justName.replace(/\.ts/, '.types'), () => fullTypes); + } + + function generateTypes(walker: TypeWriterWalker): string { var allFiles = toBeCompiled.concat(otherFiles).filter(file => !!program.getSourceFile(file.unitName)); var typeLines: string[] = []; var typeMap: { [fileName: string]: { [lineNum: number]: string[]; } } = {}; - var walker = new TypeWriterWalker(program); + allFiles.forEach(file => { var codeLines = file.content.split('\n'); walker.getTypes(file.unitName).forEach(result => { @@ -299,7 +328,7 @@ class CompilerBaselineRunner extends RunnerBase { }); return typeLines.join(''); - }); + } } }); }); diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 02e14bec954..1b7a7b31dbd 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1081,8 +1081,6 @@ module Harness { (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), options.target, useCaseSensitiveFileNames, currentDirectory)); - var checker = program.getTypeChecker(/*produceDiagnostics*/ true); - var isEmitBlocked = program.isEmitBlocked(); // only emit if there weren't parse errors @@ -1092,7 +1090,7 @@ module Harness { } var errors: HarnessDiagnostic[] = []; - program.getDiagnostics().concat(checker.getDiagnostics()).concat(emitResult ? emitResult.diagnostics : []).forEach(err => { + program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(emitResult ? emitResult.diagnostics : []).forEach(err => { // TODO: new compiler formats errors after this point to add . and newlines so we'll just do it manually for now errors.push(getMinimalDiagnostic(err)); }); diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index fac5219f5c1..8daa4a9afdc 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -130,8 +130,7 @@ class ProjectRunner extends RunnerBase { var errors = program.getDiagnostics(); var sourceMapData: ts.SourceMapData[] = null; if (!errors.length) { - var checker = program.getTypeChecker(/*produceDiagnostics:*/ true); - errors = checker.getDiagnostics(); + errors = program.getTypeCheckerDiagnostics(); var emitResult = program.emitFiles(); errors = ts.concatenate(errors, emitResult.diagnostics); sourceMapData = emitResult.sourceMaps; diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index 332173d218f..1d8b3efef68 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -12,10 +12,12 @@ class TypeWriterWalker { private checker: ts.TypeChecker; - constructor(private program: ts.Program) { + constructor(private program: ts.Program, fullTypeCheck: boolean) { // Consider getting both the diagnostics checker and the non-diagnostics checker to verify // they are consistent. - this.checker = program.getTypeChecker(/*produceDiagnostics:*/ true); + this.checker = fullTypeCheck + ? program.getDiagnosticsProducingTypeChecker() + : program.getTypeChecker(); } public getTypes(fileName: string): TypeWriterResult[] { diff --git a/src/services/services.ts b/src/services/services.ts index b58376f2c1e..771263919e5 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2024,10 +2024,6 @@ module ts { return sourceFile; } - function getDiagnosticsProducingTypeChecker() { - return program.getTypeChecker(/*produceDiagnostics:*/ true); - } - function getRuleProvider(options: FormatCodeOptions) { // Ensure rules are initialized and up to date wrt to formatting options if (!ruleProvider) { @@ -2076,7 +2072,7 @@ module ts { } program = newProgram; - typeInfoResolver = program.getTypeChecker(/*produceDiagnostics*/ false); + typeInfoResolver = program.getTypeChecker(); return; @@ -2155,7 +2151,7 @@ module ts { */ function cleanupSemanticCache(): void { if (program) { - typeInfoResolver = program.getTypeChecker(/*produceDiagnostics*/ false); + typeInfoResolver = program.getTypeChecker(); } } @@ -4673,7 +4669,7 @@ module ts { var emitHost = createEmitHostFromProgram(program); emitHost.writeFile = writeFile; - var emitOutput = emitFiles(getDiagnosticsProducingTypeChecker().getEmitResolver(), emitHost, sourceFile); + var emitOutput = emitFiles(program.getEmitResolver(), emitHost, sourceFile); return { outputFiles, diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 9033b832415..fd741d793b4 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -740,12 +740,13 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getEmitResolver(): EmitResolver; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; emitFiles(targetSourceFile?: SourceFile): EmitResult; isEmitBlocked(sourceFile?: SourceFile): boolean; @@ -789,7 +790,6 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 744ca08b874..5aeb7f096e1 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -2253,6 +2253,10 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getEmitResolver(): EmitResolver; +>getEmitResolver : () => EmitResolver +>EmitResolver : EmitResolver + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2279,9 +2283,8 @@ declare module "typescript" { >SourceFile : SourceFile >Diagnostic : Diagnostic - getTypeChecker(produceDiagnostics: boolean): TypeChecker; ->getTypeChecker : (produceDiagnostics: boolean) => TypeChecker ->produceDiagnostics : boolean + getTypeChecker(): TypeChecker; +>getTypeChecker : () => TypeChecker >TypeChecker : TypeChecker getCommonSourceDirectory(): string; @@ -2409,10 +2412,6 @@ declare module "typescript" { interface TypeChecker { >TypeChecker : TypeChecker - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 49519af6f8e..b32f7036038 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -770,12 +770,13 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getEmitResolver(): EmitResolver; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; emitFiles(targetSourceFile?: SourceFile): EmitResult; isEmitBlocked(sourceFile?: SourceFile): boolean; @@ -819,7 +820,6 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 9d5a62f9c66..386830d2c1c 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2391,6 +2391,10 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getEmitResolver(): EmitResolver; +>getEmitResolver : () => EmitResolver +>EmitResolver : EmitResolver + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2417,9 +2421,8 @@ declare module "typescript" { >SourceFile : SourceFile >Diagnostic : Diagnostic - getTypeChecker(produceDiagnostics: boolean): TypeChecker; ->getTypeChecker : (produceDiagnostics: boolean) => TypeChecker ->produceDiagnostics : boolean + getTypeChecker(): TypeChecker; +>getTypeChecker : () => TypeChecker >TypeChecker : TypeChecker getCommonSourceDirectory(): string; @@ -2547,10 +2550,6 @@ declare module "typescript" { interface TypeChecker { >TypeChecker : TypeChecker - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index ec48720eb9c..cdccf5e83f4 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -770,12 +770,13 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getEmitResolver(): EmitResolver; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; emitFiles(targetSourceFile?: SourceFile): EmitResult; isEmitBlocked(sourceFile?: SourceFile): boolean; @@ -819,7 +820,6 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index bb9f6823e4c..e689bba7527 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2332,6 +2332,10 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getEmitResolver(): EmitResolver; +>getEmitResolver : () => EmitResolver +>EmitResolver : EmitResolver + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2358,9 +2362,8 @@ declare module "typescript" { >SourceFile : SourceFile >Diagnostic : Diagnostic - getTypeChecker(produceDiagnostics: boolean): TypeChecker; ->getTypeChecker : (produceDiagnostics: boolean) => TypeChecker ->produceDiagnostics : boolean + getTypeChecker(): TypeChecker; +>getTypeChecker : () => TypeChecker >TypeChecker : TypeChecker getCommonSourceDirectory(): string; @@ -2488,10 +2491,6 @@ declare module "typescript" { interface TypeChecker { >TypeChecker : TypeChecker - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 2abce891f35..411cd4f9d51 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -808,12 +808,13 @@ declare module "typescript" { interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; + getEmitResolver(): EmitResolver; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; emitFiles(targetSourceFile?: SourceFile): EmitResult; isEmitBlocked(sourceFile?: SourceFile): boolean; @@ -857,7 +858,6 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 949eab3e5eb..c26d8e241e3 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2517,6 +2517,10 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost + getEmitResolver(): EmitResolver; +>getEmitResolver : () => EmitResolver +>EmitResolver : EmitResolver + getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile @@ -2543,9 +2547,8 @@ declare module "typescript" { >SourceFile : SourceFile >Diagnostic : Diagnostic - getTypeChecker(produceDiagnostics: boolean): TypeChecker; ->getTypeChecker : (produceDiagnostics: boolean) => TypeChecker ->produceDiagnostics : boolean + getTypeChecker(): TypeChecker; +>getTypeChecker : () => TypeChecker >TypeChecker : TypeChecker getCommonSourceDirectory(): string; @@ -2673,10 +2676,6 @@ declare module "typescript" { interface TypeChecker { >TypeChecker : TypeChecker - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver - getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; >getTypeOfSymbolAtLocation : (symbol: Symbol, node: Node) => Type >symbol : Symbol diff --git a/tests/baselines/reference/TypeGuardWithEnumUnion.types.pull b/tests/baselines/reference/TypeGuardWithEnumUnion.types.pull new file mode 100644 index 00000000000..33a40762445 --- /dev/null +++ b/tests/baselines/reference/TypeGuardWithEnumUnion.types.pull @@ -0,0 +1,96 @@ +=== tests/cases/conformance/expressions/typeGuards/TypeGuardWithEnumUnion.ts === +enum Color { R, G, B } +>Color : Color +>R : Color +>G : Color +>B : Color + +function f1(x: Color | string) { +>f1 : (x: string | Color) => void +>x : string | Color +>Color : Color + + if (typeof x === "number") { +>typeof x === "number" : boolean +>typeof x : string +>x : string | Color + + var y = x; +>y : Color +>x : Color + + var y: Color; +>y : Color +>Color : Color + } + else { + var z = x; +>z : string +>x : string + + var z: string; +>z : string + } +} + +function f2(x: Color | string | string[]) { +>f2 : (x: string | Color | string[]) => void +>x : string | Color | string[] +>Color : Color + + if (typeof x === "object") { +>typeof x === "object" : boolean +>typeof x : string +>x : string | Color | string[] + + var y = x; +>y : string[] +>x : string[] + + var y: string[]; +>y : string[] + } + if (typeof x === "number") { +>typeof x === "number" : boolean +>typeof x : string +>x : string | Color | string[] + + var z = x; +>z : Color +>x : Color + + var z: Color; +>z : Color +>Color : Color + } + else { + var w = x; +>w : string | string[] +>x : string | string[] + + var w: string | string[]; +>w : string | string[] + } + if (typeof x === "string") { +>typeof x === "string" : boolean +>typeof x : string +>x : string | Color | string[] + + var a = x; +>a : string +>x : string + + var a: string; +>a : string + } + else { + var b = x; +>b : Color | string[] +>x : Color | string[] + + var b: Color | string[]; +>b : Color | string[] +>Color : Color + } +} + diff --git a/tests/baselines/reference/aliasUsageInOrExpression.types.pull b/tests/baselines/reference/aliasUsageInOrExpression.types.pull new file mode 100644 index 00000000000..cc45af29f86 --- /dev/null +++ b/tests/baselines/reference/aliasUsageInOrExpression.types.pull @@ -0,0 +1,83 @@ +=== tests/cases/compiler/aliasUsageInOrExpression_main.ts === +import Backbone = require("aliasUsageInOrExpression_backbone"); +>Backbone : typeof Backbone + +import moduleA = require("aliasUsageInOrExpression_moduleA"); +>moduleA : typeof moduleA + +interface IHasVisualizationModel { +>IHasVisualizationModel : IHasVisualizationModel + + VisualizationModel: typeof Backbone.Model; +>VisualizationModel : typeof Backbone.Model +>Backbone : typeof Backbone +>Model : typeof Backbone.Model +} +var i: IHasVisualizationModel; +>i : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel + +var d1 = i || moduleA; +>d1 : typeof moduleA +>i || moduleA : typeof moduleA +>i : IHasVisualizationModel +>moduleA : typeof moduleA + +var d2: IHasVisualizationModel = i || moduleA; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>i || moduleA : typeof moduleA +>i : IHasVisualizationModel +>moduleA : typeof moduleA + +var d2: IHasVisualizationModel = moduleA || i; +>d2 : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>moduleA || i : typeof moduleA +>moduleA : typeof moduleA +>i : IHasVisualizationModel + +var e: { x: IHasVisualizationModel } = <{ x: IHasVisualizationModel }>null || { x: moduleA }; +>e : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +><{ x: IHasVisualizationModel }>null || { x: moduleA } : { x: IHasVisualizationModel; } +><{ x: IHasVisualizationModel }>null : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +var f: { x: IHasVisualizationModel } = <{ x: IHasVisualizationModel }>null ? { x: moduleA } : null; +>f : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +><{ x: IHasVisualizationModel }>null ? { x: moduleA } : null : { x: typeof moduleA; } +><{ x: IHasVisualizationModel }>null : { x: IHasVisualizationModel; } +>x : IHasVisualizationModel +>IHasVisualizationModel : IHasVisualizationModel +>{ x: moduleA } : { x: typeof moduleA; } +>x : typeof moduleA +>moduleA : typeof moduleA + +=== tests/cases/compiler/aliasUsageInOrExpression_backbone.ts === +export class Model { +>Model : Model + + public someData: string; +>someData : string +} + +=== tests/cases/compiler/aliasUsageInOrExpression_moduleA.ts === +import Backbone = require("aliasUsageInOrExpression_backbone"); +>Backbone : typeof Backbone + +export class VisualizationModel extends Backbone.Model { +>VisualizationModel : VisualizationModel +>Backbone : unknown +>Model : Backbone.Model + + // interesting stuff here +} + diff --git a/tests/baselines/reference/arrayLiterals.types.pull b/tests/baselines/reference/arrayLiterals.types.pull new file mode 100644 index 00000000000..bd06540aca3 --- /dev/null +++ b/tests/baselines/reference/arrayLiterals.types.pull @@ -0,0 +1,124 @@ +=== tests/cases/conformance/expressions/arrayLiterals/arrayLiterals.ts === +// Empty array literal with no contextual type has type Undefined[] + +var arr1= [[], [1], ['']]; +>arr1 : (number[] | string[])[] +>[[], [1], ['']] : (number[] | string[])[] +>[] : undefined[] +>[1] : number[] +>[''] : string[] + +var arr2 = [[null], [1], ['']]; +>arr2 : (number[] | string[])[] +>[[null], [1], ['']] : (number[] | string[])[] +>[null] : null[] +>[1] : number[] +>[''] : string[] + + +// Array literal with elements of only EveryType E has type E[] +var stringArrArr = [[''], [""]]; +>stringArrArr : string[][] +>[[''], [""]] : string[][] +>[''] : string[] +>[""] : string[] + +var stringArr = ['', ""]; +>stringArr : string[] +>['', ""] : string[] + +var numberArr = [0, 0.0, 0x00, 1e1]; +>numberArr : number[] +>[0, 0.0, 0x00, 1e1] : number[] + +var boolArr = [false, true, false, true]; +>boolArr : boolean[] +>[false, true, false, true] : boolean[] + +class C { private p; } +>C : C +>p : any + +var classArr = [new C(), new C()]; +>classArr : C[] +>[new C(), new C()] : C[] +>new C() : C +>C : typeof C +>new C() : C +>C : typeof C + +var classTypeArray = [C, C, C]; +>classTypeArray : typeof C[] +>[C, C, C] : typeof C[] +>C : typeof C +>C : typeof C +>C : typeof C + +var classTypeArray: Array; // Should OK, not be a parse error +>classTypeArray : typeof C[] +>Array : T[] +>C : typeof C + +// Contextual type C with numeric index signature makes array literal of EveryType E of type BCT(E,C)[] +var context1: { [n: number]: { a: string; b: number; }; } = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; +>context1 : { [n: number]: { a: string; b: number; }; } +>n : number +>a : string +>b : number +>[{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }] : ({ a: string; b: number; c: string; } | { a: string; b: number; c: number; })[] +>{ a: '', b: 0, c: '' } : { a: string; b: number; c: string; } +>a : string +>b : number +>c : string +>{ a: "", b: 3, c: 0 } : { a: string; b: number; c: number; } +>a : string +>b : number +>c : number + +var context2 = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; +>context2 : ({ a: string; b: number; c: string; } | { a: string; b: number; c: number; })[] +>[{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }] : ({ a: string; b: number; c: string; } | { a: string; b: number; c: number; })[] +>{ a: '', b: 0, c: '' } : { a: string; b: number; c: string; } +>a : string +>b : number +>c : string +>{ a: "", b: 3, c: 0 } : { a: string; b: number; c: number; } +>a : string +>b : number +>c : number + +// Contextual type C with numeric index signature of type Base makes array literal of Derived have type Base[] +class Base { private p; } +>Base : Base +>p : any + +class Derived1 extends Base { private m }; +>Derived1 : Derived1 +>Base : Base +>m : any + +class Derived2 extends Base { private n }; +>Derived2 : Derived2 +>Base : Base +>n : any + +var context3: Base[] = [new Derived1(), new Derived2()]; +>context3 : Base[] +>Base : Base +>[new Derived1(), new Derived2()] : (Derived1 | Derived2)[] +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 +>new Derived2() : Derived2 +>Derived2 : typeof Derived2 + +// Contextual type C with numeric index signature of type Base makes array literal of Derived1 and Derived2 have type Base[] +var context4: Base[] = [new Derived1(), new Derived1()]; +>context4 : Base[] +>Base : Base +>[new Derived1(), new Derived1()] : Derived1[] +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 +>new Derived1() : Derived1 +>Derived1 : typeof Derived1 + + diff --git a/tests/baselines/reference/computedPropertyNamesContextualType6.types.pull b/tests/baselines/reference/computedPropertyNamesContextualType6.types.pull new file mode 100644 index 00000000000..a7a65d6618d --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesContextualType6.types.pull @@ -0,0 +1,40 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesContextualType6.ts === +interface I { +>I : I +>T : T + + [s: string]: T; +>s : string +>T : T +} + +declare function foo(obj: I): T +>foo : (obj: I) => T +>T : T +>obj : I +>I : I +>T : T +>T : T + +foo({ +>foo({ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]}) : string | number | boolean | (() => void) | number[] +>foo : (obj: I) => T +>{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: string]: string | number | boolean | (() => void) | number[]; 0: () => void; p: string; } + + p: "", +>p : string + + 0: () => { }, +>() => { } : () => void + + ["hi" + "bye"]: true, +>"hi" + "bye" : string + + [0 + 1]: 0, +>0 + 1 : number + + [+"hi"]: [0] +>+"hi" : number +>[0] : number[] + +}); diff --git a/tests/baselines/reference/computedPropertyNamesContextualType7.types.pull b/tests/baselines/reference/computedPropertyNamesContextualType7.types.pull new file mode 100644 index 00000000000..ff68ec8d0b0 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNamesContextualType7.types.pull @@ -0,0 +1,40 @@ +=== tests/cases/conformance/es6/computedProperties/computedPropertyNamesContextualType7.ts === +interface I { +>I : I +>T : T + + [s: number]: T; +>s : number +>T : T +} + +declare function foo(obj: I): T +>foo : (obj: I) => T +>T : T +>obj : I +>I : I +>T : T +>T : T + +foo({ +>foo({ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]}) : number | (() => void) | number[] +>foo : (obj: I) => T +>{ p: "", 0: () => { }, ["hi" + "bye"]: true, [0 + 1]: 0, [+"hi"]: [0]} : { [x: number]: number | (() => void) | number[]; 0: () => void; p: string; } + + p: "", +>p : string + + 0: () => { }, +>() => { } : () => void + + ["hi" + "bye"]: true, +>"hi" + "bye" : string + + [0 + 1]: 0, +>0 + 1 : number + + [+"hi"]: [0] +>+"hi" : number +>[0] : number[] + +}); diff --git a/tests/baselines/reference/contextualSignatureInstantiation.types.pull b/tests/baselines/reference/contextualSignatureInstantiation.types.pull new file mode 100644 index 00000000000..d7246ab79aa --- /dev/null +++ b/tests/baselines/reference/contextualSignatureInstantiation.types.pull @@ -0,0 +1,142 @@ +=== tests/cases/conformance/types/typeRelationships/typeInference/contextualSignatureInstantiation.ts === +// TypeScript Spec, section 4.12.2: +// If e is an expression of a function type that contains exactly one generic call signature and no other members, +// and T is a function type with exactly one non - generic call signature and no other members, then any inferences +// made for type parameters referenced by the parameters of T's call signature are fixed, and e's type is changed +// to a function type with e's call signature instantiated in the context of T's call signature (section 3.8.5). + +declare function foo(cb: (x: number, y: string) => T): T; +>foo : (cb: (x: number, y: string) => T) => T +>T : T +>cb : (x: number, y: string) => T +>x : number +>y : string +>T : T +>T : T + +declare function bar(x: T, y: U, cb: (x: T, y: U) => V): V; +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>T : T +>U : U +>V : V +>x : T +>T : T +>y : U +>U : U +>cb : (x: T, y: U) => V +>x : T +>T : T +>y : U +>U : U +>V : V +>V : V + +declare function baz(x: T, y: T, cb: (x: T, y: T) => U): U; +>baz : (x: T, y: T, cb: (x: T, y: T) => U) => U +>T : T +>U : U +>x : T +>T : T +>y : T +>T : T +>cb : (x: T, y: T) => U +>x : T +>T : T +>y : T +>T : T +>U : U +>U : U + +declare function g(x: T, y: T): T; +>g : (x: T, y: T) => T +>T : T +>x : T +>T : T +>y : T +>T : T +>T : T + +declare function h(x: T, y: U): T[] | U[]; +>h : (x: T, y: U) => T[] | U[] +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +>U : U + +var a: number; +>a : number + +var a = bar(1, 1, g); // Should be number +>a : number +>bar(1, 1, g) : number +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>g : (x: T, y: T) => T + +var a = baz(1, 1, g); // Should be number +>a : number +>baz(1, 1, g) : number +>baz : (x: T, y: T, cb: (x: T, y: T) => U) => U +>g : (x: T, y: T) => T + +var b: number | string; +>b : string | number + +var b = foo(g); // Should be number | string +>b : string | number +>foo(g) : string | number +>foo : (cb: (x: number, y: string) => T) => T +>g : (x: T, y: T) => T + +var b = bar(1, "one", g); // Should be number | string +>b : string | number +>bar(1, "one", g) : string | number +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>g : (x: T, y: T) => T + +var b = bar("one", 1, g); // Should be number | string +>b : string | number +>bar("one", 1, g) : string | number +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>g : (x: T, y: T) => T + +var b = baz(b, b, g); // Should be number | string +>b : string | number +>baz(b, b, g) : string | number +>baz : (x: T, y: T, cb: (x: T, y: T) => U) => U +>b : string | number +>b : string | number +>g : (x: T, y: T) => T + +var d: number[] | string[]; +>d : number[] | string[] + +var d = foo(h); // Should be number[] | string[] +>d : number[] | string[] +>foo(h) : number[] | string[] +>foo : (cb: (x: number, y: string) => T) => T +>h : (x: T, y: U) => T[] | U[] + +var d = bar(1, "one", h); // Should be number[] | string[] +>d : number[] | string[] +>bar(1, "one", h) : number[] | string[] +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>h : (x: T, y: U) => T[] | U[] + +var d = bar("one", 1, h); // Should be number[] | string[] +>d : number[] | string[] +>bar("one", 1, h) : number[] | string[] +>bar : (x: T, y: U, cb: (x: T, y: U) => V) => V +>h : (x: T, y: U) => T[] | U[] + +var d = baz(d, d, g); // Should be number[] | string[] +>d : number[] | string[] +>baz(d, d, g) : number[] | string[] +>baz : (x: T, y: T, cb: (x: T, y: T) => U) => U +>d : number[] | string[] +>d : number[] | string[] +>g : (x: T, y: T) => T + diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.types.pull b/tests/baselines/reference/heterogeneousArrayLiterals.types.pull new file mode 100644 index 00000000000..e35caeed74a --- /dev/null +++ b/tests/baselines/reference/heterogeneousArrayLiterals.types.pull @@ -0,0 +1,548 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/heterogeneousArrayLiterals.ts === +// type of an array is the best common type of its elements (plus its contextual type if it exists) + +var a = [1, '']; // {}[] +>a : (string | number)[] +>[1, ''] : (string | number)[] + +var b = [1, null]; // number[] +>b : number[] +>[1, null] : number[] + +var c = [1, '', null]; // {}[] +>c : (string | number)[] +>[1, '', null] : (string | number)[] + +var d = [{}, 1]; // {}[] +>d : {}[] +>[{}, 1] : {}[] +>{} : {} + +var e = [{}, Object]; // {}[] +>e : {}[] +>[{}, Object] : {}[] +>{} : {} +>Object : ObjectConstructor + +var f = [[], [1]]; // number[][] +>f : number[][] +>[[], [1]] : number[][] +>[] : undefined[] +>[1] : number[] + +var g = [[1], ['']]; // {}[] +>g : (number[] | string[])[] +>[[1], ['']] : (number[] | string[])[] +>[1] : number[] +>[''] : string[] + +var h = [{ foo: 1, bar: '' }, { foo: 2 }]; // {foo: number}[] +>h : { foo: number; }[] +>[{ foo: 1, bar: '' }, { foo: 2 }] : { foo: number; }[] +>{ foo: 1, bar: '' } : { foo: number; bar: string; } +>foo : number +>bar : string +>{ foo: 2 } : { foo: number; } +>foo : number + +var i = [{ foo: 1, bar: '' }, { foo: '' }]; // {}[] +>i : ({ foo: number; bar: string; } | { foo: string; })[] +>[{ foo: 1, bar: '' }, { foo: '' }] : ({ foo: number; bar: string; } | { foo: string; })[] +>{ foo: 1, bar: '' } : { foo: number; bar: string; } +>foo : number +>bar : string +>{ foo: '' } : { foo: string; } +>foo : string + +var j = [() => 1, () => '']; // {}[] +>j : ((() => number) | (() => string))[] +>[() => 1, () => ''] : ((() => number) | (() => string))[] +>() => 1 : () => number +>() => '' : () => string + +var k = [() => 1, () => 1]; // { (): number }[] +>k : (() => number)[] +>[() => 1, () => 1] : (() => number)[] +>() => 1 : () => number +>() => 1 : () => number + +var l = [() => 1, () => null]; // { (): any }[] +>l : (() => any)[] +>[() => 1, () => null] : (() => any)[] +>() => 1 : () => number +>() => null : () => any + +var m = [() => 1, () => '', () => null]; // { (): any }[] +>m : (() => any)[] +>[() => 1, () => '', () => null] : (() => any)[] +>() => 1 : () => number +>() => '' : () => string +>() => null : () => any + +var n = [[() => 1], [() => '']]; // {}[] +>n : ((() => number)[] | (() => string)[])[] +>[[() => 1], [() => '']] : ((() => number)[] | (() => string)[])[] +>[() => 1] : (() => number)[] +>() => 1 : () => number +>[() => ''] : (() => string)[] +>() => '' : () => string + +class Base { foo: string; } +>Base : Base +>foo : string + +class Derived extends Base { bar: string; } +>Derived : Derived +>Base : Base +>bar : string + +class Derived2 extends Base { baz: string; } +>Derived2 : Derived2 +>Base : Base +>baz : string + +var base: Base; +>base : Base +>Base : Base + +var derived: Derived; +>derived : Derived +>Derived : Derived + +var derived2: Derived2; +>derived2 : Derived2 +>Derived2 : Derived2 + +module Derived { +>Derived : typeof Derived + + var h = [{ foo: base, basear: derived }, { foo: base }]; // {foo: Base}[] +>h : { foo: Base; }[] +>[{ foo: base, basear: derived }, { foo: base }] : { foo: Base; }[] +>{ foo: base, basear: derived } : { foo: Base; basear: Derived; } +>foo : Base +>base : Base +>basear : Derived +>derived : Derived +>{ foo: base } : { foo: Base; } +>foo : Base +>base : Base + + var i = [{ foo: base, basear: derived }, { foo: derived }]; // {foo: Derived}[] +>i : ({ foo: Base; basear: Derived; } | { foo: Derived; })[] +>[{ foo: base, basear: derived }, { foo: derived }] : ({ foo: Base; basear: Derived; } | { foo: Derived; })[] +>{ foo: base, basear: derived } : { foo: Base; basear: Derived; } +>foo : Base +>base : Base +>basear : Derived +>derived : Derived +>{ foo: derived } : { foo: Derived; } +>foo : Derived +>derived : Derived + + var j = [() => base, () => derived]; // { {}: Base } +>j : (() => Base)[] +>[() => base, () => derived] : (() => Base)[] +>() => base : () => Base +>base : Base +>() => derived : () => Derived +>derived : Derived + + var k = [() => base, () => 1]; // {}[]~ +>k : ((() => Base) | (() => number))[] +>[() => base, () => 1] : ((() => Base) | (() => number))[] +>() => base : () => Base +>base : Base +>() => 1 : () => number + + var l = [() => base, () => null]; // { (): any }[] +>l : (() => any)[] +>[() => base, () => null] : (() => any)[] +>() => base : () => Base +>base : Base +>() => null : () => any + + var m = [() => base, () => derived, () => null]; // { (): any }[] +>m : (() => any)[] +>[() => base, () => derived, () => null] : (() => any)[] +>() => base : () => Base +>base : Base +>() => derived : () => Derived +>derived : Derived +>() => null : () => any + + var n = [[() => base], [() => derived]]; // { (): Base }[] +>n : (() => Base)[][] +>[[() => base], [() => derived]] : (() => Base)[][] +>[() => base] : (() => Base)[] +>() => base : () => Base +>base : Base +>[() => derived] : (() => Derived)[] +>() => derived : () => Derived +>derived : Derived + + var o = [derived, derived2]; // {}[] +>o : (Derived | Derived2)[] +>[derived, derived2] : (Derived | Derived2)[] +>derived : Derived +>derived2 : Derived2 + + var p = [derived, derived2, base]; // Base[] +>p : Base[] +>[derived, derived2, base] : Base[] +>derived : Derived +>derived2 : Derived2 +>base : Base + + var q = [[() => derived2], [() => derived]]; // {}[] +>q : ((() => Derived2)[] | (() => Derived)[])[] +>[[() => derived2], [() => derived]] : ((() => Derived2)[] | (() => Derived)[])[] +>[() => derived2] : (() => Derived2)[] +>() => derived2 : () => Derived2 +>derived2 : Derived2 +>[() => derived] : (() => Derived)[] +>() => derived : () => Derived +>derived : Derived +} + +module WithContextualType { +>WithContextualType : typeof WithContextualType + + // no errors + var a: Base[] = [derived, derived2]; +>a : Base[] +>Base : Base +>[derived, derived2] : (Derived | Derived2)[] +>derived : Derived +>derived2 : Derived2 + + var b: Derived[] = [null]; +>b : Derived[] +>Derived : Derived +>[null] : null[] + + var c: Derived[] = []; +>c : Derived[] +>Derived : Derived +>[] : undefined[] + + var d: { (): Base }[] = [() => derived, () => derived2]; +>d : (() => Base)[] +>Base : Base +>[() => derived, () => derived2] : ((() => Derived) | (() => Derived2))[] +>() => derived : () => Derived +>derived : Derived +>() => derived2 : () => Derived2 +>derived2 : Derived2 +} + +function foo(t: T, u: U) { +>foo : (t: T, u: U) => void +>T : T +>U : U +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : (T | U)[] +>[t, u] : (T | U)[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : (number | T)[] +>[t, 1] : (number | T)[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : ((() => T) | (() => U))[] +>[() => t, () => u] : ((() => T) | (() => U))[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : (() => any)[] +>[() => t, () => u, () => null] : (() => any)[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any +} + +function foo2(t: T, u: U) { +>foo2 : (t: T, u: U) => void +>T : T +>Base : Base +>U : U +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : (T | U)[] +>[t, u] : (T | U)[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : (number | T)[] +>[t, 1] : (number | T)[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : ((() => T) | (() => U))[] +>[() => t, () => u] : ((() => T) | (() => U))[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : (() => any)[] +>[() => t, () => u, () => null] : (() => any)[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : (Derived | T)[] +>[t, derived] : (Derived | T)[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : Derived[] +>[u, derived] : Derived[] +>u : U +>derived : Derived +} + +function foo3(t: T, u: U) { +>foo3 : (t: T, u: U) => void +>T : T +>Derived : Derived +>U : U +>Derived : Derived +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // {}[] +>c : (T | U)[] +>[t, u] : (T | U)[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : (number | T)[] +>[t, 1] : (number | T)[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : ((() => T) | (() => U))[] +>[() => t, () => u] : ((() => T) | (() => U))[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : (() => any)[] +>[() => t, () => u, () => null] : (() => any)[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : Derived[] +>[t, derived] : Derived[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : Derived[] +>[u, derived] : Derived[] +>u : U +>derived : Derived +} + +function foo4(t: T, u: U) { +>foo4 : (t: T, u: U) => void +>T : T +>Base : Base +>U : U +>Base : Base +>t : T +>T : T +>u : U +>U : U + + var a = [t, t]; // T[] +>a : T[] +>[t, t] : T[] +>t : T +>t : T + + var b = [t, null]; // T[] +>b : T[] +>[t, null] : T[] +>t : T + + var c = [t, u]; // BUG 821629 +>c : (T | U)[] +>[t, u] : (T | U)[] +>t : T +>u : U + + var d = [t, 1]; // {}[] +>d : (number | T)[] +>[t, 1] : (number | T)[] +>t : T + + var e = [() => t, () => u]; // {}[] +>e : ((() => T) | (() => U))[] +>[() => t, () => u] : ((() => T) | (() => U))[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U + + var f = [() => t, () => u, () => null]; // { (): any }[] +>f : (() => any)[] +>[() => t, () => u, () => null] : (() => any)[] +>() => t : () => T +>t : T +>() => u : () => U +>u : U +>() => null : () => any + + var g = [t, base]; // Base[] +>g : Base[] +>[t, base] : Base[] +>t : T +>base : Base + + var h = [t, derived]; // Derived[] +>h : (Derived | T)[] +>[t, derived] : (Derived | T)[] +>t : T +>derived : Derived + + var i = [u, base]; // Base[] +>i : Base[] +>[u, base] : Base[] +>u : U +>base : Base + + var j = [u, derived]; // Derived[] +>j : (Derived | U)[] +>[u, derived] : (Derived | U)[] +>u : U +>derived : Derived + + var k: Base[] = [t, u]; +>k : Base[] +>Base : Base +>[t, u] : (T | U)[] +>t : T +>u : U +} + +//function foo3(t: T, u: U) { +// var a = [t, t]; // T[] +// var b = [t, null]; // T[] +// var c = [t, u]; // {}[] +// var d = [t, 1]; // {}[] +// var e = [() => t, () => u]; // {}[] +// var f = [() => t, () => u, () => null]; // { (): any }[] + +// var g = [t, base]; // Base[] +// var h = [t, derived]; // Derived[] +// var i = [u, base]; // Base[] +// var j = [u, derived]; // Derived[] +//} + +//function foo4(t: T, u: U) { +// var a = [t, t]; // T[] +// var b = [t, null]; // T[] +// var c = [t, u]; // BUG 821629 +// var d = [t, 1]; // {}[] +// var e = [() => t, () => u]; // {}[] +// var f = [() => t, () => u, () => null]; // { (): any }[] + +// var g = [t, base]; // Base[] +// var h = [t, derived]; // Derived[] +// var i = [u, base]; // Base[] +// var j = [u, derived]; // Derived[] + +// var k: Base[] = [t, u]; +//} diff --git a/tests/baselines/reference/logicalOrOperatorWithEveryType.types.pull b/tests/baselines/reference/logicalOrOperatorWithEveryType.types.pull new file mode 100644 index 00000000000..e0d75463414 --- /dev/null +++ b/tests/baselines/reference/logicalOrOperatorWithEveryType.types.pull @@ -0,0 +1,618 @@ +=== tests/cases/conformance/expressions/binaryOperators/logicalOrOperator/logicalOrOperatorWithEveryType.ts === +// The || operator permits the operands to be of any type. +// If the || expression is not contextually typed, the right operand is contextually typed +// by the type of the left operand and the result is of the best common type of the two +// operand types. + +enum E { a, b, c } +>E : E +>a : E +>b : E +>c : E + +var a1: any; +>a1 : any + +var a2: boolean; +>a2 : boolean + +var a3: number +>a3 : number + +var a4: string; +>a4 : string + +var a5: void; +>a5 : void + +var a6: E; +>a6 : E +>E : E + +var a7: {a: string}; +>a7 : { a: string; } +>a : string + +var a8: string[]; +>a8 : string[] + +var ra1 = a1 || a1; // any || any is any +>ra1 : any +>a1 || a1 : any +>a1 : any +>a1 : any + +var ra2 = a2 || a1; // boolean || any is any +>ra2 : any +>a2 || a1 : any +>a2 : boolean +>a1 : any + +var ra3 = a3 || a1; // number || any is any +>ra3 : any +>a3 || a1 : any +>a3 : number +>a1 : any + +var ra4 = a4 || a1; // string || any is any +>ra4 : any +>a4 || a1 : any +>a4 : string +>a1 : any + +var ra5 = a5 || a1; // void || any is any +>ra5 : any +>a5 || a1 : any +>a5 : void +>a1 : any + +var ra6 = a6 || a1; // enum || any is any +>ra6 : any +>a6 || a1 : any +>a6 : E +>a1 : any + +var ra7 = a7 || a1; // object || any is any +>ra7 : any +>a7 || a1 : any +>a7 : { a: string; } +>a1 : any + +var ra8 = a8 || a1; // array || any is any +>ra8 : any +>a8 || a1 : any +>a8 : string[] +>a1 : any + +var ra9 = null || a1; // null || any is any +>ra9 : any +>null || a1 : any +>a1 : any + +var ra10 = undefined || a1; // undefined || any is any +>ra10 : any +>undefined || a1 : any +>undefined : undefined +>a1 : any + +var rb1 = a1 || a2; // any || boolean is any +>rb1 : any +>a1 || a2 : any +>a1 : any +>a2 : boolean + +var rb2 = a2 || a2; // boolean || boolean is boolean +>rb2 : boolean +>a2 || a2 : boolean +>a2 : boolean +>a2 : boolean + +var rb3 = a3 || a2; // number || boolean is number | boolean +>rb3 : number | boolean +>a3 || a2 : number | boolean +>a3 : number +>a2 : boolean + +var rb4 = a4 || a2; // string || boolean is string | boolean +>rb4 : string | boolean +>a4 || a2 : string | boolean +>a4 : string +>a2 : boolean + +var rb5 = a5 || a2; // void || boolean is void | boolean +>rb5 : boolean | void +>a5 || a2 : boolean | void +>a5 : void +>a2 : boolean + +var rb6 = a6 || a2; // enum || boolean is E | boolean +>rb6 : boolean | E +>a6 || a2 : boolean | E +>a6 : E +>a2 : boolean + +var rb7 = a7 || a2; // object || boolean is object | boolean +>rb7 : boolean | { a: string; } +>a7 || a2 : boolean | { a: string; } +>a7 : { a: string; } +>a2 : boolean + +var rb8 = a8 || a2; // array || boolean is array | boolean +>rb8 : boolean | string[] +>a8 || a2 : boolean | string[] +>a8 : string[] +>a2 : boolean + +var rb9 = null || a2; // null || boolean is boolean +>rb9 : boolean +>null || a2 : boolean +>a2 : boolean + +var rb10= undefined || a2; // undefined || boolean is boolean +>rb10 : boolean +>undefined || a2 : boolean +>undefined : undefined +>a2 : boolean + +var rc1 = a1 || a3; // any || number is any +>rc1 : any +>a1 || a3 : any +>a1 : any +>a3 : number + +var rc2 = a2 || a3; // boolean || number is boolean | number +>rc2 : number | boolean +>a2 || a3 : number | boolean +>a2 : boolean +>a3 : number + +var rc3 = a3 || a3; // number || number is number +>rc3 : number +>a3 || a3 : number +>a3 : number +>a3 : number + +var rc4 = a4 || a3; // string || number is string | number +>rc4 : string | number +>a4 || a3 : string | number +>a4 : string +>a3 : number + +var rc5 = a5 || a3; // void || number is void | number +>rc5 : number | void +>a5 || a3 : number | void +>a5 : void +>a3 : number + +var rc6 = a6 || a3; // enum || number is number +>rc6 : number +>a6 || a3 : number +>a6 : E +>a3 : number + +var rc7 = a7 || a3; // object || number is object | number +>rc7 : number | { a: string; } +>a7 || a3 : number | { a: string; } +>a7 : { a: string; } +>a3 : number + +var rc8 = a8 || a3; // array || number is array | number +>rc8 : number | string[] +>a8 || a3 : number | string[] +>a8 : string[] +>a3 : number + +var rc9 = null || a3; // null || number is number +>rc9 : number +>null || a3 : number +>a3 : number + +var rc10 = undefined || a3; // undefined || number is number +>rc10 : number +>undefined || a3 : number +>undefined : undefined +>a3 : number + +var rd1 = a1 || a4; // any || string is any +>rd1 : any +>a1 || a4 : any +>a1 : any +>a4 : string + +var rd2 = a2 || a4; // boolean || string is boolean | string +>rd2 : string | boolean +>a2 || a4 : string | boolean +>a2 : boolean +>a4 : string + +var rd3 = a3 || a4; // number || string is number | string +>rd3 : string | number +>a3 || a4 : string | number +>a3 : number +>a4 : string + +var rd4 = a4 || a4; // string || string is string +>rd4 : string +>a4 || a4 : string +>a4 : string +>a4 : string + +var rd5 = a5 || a4; // void || string is void | string +>rd5 : string | void +>a5 || a4 : string | void +>a5 : void +>a4 : string + +var rd6 = a6 || a4; // enum || string is enum | string +>rd6 : string | E +>a6 || a4 : string | E +>a6 : E +>a4 : string + +var rd7 = a7 || a4; // object || string is object | string +>rd7 : string | { a: string; } +>a7 || a4 : string | { a: string; } +>a7 : { a: string; } +>a4 : string + +var rd8 = a8 || a4; // array || string is array | string +>rd8 : string | string[] +>a8 || a4 : string | string[] +>a8 : string[] +>a4 : string + +var rd9 = null || a4; // null || string is string +>rd9 : string +>null || a4 : string +>a4 : string + +var rd10 = undefined || a4; // undefined || string is string +>rd10 : string +>undefined || a4 : string +>undefined : undefined +>a4 : string + +var re1 = a1 || a5; // any || void is any +>re1 : any +>a1 || a5 : any +>a1 : any +>a5 : void + +var re2 = a2 || a5; // boolean || void is boolean | void +>re2 : boolean | void +>a2 || a5 : boolean | void +>a2 : boolean +>a5 : void + +var re3 = a3 || a5; // number || void is number | void +>re3 : number | void +>a3 || a5 : number | void +>a3 : number +>a5 : void + +var re4 = a4 || a5; // string || void is string | void +>re4 : string | void +>a4 || a5 : string | void +>a4 : string +>a5 : void + +var re5 = a5 || a5; // void || void is void +>re5 : void +>a5 || a5 : void +>a5 : void +>a5 : void + +var re6 = a6 || a5; // enum || void is enum | void +>re6 : void | E +>a6 || a5 : void | E +>a6 : E +>a5 : void + +var re7 = a7 || a5; // object || void is object | void +>re7 : void | { a: string; } +>a7 || a5 : void | { a: string; } +>a7 : { a: string; } +>a5 : void + +var re8 = a8 || a5; // array || void is array | void +>re8 : void | string[] +>a8 || a5 : void | string[] +>a8 : string[] +>a5 : void + +var re9 = null || a5; // null || void is void +>re9 : void +>null || a5 : void +>a5 : void + +var re10 = undefined || a5; // undefined || void is void +>re10 : void +>undefined || a5 : void +>undefined : undefined +>a5 : void + +var rg1 = a1 || a6; // any || enum is any +>rg1 : any +>a1 || a6 : any +>a1 : any +>a6 : E + +var rg2 = a2 || a6; // boolean || enum is boolean | enum +>rg2 : boolean | E +>a2 || a6 : boolean | E +>a2 : boolean +>a6 : E + +var rg3 = a3 || a6; // number || enum is number +>rg3 : number +>a3 || a6 : number +>a3 : number +>a6 : E + +var rg4 = a4 || a6; // string || enum is string | enum +>rg4 : string | E +>a4 || a6 : string | E +>a4 : string +>a6 : E + +var rg5 = a5 || a6; // void || enum is void | enum +>rg5 : void | E +>a5 || a6 : void | E +>a5 : void +>a6 : E + +var rg6 = a6 || a6; // enum || enum is E +>rg6 : E +>a6 || a6 : E +>a6 : E +>a6 : E + +var rg7 = a7 || a6; // object || enum is object | enum +>rg7 : E | { a: string; } +>a7 || a6 : E | { a: string; } +>a7 : { a: string; } +>a6 : E + +var rg8 = a8 || a6; // array || enum is array | enum +>rg8 : E | string[] +>a8 || a6 : E | string[] +>a8 : string[] +>a6 : E + +var rg9 = null || a6; // null || enum is E +>rg9 : E +>null || a6 : E +>a6 : E + +var rg10 = undefined || a6; // undefined || enum is E +>rg10 : E +>undefined || a6 : E +>undefined : undefined +>a6 : E + +var rh1 = a1 || a7; // any || object is any +>rh1 : any +>a1 || a7 : any +>a1 : any +>a7 : { a: string; } + +var rh2 = a2 || a7; // boolean || object is boolean | object +>rh2 : boolean | { a: string; } +>a2 || a7 : boolean | { a: string; } +>a2 : boolean +>a7 : { a: string; } + +var rh3 = a3 || a7; // number || object is number | object +>rh3 : number | { a: string; } +>a3 || a7 : number | { a: string; } +>a3 : number +>a7 : { a: string; } + +var rh4 = a4 || a7; // string || object is string | object +>rh4 : string | { a: string; } +>a4 || a7 : string | { a: string; } +>a4 : string +>a7 : { a: string; } + +var rh5 = a5 || a7; // void || object is void | object +>rh5 : void | { a: string; } +>a5 || a7 : void | { a: string; } +>a5 : void +>a7 : { a: string; } + +var rh6 = a6 || a7; // enum || object is enum | object +>rh6 : E | { a: string; } +>a6 || a7 : E | { a: string; } +>a6 : E +>a7 : { a: string; } + +var rh7 = a7 || a7; // object || object is object +>rh7 : { a: string; } +>a7 || a7 : { a: string; } +>a7 : { a: string; } +>a7 : { a: string; } + +var rh8 = a8 || a7; // array || object is array | object +>rh8 : { a: string; } | string[] +>a8 || a7 : { a: string; } | string[] +>a8 : string[] +>a7 : { a: string; } + +var rh9 = null || a7; // null || object is object +>rh9 : { a: string; } +>null || a7 : { a: string; } +>a7 : { a: string; } + +var rh10 = undefined || a7; // undefined || object is object +>rh10 : { a: string; } +>undefined || a7 : { a: string; } +>undefined : undefined +>a7 : { a: string; } + +var ri1 = a1 || a8; // any || array is any +>ri1 : any +>a1 || a8 : any +>a1 : any +>a8 : string[] + +var ri2 = a2 || a8; // boolean || array is boolean | array +>ri2 : boolean | string[] +>a2 || a8 : boolean | string[] +>a2 : boolean +>a8 : string[] + +var ri3 = a3 || a8; // number || array is number | array +>ri3 : number | string[] +>a3 || a8 : number | string[] +>a3 : number +>a8 : string[] + +var ri4 = a4 || a8; // string || array is string | array +>ri4 : string | string[] +>a4 || a8 : string | string[] +>a4 : string +>a8 : string[] + +var ri5 = a5 || a8; // void || array is void | array +>ri5 : void | string[] +>a5 || a8 : void | string[] +>a5 : void +>a8 : string[] + +var ri6 = a6 || a8; // enum || array is enum | array +>ri6 : E | string[] +>a6 || a8 : E | string[] +>a6 : E +>a8 : string[] + +var ri7 = a7 || a8; // object || array is object | array +>ri7 : { a: string; } | string[] +>a7 || a8 : { a: string; } | string[] +>a7 : { a: string; } +>a8 : string[] + +var ri8 = a8 || a8; // array || array is array +>ri8 : string[] +>a8 || a8 : string[] +>a8 : string[] +>a8 : string[] + +var ri9 = null || a8; // null || array is array +>ri9 : string[] +>null || a8 : string[] +>a8 : string[] + +var ri10 = undefined || a8; // undefined || array is array +>ri10 : string[] +>undefined || a8 : string[] +>undefined : undefined +>a8 : string[] + +var rj1 = a1 || null; // any || null is any +>rj1 : any +>a1 || null : any +>a1 : any + +var rj2 = a2 || null; // boolean || null is boolean +>rj2 : boolean +>a2 || null : boolean +>a2 : boolean + +var rj3 = a3 || null; // number || null is number +>rj3 : number +>a3 || null : number +>a3 : number + +var rj4 = a4 || null; // string || null is string +>rj4 : string +>a4 || null : string +>a4 : string + +var rj5 = a5 || null; // void || null is void +>rj5 : void +>a5 || null : void +>a5 : void + +var rj6 = a6 || null; // enum || null is E +>rj6 : E +>a6 || null : E +>a6 : E + +var rj7 = a7 || null; // object || null is object +>rj7 : { a: string; } +>a7 || null : { a: string; } +>a7 : { a: string; } + +var rj8 = a8 || null; // array || null is array +>rj8 : string[] +>a8 || null : string[] +>a8 : string[] + +var rj9 = null || null; // null || null is any +>rj9 : any +>null || null : null + +var rj10 = undefined || null; // undefined || null is any +>rj10 : any +>undefined || null : null +>undefined : undefined + +var rf1 = a1 || undefined; // any || undefined is any +>rf1 : any +>a1 || undefined : any +>a1 : any +>undefined : undefined + +var rf2 = a2 || undefined; // boolean || undefined is boolean +>rf2 : boolean +>a2 || undefined : boolean +>a2 : boolean +>undefined : undefined + +var rf3 = a3 || undefined; // number || undefined is number +>rf3 : number +>a3 || undefined : number +>a3 : number +>undefined : undefined + +var rf4 = a4 || undefined; // string || undefined is string +>rf4 : string +>a4 || undefined : string +>a4 : string +>undefined : undefined + +var rf5 = a5 || undefined; // void || undefined is void +>rf5 : void +>a5 || undefined : void +>a5 : void +>undefined : undefined + +var rf6 = a6 || undefined; // enum || undefined is E +>rf6 : E +>a6 || undefined : E +>a6 : E +>undefined : undefined + +var rf7 = a7 || undefined; // object || undefined is object +>rf7 : { a: string; } +>a7 || undefined : { a: string; } +>a7 : { a: string; } +>undefined : undefined + +var rf8 = a8 || undefined; // array || undefined is array +>rf8 : string[] +>a8 || undefined : string[] +>a8 : string[] +>undefined : undefined + +var rf9 = null || undefined; // null || undefined is any +>rf9 : any +>null || undefined : null +>undefined : undefined + +var rf10 = undefined || undefined; // undefined || undefined is any +>rf10 : any +>undefined || undefined : undefined +>undefined : undefined +>undefined : undefined + diff --git a/tests/baselines/reference/typeGuardsInConditionalExpression.types.pull b/tests/baselines/reference/typeGuardsInConditionalExpression.types.pull new file mode 100644 index 00000000000..147a24b690a --- /dev/null +++ b/tests/baselines/reference/typeGuardsInConditionalExpression.types.pull @@ -0,0 +1,356 @@ +=== tests/cases/conformance/expressions/typeGuards/typeGuardsInConditionalExpression.ts === +// In the true expression of a conditional expression, +// the type of a variable or parameter is narrowed by any type guard in the condition when true, +// provided the true expression contains no assignments to the variable or parameter. +// In the false expression of a conditional expression, +// the type of a variable or parameter is narrowed by any type guard in the condition when false, +// provided the false expression contains no assignments to the variable or parameter. + +function foo(x: number | string) { +>foo : (x: string | number) => number +>x : string | number + + return typeof x === "string" +>typeof x === "string" ? x.length // string : x++ : number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? x.length // string +>x.length : number +>x : string +>length : number + + : x++; // number +>x++ : number +>x : number +} +function foo2(x: number | string) { +>foo2 : (x: string | number) => string | number +>x : string | number + + // x is assigned in the if true branch, the type is not narrowed + return typeof x === "string" +>typeof x === "string" ? (x = 10 && x)// string | number : x : string | number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? (x = 10 && x)// string | number +>(x = 10 && x) : string | number +>x = 10 && x : string | number +>x : string | number +>10 && x : string | number +>x : string | number + + : x; // string | number +>x : string | number +} +function foo3(x: number | string) { +>foo3 : (x: string | number) => string | number +>x : string | number + + // x is assigned in the if false branch, the type is not narrowed + // even though assigned using same type as narrowed expression + return typeof x === "string" +>typeof x === "string" ? (x = "Hello" && x) // string | number : x : string | number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? (x = "Hello" && x) // string | number +>(x = "Hello" && x) : string | number +>x = "Hello" && x : string | number +>x : string | number +>"Hello" && x : string | number +>x : string | number + + : x; // string | number +>x : string | number +} +function foo4(x: number | string) { +>foo4 : (x: string | number) => string | number +>x : string | number + + // false branch updates the variable - so here it is not number + // even though assigned using same type as narrowed expression + return typeof x === "string" +>typeof x === "string" ? x // string | number : (x = 10 && x) : string | number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? x // string | number +>x : string | number + + : (x = 10 && x); // string | number +>(x = 10 && x) : string | number +>x = 10 && x : string | number +>x : string | number +>10 && x : string | number +>x : string | number +} +function foo5(x: number | string) { +>foo5 : (x: string | number) => string | number +>x : string | number + + // false branch updates the variable - so here it is not number + return typeof x === "string" +>typeof x === "string" ? x // string | number : (x = "hello" && x) : string | number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? x // string | number +>x : string | number + + : (x = "hello" && x); // string | number +>(x = "hello" && x) : string | number +>x = "hello" && x : string | number +>x : string | number +>"hello" && x : string | number +>x : string | number +} +function foo6(x: number | string) { +>foo6 : (x: string | number) => string | number +>x : string | number + + // Modify in both branches + return typeof x === "string" +>typeof x === "string" ? (x = 10 && x) // string | number : (x = "hello" && x) : string | number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? (x = 10 && x) // string | number +>(x = 10 && x) : string | number +>x = 10 && x : string | number +>x : string | number +>10 && x : string | number +>x : string | number + + : (x = "hello" && x); // string | number +>(x = "hello" && x) : string | number +>x = "hello" && x : string | number +>x : string | number +>"hello" && x : string | number +>x : string | number +} +function foo7(x: number | string | boolean) { +>foo7 : (x: string | number | boolean) => boolean +>x : string | number | boolean + + return typeof x === "string" +>typeof x === "string" ? x === "hello" // string : typeof x === "boolean" ? x // boolean : x == 10 : boolean +>typeof x === "string" : boolean +>typeof x : string +>x : string | number | boolean + + ? x === "hello" // string +>x === "hello" : boolean +>x : string + + : typeof x === "boolean" +>typeof x === "boolean" ? x // boolean : x == 10 : boolean +>typeof x === "boolean" : boolean +>typeof x : string +>x : number | boolean + + ? x // boolean +>x : boolean + + : x == 10; // number +>x == 10 : boolean +>x : number +} +function foo8(x: number | string | boolean) { +>foo8 : (x: string | number | boolean) => boolean +>x : string | number | boolean + + var b: number | boolean; +>b : number | boolean + + return typeof x === "string" +>typeof x === "string" ? x === "hello" : ((b = x) && // number | boolean (typeof x === "boolean" ? x // boolean : x == 10)) : boolean +>typeof x === "string" : boolean +>typeof x : string +>x : string | number | boolean + + ? x === "hello" +>x === "hello" : boolean +>x : string + + : ((b = x) && // number | boolean +>((b = x) && // number | boolean (typeof x === "boolean" ? x // boolean : x == 10)) : boolean +>(b = x) && // number | boolean (typeof x === "boolean" ? x // boolean : x == 10) : boolean +>(b = x) : number | boolean +>b = x : number | boolean +>b : number | boolean +>x : number | boolean + + (typeof x === "boolean" +>(typeof x === "boolean" ? x // boolean : x == 10) : boolean +>typeof x === "boolean" ? x // boolean : x == 10 : boolean +>typeof x === "boolean" : boolean +>typeof x : string +>x : number | boolean + + ? x // boolean +>x : boolean + + : x == 10)); // number +>x == 10 : boolean +>x : number +} +function foo9(x: number | string) { +>foo9 : (x: string | number) => boolean +>x : string | number + + var y = 10; +>y : number + + // usage of x or assignment to separate variable shouldn't cause narrowing of type to stop + return typeof x === "string" +>typeof x === "string" ? ((y = x.length) && x === "hello") // string : x === 10 : boolean +>typeof x === "string" : boolean +>typeof x : string +>x : string | number + + ? ((y = x.length) && x === "hello") // string +>((y = x.length) && x === "hello") : boolean +>(y = x.length) && x === "hello" : boolean +>(y = x.length) : number +>y = x.length : number +>y : number +>x.length : number +>x : string +>length : number +>x === "hello" : boolean +>x : string + + : x === 10; // number +>x === 10 : boolean +>x : number +} +function foo10(x: number | string | boolean) { +>foo10 : (x: string | number | boolean) => string +>x : string | number | boolean + + // Mixing typeguards + var b: boolean | number; +>b : number | boolean + + return typeof x === "string" +>typeof x === "string" ? x // string : ((b = x) // x is number | boolean && typeof x === "number" && x.toString()) : string +>typeof x === "string" : boolean +>typeof x : string +>x : string | number | boolean + + ? x // string +>x : string + + : ((b = x) // x is number | boolean +>((b = x) // x is number | boolean && typeof x === "number" && x.toString()) : string +>(b = x) // x is number | boolean && typeof x === "number" && x.toString() : string +>(b = x) // x is number | boolean && typeof x === "number" : boolean +>(b = x) : number | boolean +>b = x : number | boolean +>b : number | boolean +>x : number | boolean + + && typeof x === "number" +>typeof x === "number" : boolean +>typeof x : string +>x : number | boolean + + && x.toString()); // x is number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : number +>toString : (radix?: number) => string +} +function foo11(x: number | string | boolean) { +>foo11 : (x: string | number | boolean) => string | number | boolean +>x : string | number | boolean + + // Mixing typeguards + // Assigning value to x deep inside another guard stops narrowing of type too + var b: number | boolean | string; +>b : string | number | boolean + + return typeof x === "string" +>typeof x === "string" ? x // number | boolean | string - changed in the false branch : ((b = x) // x is number | boolean | string - because the assignment changed it && typeof x === "number" && (x = 10) // assignment to x && x) : string | number | boolean +>typeof x === "string" : boolean +>typeof x : string +>x : string | number | boolean + + ? x // number | boolean | string - changed in the false branch +>x : string | number | boolean + + : ((b = x) // x is number | boolean | string - because the assignment changed it +>((b = x) // x is number | boolean | string - because the assignment changed it && typeof x === "number" && (x = 10) // assignment to x && x) : string | number | boolean +>(b = x) // x is number | boolean | string - because the assignment changed it && typeof x === "number" && (x = 10) // assignment to x && x : string | number | boolean +>(b = x) // x is number | boolean | string - because the assignment changed it && typeof x === "number" && (x = 10) : number +>(b = x) // x is number | boolean | string - because the assignment changed it && typeof x === "number" : boolean +>(b = x) : string | number | boolean +>b = x : string | number | boolean +>b : string | number | boolean +>x : string | number | boolean + + && typeof x === "number" +>typeof x === "number" : boolean +>typeof x : string +>x : string | number | boolean + + && (x = 10) // assignment to x +>(x = 10) : number +>x = 10 : number +>x : string | number | boolean + + && x); // x is number | boolean | string +>x : string | number | boolean +} +function foo12(x: number | string | boolean) { +>foo12 : (x: string | number | boolean) => number +>x : string | number | boolean + + // Mixing typeguards + // Assigning value to x in outer guard shouldn't stop narrowing in the inner expression + var b: number | boolean | string; +>b : string | number | boolean + + return typeof x === "string" +>typeof x === "string" ? (x = 10 && x.toString().length) // number | boolean | string - changed here : ((b = x) // x is number | boolean | string - changed in true branch && typeof x === "number" && x) : number +>typeof x === "string" : boolean +>typeof x : string +>x : string | number | boolean + + ? (x = 10 && x.toString().length) // number | boolean | string - changed here +>(x = 10 && x.toString().length) : number +>x = 10 && x.toString().length : number +>x : string | number | boolean +>10 && x.toString().length : number +>x.toString().length : number +>x.toString() : string +>x.toString : (radix?: number) => string +>x : string | number | boolean +>toString : (radix?: number) => string +>length : number + + : ((b = x) // x is number | boolean | string - changed in true branch +>((b = x) // x is number | boolean | string - changed in true branch && typeof x === "number" && x) : number +>(b = x) // x is number | boolean | string - changed in true branch && typeof x === "number" && x : number +>(b = x) // x is number | boolean | string - changed in true branch && typeof x === "number" : boolean +>(b = x) : string | number | boolean +>b = x : string | number | boolean +>b : string | number | boolean +>x : string | number | boolean + + && typeof x === "number" +>typeof x === "number" : boolean +>typeof x : string +>x : string | number | boolean + + && x); // x is number +>x : number +} From bb307f81639b2bc29a86aef5f92492e38e88ba67 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 16:53:14 -0800 Subject: [PATCH 06/33] Simplify the API for emitting code from the Program instance. --- src/compiler/emitter.ts | 3 +- src/compiler/program.ts | 24 +++++-- src/compiler/tsc.ts | 2 +- src/compiler/types.ts | 24 +++++-- src/compiler/utilities.ts | 17 +---- src/harness/fourslash.ts | 2 +- src/harness/harness.ts | 2 +- src/harness/projectsRunner.ts | 2 +- src/services/services.ts | 7 +- .../baselines/reference/APISample_compile.js | 24 +++++-- .../reference/APISample_compile.types | 64 +++++++++++-------- tests/baselines/reference/APISample_linter.js | 20 ++++-- .../reference/APISample_linter.types | 56 ++++++++++------ .../reference/APISample_transform.js | 24 +++++-- .../reference/APISample_transform.types | 64 +++++++++++-------- .../baselines/reference/APISample_watcher.js | 20 ++++-- .../reference/APISample_watcher.types | 56 ++++++++++------ tests/cases/compiler/APISample_compile.ts | 2 +- tests/cases/compiler/APISample_transform.ts | 2 +- 19 files changed, 263 insertions(+), 152 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index a4521977802..cb0b8faab5b 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1504,8 +1504,9 @@ module ts { return diagnostics; } + // @internal // 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, host: EmitHost, targetSourceFile?: SourceFile): EmitResult { + export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile): EmitResult { var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || ScriptTarget.ES3; var sourceMapDataList: SourceMapData[] = compilerOptions.sourceMap ? [] : undefined; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index ddd9cb4ed3a..a6ed7fb51ab 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -90,7 +90,6 @@ module ts { var diagnosticsProducingTypeChecker: TypeChecker; var noDiagnosticsTypeChecker: TypeChecker; - var emitHost: EmitHost; program = { getSourceFile: getSourceFile, @@ -105,7 +104,7 @@ module ts { getTypeChecker, getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: () => commonSourceDirectory, - emitFiles: invokeEmitter, + emit, isEmitBlocked, getCurrentDirectory: host.getCurrentDirectory, getEmitResolver: () => getDiagnosticsProducingTypeChecker().getEmitResolver(), @@ -116,10 +115,22 @@ module ts { }; return program; - function getEmitHost() { - return emitHost || (emitHost = createEmitHostFromProgram(program)); + function getEmitHost(writeFileCallback?: WriteFileCallback) { + var compilerHost = program.getCompilerHost(); + return { + getCanonicalFileName: compilerHost.getCanonicalFileName, + getCommonSourceDirectory: program.getCommonSourceDirectory, + getCompilerOptions: program.getCompilerOptions, + getCurrentDirectory: compilerHost.getCurrentDirectory, + getNewLine: compilerHost.getNewLine, + getSourceFile: program.getSourceFile, + getSourceFiles: program.getSourceFiles, + isEmitBlocked: program.isEmitBlocked, + writeFile: writeFileCallback || compilerHost.writeFile, + }; } + function isEmitBlocked(sourceFile?: SourceFile): boolean { if (options.noEmitOnError) { return getDiagnostics(sourceFile).length !== 0 || getTypeCheckerDiagnostics(sourceFile).length !== 0; @@ -143,9 +154,10 @@ module ts { return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile); } - function invokeEmitter(targetSourceFile?: SourceFile) { + function emit(targetSourceFile?: SourceFile, writeFileCallback?: WriteFileCallback) { var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(); - return emitFiles(resolver, getEmitHost(), targetSourceFile); + var host = getEmitHost(writeFileCallback); + return emitFiles(resolver, host, targetSourceFile); } function getSourceFile(fileName: string) { diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 2c31c008b21..05f2305acf7 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -346,7 +346,7 @@ module ts { } else { var emitStart = new Date().getTime(); - var emitOutput = program.emitFiles(); + var emitOutput = program.emit(); 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 58898605959..b04a5944bfc 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -927,10 +927,27 @@ module ts { getCurrentDirectory(): string; } + export interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } + export interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; - getEmitResolver(): EmitResolver; + + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + + isEmitBlocked(sourceFile?: SourceFile): boolean; // These will merge with the below diagnostics function in a followup checkin. getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -951,9 +968,6 @@ module ts { getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; - // For testing purposes only. Should not be used by any other consumers (including the // language service). /* @internal */ getDiagnosticsProducingTypeChecker(): TypeChecker; @@ -1671,7 +1685,7 @@ module ts { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken? (): CancellationToken; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 69c64ba4880..9df23b22dd0 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -31,7 +31,7 @@ module ts { getCanonicalFileName(fileName: string): string; getNewLine(): string; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; } // Pool writers to avoid needing to allocate them for every symbol we write. @@ -843,21 +843,6 @@ module ts { return false; } - export function createEmitHostFromProgram(program: Program): EmitHost { - var compilerHost = program.getCompilerHost(); - return { - getCanonicalFileName: compilerHost.getCanonicalFileName, - getCommonSourceDirectory: program.getCommonSourceDirectory, - getCompilerOptions: program.getCompilerOptions, - getCurrentDirectory: compilerHost.getCurrentDirectory, - getNewLine: compilerHost.getNewLine, - getSourceFile: program.getSourceFile, - getSourceFiles: program.getSourceFiles, - isEmitBlocked: program.isEmitBlocked, - writeFile: compilerHost.writeFile, - }; - } - export function textSpanEnd(span: TextSpan) { return span.start + span.length } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index b3c9c118e97..dd55e702d09 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2216,7 +2216,7 @@ module FourSlash { if (errors.length > 0) { throw new Error('Error compiling ' + fileName + ': ' + errors.map(e => e.messageText).join('\r\n')); } - program.emitFiles(); + program.emit(); 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 1b7a7b31dbd..7b68ac80efa 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1086,7 +1086,7 @@ module Harness { // only emit if there weren't parse errors var emitResult: ts.EmitResult; if (!isEmitBlocked) { - emitResult = program.emitFiles(); + emitResult = program.emit(); } var errors: HarnessDiagnostic[] = []; diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 8daa4a9afdc..327ebc3520e 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -131,7 +131,7 @@ class ProjectRunner extends RunnerBase { var sourceMapData: ts.SourceMapData[] = null; if (!errors.length) { errors = program.getTypeCheckerDiagnostics(); - var emitResult = program.emitFiles(); + var emitResult = program.emit(); errors = ts.concatenate(errors, emitResult.diagnostics); sourceMapData = emitResult.sourceMaps; diff --git a/src/services/services.ts b/src/services/services.ts index 771263919e5..7311e5f7596 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4664,12 +4664,7 @@ module ts { }); } - // Get an emit host from our program, but override the writeFile functionality to - // call our local writer function. - var emitHost = createEmitHostFromProgram(program); - emitHost.writeFile = writeFile; - - var emitOutput = emitFiles(program.getEmitResolver(), emitHost, sourceFile); + var emitOutput = program.emit(sourceFile, writeFile); return { outputFiles, diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index fd741d793b4..c20c601823f 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -16,7 +16,7 @@ import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var result = program.emitFiles(); + var result = program.emit(); var allDiagnostics = program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) @@ -737,10 +737,24 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; - getEmitResolver(): EmitResolver; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -748,8 +762,6 @@ declare module "typescript" { getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -1338,7 +1350,7 @@ declare module "typescript" { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; @@ -1916,7 +1928,7 @@ var ts = require("typescript"); function compile(fileNames, options) { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var result = program.emitFiles(); + var result = program.emit(); var allDiagnostics = program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(result.diagnostics); allDiagnostics.forEach(function (diagnostic) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 5aeb7f096e1..469dc8098aa 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -40,12 +40,12 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >options : ts.CompilerOptions >host : ts.CompilerHost - var result = program.emitFiles(); + var result = program.emit(); >result : ts.EmitResult ->program.emitFiles() : ts.EmitResult ->program.emitFiles : (targetSourceFile?: ts.SourceFile) => ts.EmitResult +>program.emit() : ts.EmitResult +>program.emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult >program : ts.Program ->emitFiles : (targetSourceFile?: ts.SourceFile) => ts.EmitResult +>emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult var allDiagnostics = program.getDiagnostics() >allDiagnostics : ts.Diagnostic[] @@ -2240,6 +2240,16 @@ declare module "typescript" { getCurrentDirectory(): string; >getCurrentDirectory : () => string + } + interface WriteFileCallback { +>WriteFileCallback : WriteFileCallback + + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; +>fileName : string +>data : string +>writeByteOrderMark : boolean +>onError : (message: string) => void +>message : string } interface Program extends ScriptReferenceHost { >Program : Program @@ -2253,9 +2263,28 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; +>emit : (targetSourceFile?: SourceFile, writeFile?: WriteFileCallback) => EmitResult +>targetSourceFile : SourceFile +>SourceFile : SourceFile +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback +>EmitResult : EmitResult + + isEmitBlocked(sourceFile?: SourceFile): boolean; +>isEmitBlocked : (sourceFile?: SourceFile) => boolean +>sourceFile : SourceFile +>SourceFile : SourceFile getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] @@ -2289,17 +2318,6 @@ declare module "typescript" { getCommonSourceDirectory(): string; >getCommonSourceDirectory : () => string - - emitFiles(targetSourceFile?: SourceFile): EmitResult; ->emitFiles : (targetSourceFile?: SourceFile) => EmitResult ->targetSourceFile : SourceFile ->SourceFile : SourceFile ->EmitResult : EmitResult - - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile } interface SourceMapSpan { >SourceMapSpan : SourceMapSpan @@ -4255,13 +4273,9 @@ declare module "typescript" { >getCancellationToken : () => CancellationToken >CancellationToken : CancellationToken - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; ->writeFile : (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) => void ->fileName : string ->data : string ->writeByteOrderMark : boolean ->onError : (message: string) => void ->message : string + writeFile: WriteFileCallback; +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback getCurrentDirectory(): string; >getCurrentDirectory : () => string diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index b32f7036038..eed54d13542 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -767,10 +767,24 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; - getEmitResolver(): EmitResolver; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -778,8 +792,6 @@ declare module "typescript" { getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -1368,7 +1380,7 @@ declare module "typescript" { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 386830d2c1c..3af13c6b068 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2378,6 +2378,16 @@ declare module "typescript" { getCurrentDirectory(): string; >getCurrentDirectory : () => string + } + interface WriteFileCallback { +>WriteFileCallback : WriteFileCallback + + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; +>fileName : string +>data : string +>writeByteOrderMark : boolean +>onError : (message: string) => void +>message : string } interface Program extends ScriptReferenceHost { >Program : Program @@ -2391,9 +2401,28 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; +>emit : (targetSourceFile?: SourceFile, writeFile?: WriteFileCallback) => EmitResult +>targetSourceFile : SourceFile +>SourceFile : SourceFile +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback +>EmitResult : EmitResult + + isEmitBlocked(sourceFile?: SourceFile): boolean; +>isEmitBlocked : (sourceFile?: SourceFile) => boolean +>sourceFile : SourceFile +>SourceFile : SourceFile getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] @@ -2427,17 +2456,6 @@ declare module "typescript" { getCommonSourceDirectory(): string; >getCommonSourceDirectory : () => string - - emitFiles(targetSourceFile?: SourceFile): EmitResult; ->emitFiles : (targetSourceFile?: SourceFile) => EmitResult ->targetSourceFile : SourceFile ->SourceFile : SourceFile ->EmitResult : EmitResult - - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile } interface SourceMapSpan { >SourceMapSpan : SourceMapSpan @@ -4393,13 +4411,9 @@ declare module "typescript" { >getCancellationToken : () => CancellationToken >CancellationToken : CancellationToken - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; ->writeFile : (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) => void ->fileName : string ->data : string ->writeByteOrderMark : boolean ->onError : (message: string) => void ->message : string + writeFile: WriteFileCallback; +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback getCurrentDirectory(): string; >getCurrentDirectory : () => string diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index cdccf5e83f4..59976015fb4 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -51,7 +51,7 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { // Type check and get semantic errors errors = program.getTypeCheckerDiagnostics(); // Generate output - program.emitFiles(); + program.emit(); } return { outputs: outputs, @@ -767,10 +767,24 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; - getEmitResolver(): EmitResolver; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -778,8 +792,6 @@ declare module "typescript" { getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -1368,7 +1380,7 @@ declare module "typescript" { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; @@ -1975,7 +1987,7 @@ function transform(contents, compilerOptions) { // Type check and get semantic errors errors = program.getTypeCheckerDiagnostics(); // Generate output - program.emitFiles(); + program.emit(); } return { outputs: outputs, diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index e689bba7527..e4f0e56910a 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -171,11 +171,11 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { >getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] // Generate output - program.emitFiles(); ->program.emitFiles() : ts.EmitResult ->program.emitFiles : (targetSourceFile?: ts.SourceFile) => ts.EmitResult + program.emit(); +>program.emit() : ts.EmitResult +>program.emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult >program : ts.Program ->emitFiles : (targetSourceFile?: ts.SourceFile) => ts.EmitResult +>emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult } return { >{ outputs: outputs, errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) } : { outputs: any[]; errors: string[]; } @@ -2319,6 +2319,16 @@ declare module "typescript" { getCurrentDirectory(): string; >getCurrentDirectory : () => string + } + interface WriteFileCallback { +>WriteFileCallback : WriteFileCallback + + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; +>fileName : string +>data : string +>writeByteOrderMark : boolean +>onError : (message: string) => void +>message : string } interface Program extends ScriptReferenceHost { >Program : Program @@ -2332,9 +2342,28 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; +>emit : (targetSourceFile?: SourceFile, writeFile?: WriteFileCallback) => EmitResult +>targetSourceFile : SourceFile +>SourceFile : SourceFile +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback +>EmitResult : EmitResult + + isEmitBlocked(sourceFile?: SourceFile): boolean; +>isEmitBlocked : (sourceFile?: SourceFile) => boolean +>sourceFile : SourceFile +>SourceFile : SourceFile getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] @@ -2368,17 +2397,6 @@ declare module "typescript" { getCommonSourceDirectory(): string; >getCommonSourceDirectory : () => string - - emitFiles(targetSourceFile?: SourceFile): EmitResult; ->emitFiles : (targetSourceFile?: SourceFile) => EmitResult ->targetSourceFile : SourceFile ->SourceFile : SourceFile ->EmitResult : EmitResult - - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile } interface SourceMapSpan { >SourceMapSpan : SourceMapSpan @@ -4334,13 +4352,9 @@ declare module "typescript" { >getCancellationToken : () => CancellationToken >CancellationToken : CancellationToken - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; ->writeFile : (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) => void ->fileName : string ->data : string ->writeByteOrderMark : boolean ->onError : (message: string) => void ->message : string + writeFile: WriteFileCallback; +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback getCurrentDirectory(): string; >getCurrentDirectory : () => string diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 411cd4f9d51..5879903340d 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -805,10 +805,24 @@ declare module "typescript" { getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; getCompilerHost(): CompilerHost; - getEmitResolver(): EmitResolver; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; @@ -816,8 +830,6 @@ declare module "typescript" { getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -1406,7 +1418,7 @@ declare module "typescript" { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index c26d8e241e3..67eff31dfb8 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2504,6 +2504,16 @@ declare module "typescript" { getCurrentDirectory(): string; >getCurrentDirectory : () => string + } + interface WriteFileCallback { +>WriteFileCallback : WriteFileCallback + + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; +>fileName : string +>data : string +>writeByteOrderMark : boolean +>onError : (message: string) => void +>message : string } interface Program extends ScriptReferenceHost { >Program : Program @@ -2517,9 +2527,28 @@ declare module "typescript" { >getCompilerHost : () => CompilerHost >CompilerHost : CompilerHost - getEmitResolver(): EmitResolver; ->getEmitResolver : () => EmitResolver ->EmitResolver : EmitResolver + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; +>emit : (targetSourceFile?: SourceFile, writeFile?: WriteFileCallback) => EmitResult +>targetSourceFile : SourceFile +>SourceFile : SourceFile +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback +>EmitResult : EmitResult + + isEmitBlocked(sourceFile?: SourceFile): boolean; +>isEmitBlocked : (sourceFile?: SourceFile) => boolean +>sourceFile : SourceFile +>SourceFile : SourceFile getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] @@ -2553,17 +2582,6 @@ declare module "typescript" { getCommonSourceDirectory(): string; >getCommonSourceDirectory : () => string - - emitFiles(targetSourceFile?: SourceFile): EmitResult; ->emitFiles : (targetSourceFile?: SourceFile) => EmitResult ->targetSourceFile : SourceFile ->SourceFile : SourceFile ->EmitResult : EmitResult - - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile } interface SourceMapSpan { >SourceMapSpan : SourceMapSpan @@ -4519,13 +4537,9 @@ declare module "typescript" { >getCancellationToken : () => CancellationToken >CancellationToken : CancellationToken - writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; ->writeFile : (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void) => void ->fileName : string ->data : string ->writeByteOrderMark : boolean ->onError : (message: string) => void ->message : string + writeFile: WriteFileCallback; +>writeFile : WriteFileCallback +>WriteFileCallback : WriteFileCallback getCurrentDirectory(): string; >getCurrentDirectory : () => string diff --git a/tests/cases/compiler/APISample_compile.ts b/tests/cases/compiler/APISample_compile.ts index 5278fb16682..af1eb9e0462 100644 --- a/tests/cases/compiler/APISample_compile.ts +++ b/tests/cases/compiler/APISample_compile.ts @@ -16,7 +16,7 @@ import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var host = ts.createCompilerHost(options); var program = ts.createProgram(fileNames, options, host); - var result = program.emitFiles(); + var result = program.emit(); var allDiagnostics = program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) diff --git a/tests/cases/compiler/APISample_transform.ts b/tests/cases/compiler/APISample_transform.ts index 284e8a4dc5d..eccdb1ccecc 100644 --- a/tests/cases/compiler/APISample_transform.ts +++ b/tests/cases/compiler/APISample_transform.ts @@ -51,7 +51,7 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { // Type check and get semantic errors errors = program.getTypeCheckerDiagnostics(); // Generate output - program.emitFiles(); + program.emit(); } return { outputs: outputs, From 2a1d78d9e374f9460b253feceaddf30955cc194e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 17:02:26 -0800 Subject: [PATCH 07/33] Simplify the createProgram API. Allow the host parameter to be optional to simplify command line programs. --- src/compiler/program.ts | 3 ++- .../baselines/reference/APISample_compile.js | 8 +++---- .../reference/APISample_compile.types | 21 ++++++------------- tests/baselines/reference/APISample_linter.js | 2 +- .../reference/APISample_linter.types | 4 ++-- .../reference/APISample_transform.js | 2 +- .../reference/APISample_transform.types | 8 +++---- .../baselines/reference/APISample_watcher.js | 2 +- .../reference/APISample_watcher.types | 4 ++-- tests/cases/compiler/APISample_compile.ts | 3 +-- 10 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index a6ed7fb51ab..6976195cc04 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -73,13 +73,14 @@ module ts { }; } - export function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program { + export function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program { var program: Program; var files: SourceFile[] = []; var filesByName: Map = {}; var errors: Diagnostic[] = []; var seenNoDefaultLib = options.noLib; var commonSourceDirectory: string; + host = host || createCompilerHost(options); forEach(rootNames, name => processRootFile(name, false)); if (!seenNoDefaultLib) { diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index c20c601823f..6df54cc1b64 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -14,8 +14,7 @@ declare var console: any; import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { - var host = ts.createCompilerHost(options); - var program = ts.createProgram(fileNames, options, host); + var program = ts.createProgram(fileNames, options); var result = program.emit(); var allDiagnostics = program.getDiagnostics() @@ -1426,7 +1425,7 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { var servicesVersion: string; @@ -1926,8 +1925,7 @@ declare module "typescript" { */ var ts = require("typescript"); function compile(fileNames, options) { - var host = ts.createCompilerHost(options); - var program = ts.createProgram(fileNames, options, host); + var program = ts.createProgram(fileNames, options); var result = program.emit(); var allDiagnostics = program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(result.diagnostics); allDiagnostics.forEach(function (diagnostic) { diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 469dc8098aa..cc07d75b0c6 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -22,23 +22,14 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >ts : unknown >CompilerOptions : ts.CompilerOptions - var host = ts.createCompilerHost(options); ->host : ts.CompilerHost ->ts.createCompilerHost(options) : ts.CompilerHost ->ts.createCompilerHost : (options: ts.CompilerOptions) => ts.CompilerHost ->ts : typeof ts ->createCompilerHost : (options: ts.CompilerOptions) => ts.CompilerHost ->options : ts.CompilerOptions - - var program = ts.createProgram(fileNames, options, host); + var program = ts.createProgram(fileNames, options); >program : ts.Program ->ts.createProgram(fileNames, options, host) : ts.Program ->ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host: ts.CompilerHost) => ts.Program +>ts.createProgram(fileNames, options) : ts.Program +>ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program >ts : typeof ts ->createProgram : (rootNames: string[], options: ts.CompilerOptions, host: ts.CompilerHost) => ts.Program +>createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program >fileNames : string[] >options : ts.CompilerOptions ->host : ts.CompilerHost var result = program.emit(); >result : ts.EmitResult @@ -4577,8 +4568,8 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; ->createProgram : (rootNames: string[], options: CompilerOptions, host: CompilerHost) => Program + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; +>createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] >options : CompilerOptions >CompilerOptions : CompilerOptions diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index eed54d13542..1cf0ea77098 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -1456,7 +1456,7 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { var servicesVersion: string; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 3af13c6b068..922a9ebea8e 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -4715,8 +4715,8 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; ->createProgram : (rootNames: string[], options: CompilerOptions, host: CompilerHost) => Program + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; +>createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] >options : CompilerOptions >CompilerOptions : CompilerOptions diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 59976015fb4..8d0352ed170 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -1456,7 +1456,7 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { var servicesVersion: string; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index e4f0e56910a..8c81d46e5bc 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -139,9 +139,9 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { var program = ts.createProgram(["file.ts"], compilerOptions, compilerHost); >program : ts.Program >ts.createProgram(["file.ts"], compilerOptions, compilerHost) : ts.Program ->ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host: ts.CompilerHost) => ts.Program +>ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program >ts : typeof ts ->createProgram : (rootNames: string[], options: ts.CompilerOptions, host: ts.CompilerHost) => ts.Program +>createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program >["file.ts"] : string[] >compilerOptions : ts.CompilerOptions >compilerHost : { getSourceFile: (fileName: any, target: any) => ts.SourceFile; writeFile: (name: any, text: any, writeByteOrderMark: any) => void; getDefaultLibFileName: () => string; useCaseSensitiveFileNames: () => boolean; getCanonicalFileName: (fileName: any) => any; getCurrentDirectory: () => string; getNewLine: () => string; } @@ -4656,8 +4656,8 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; ->createProgram : (rootNames: string[], options: CompilerOptions, host: CompilerHost) => Program + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; +>createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] >options : CompilerOptions >CompilerOptions : CompilerOptions diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 5879903340d..a4216e78ecd 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -1494,7 +1494,7 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { var servicesVersion: string; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 67eff31dfb8..95f87b4978b 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -4841,8 +4841,8 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; ->createProgram : (rootNames: string[], options: CompilerOptions, host: CompilerHost) => Program + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; +>createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] >options : CompilerOptions >CompilerOptions : CompilerOptions diff --git a/tests/cases/compiler/APISample_compile.ts b/tests/cases/compiler/APISample_compile.ts index af1eb9e0462..4731f856e2a 100644 --- a/tests/cases/compiler/APISample_compile.ts +++ b/tests/cases/compiler/APISample_compile.ts @@ -14,8 +14,7 @@ declare var console: any; import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { - var host = ts.createCompilerHost(options); - var program = ts.createProgram(fileNames, options, host); + var program = ts.createProgram(fileNames, options); var result = program.emit(); var allDiagnostics = program.getDiagnostics() From 476c8249ac91e298c881a33f772f14833abafa75 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 17:48:29 -0800 Subject: [PATCH 08/33] Remove 'isEmitBlocked' from the program API. If emitting is blocked, then calling .emit on the program will simply return immediately with an appropriate reason given in the EmitResult. --- src/compiler/emitter.ts | 2 +- src/compiler/program.ts | 2 +- src/compiler/tsc.ts | 5 +---- src/compiler/types.ts | 2 -- src/harness/harness.ts | 12 +++--------- tests/baselines/reference/APISample_compile.js | 1 - tests/baselines/reference/APISample_compile.types | 5 ----- tests/baselines/reference/APISample_linter.js | 1 - tests/baselines/reference/APISample_linter.types | 5 ----- tests/baselines/reference/APISample_transform.js | 1 - tests/baselines/reference/APISample_transform.types | 5 ----- tests/baselines/reference/APISample_watcher.js | 1 - tests/baselines/reference/APISample_watcher.types | 5 ----- 13 files changed, 6 insertions(+), 41 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index cb0b8faab5b..9b080fa4c39 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4471,7 +4471,7 @@ module ts { return { emitResultStatus, diagnostics, - sourceMaps: sourceMapDataList + sourceMaps: isEmitBlocked ? undefined : sourceMapDataList }; } } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 6976195cc04..0c1d5a24daf 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -126,7 +126,7 @@ module ts { getNewLine: compilerHost.getNewLine, getSourceFile: program.getSourceFile, getSourceFiles: program.getSourceFiles, - isEmitBlocked: program.isEmitBlocked, + isEmitBlocked, writeFile: writeFileCallback || compilerHost.writeFile, }; } diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 05f2305acf7..1491c90e979 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -338,10 +338,7 @@ module ts { else { var checkStart = new Date().getTime(); errors = program.getTypeCheckerDiagnostics(); - if (program.isEmitBlocked()) { - exitStatus = EmitReturnStatus.AllOutputGenerationSkipped; - } - else if (compilerOptions.noEmit) { + if (compilerOptions.noEmit) { exitStatus = EmitReturnStatus.Succeeded; } else { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index b04a5944bfc..69735803e2b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -947,8 +947,6 @@ module ts { */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; - // These will merge with the below diagnostics function in a followup checkin. getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 7b68ac80efa..a7d107c66d5 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1081,22 +1081,16 @@ module Harness { (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), options.target, useCaseSensitiveFileNames, currentDirectory)); - var isEmitBlocked = program.isEmitBlocked(); - - // only emit if there weren't parse errors - var emitResult: ts.EmitResult; - if (!isEmitBlocked) { - emitResult = program.emit(); - } + var emitResult = program.emit(); var errors: HarnessDiagnostic[] = []; - program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(emitResult ? emitResult.diagnostics : []).forEach(err => { + program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(emitResult.diagnostics).forEach(err => { // TODO: new compiler formats errors after this point to add . and newlines so we'll just do it manually for now errors.push(getMinimalDiagnostic(err)); }); this.lastErrors = errors; - var result = new CompilerResult(fileOutputs, errors, program, ts.sys.getCurrentDirectory(), emitResult ? emitResult.sourceMaps : undefined); + var result = new CompilerResult(fileOutputs, errors, program, ts.sys.getCurrentDirectory(), emitResult.sourceMaps); onComplete(result, program); // reset what newline means in case the last test changed it diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 6df54cc1b64..f057f673607 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -753,7 +753,6 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index cc07d75b0c6..00a34474041 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -2272,11 +2272,6 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 1cf0ea77098..bc4b118891a 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -784,7 +784,6 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 922a9ebea8e..3fbd07f08d8 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2419,11 +2419,6 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 8d0352ed170..4b50058a855 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -784,7 +784,6 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 8c81d46e5bc..3882bd50445 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2360,11 +2360,6 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index a4216e78ecd..5f99e7beefb 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -822,7 +822,6 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeCheckerGlobalDiagnostics(): Diagnostic[]; getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 95f87b4978b..dadd3a08cea 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2545,11 +2545,6 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - isEmitBlocked(sourceFile?: SourceFile): boolean; ->isEmitBlocked : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; >getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile From d8a7e376f1040f2e4abc7f0939f4ce1998928380 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 17:58:19 -0800 Subject: [PATCH 09/33] Update comment. --- src/compiler/types.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 69735803e2b..60d19b4a5d3 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -956,14 +956,8 @@ module ts { getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; // Gets a type checker that can be used to semantically analyze source fils in the program. - // The 'produceDiagnostics' flag determines if the checker will produce diagnostics while - // analyzing the code. It can be set to 'false' to make many type checking operaitons - // faster. With this flag set, the checker can avoid codepaths only necessary to produce - // diagnostics, but not necessary to answer semantic questions about the code. - // - // If 'produceDiagnostics' is false, then any calls to get diagnostics from the TypeChecker - // will throw an invalid operation exception. getTypeChecker(): TypeChecker; + getCommonSourceDirectory(): string; // For testing purposes only. Should not be used by any other consumers (including the From 3cadb3c30ca686414f8e35af6644c202876377e2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 18:12:13 -0800 Subject: [PATCH 10/33] Use a diagnostics collection inside the program instance. --- src/compiler/program.ts | 35 +++++++++---------- .../amd/invalidRootFile.errors.txt | 2 -- .../node/invalidRootFile.errors.txt | 2 -- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 0c1d5a24daf..34f044b8ebe 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -77,7 +77,7 @@ module ts { var program: Program; var files: SourceFile[] = []; var filesByName: Map = {}; - var errors: Diagnostic[] = []; + var diagnostics = createDiagnosticCollection(); var seenNoDefaultLib = options.noLib; var commonSourceDirectory: string; host = host || createCompilerHost(options); @@ -87,7 +87,6 @@ module ts { processRootFile(host.getDefaultLibFileName(options), true); } verifyCompilerOptions(); - errors.sort(compareDiagnostics); var diagnosticsProducingTypeChecker: TypeChecker; var noDiagnosticsTypeChecker: TypeChecker; @@ -174,12 +173,12 @@ module ts { return getDiagnosticsProducingTypeChecker().getGlobalDiagnostics(); } - function getDiagnostics(sourceFile?: SourceFile): Diagnostic[] { - return sourceFile ? filter(errors, e => e.file === sourceFile) : errors; + function getDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ + return sourceFile ? diagnostics.getDiagnostics(sourceFile.fileName) : diagnostics.getDiagnostics(); } - function getGlobalDiagnostics(): Diagnostic[] { - return filter(errors, e => !e.file); + function getGlobalDiagnostics(): Diagnostic[]{ + return diagnostics.getGlobalDiagnostics(); } function hasExtension(fileName: string): boolean { @@ -219,10 +218,10 @@ module ts { if (diagnostic) { if (refFile) { - errors.push(createFileDiagnostic(refFile, start, length, diagnostic, fileName)); + diagnostics.add(createFileDiagnostic(refFile, start, length, diagnostic, fileName)); } else { - errors.push(createCompilerDiagnostic(diagnostic, fileName)); + diagnostics.add(createCompilerDiagnostic(diagnostic, fileName)); } } } @@ -244,11 +243,11 @@ module ts { // We haven't looked for this file, do so now and cache result var file = filesByName[canonicalName] = host.getSourceFile(fileName, options.target, hostErrorMessage => { if (refFile) { - errors.push(createFileDiagnostic(refFile, refStart, refLength, + diagnostics.add(createFileDiagnostic(refFile, refStart, refLength, Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } else { - errors.push(createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } }); if (file) { @@ -269,7 +268,7 @@ module ts { files.push(file); } forEach(getSyntacticDiagnostics(file), e => { - errors.push(e); + diagnostics.add(e); }); } } @@ -280,7 +279,7 @@ module ts { if (file && host.useCaseSensitiveFileNames()) { var sourceFileName = useAbsolutePath ? getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName; if (canonicalName !== sourceFileName) { - errors.push(createFileDiagnostic(refFile, refStart, refLength, + diagnostics.add(createFileDiagnostic(refFile, refStart, refLength, Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); } } @@ -354,10 +353,10 @@ module ts { if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { // Error to specify --mapRoot or --sourceRoot without mapSourceFiles if (options.mapRoot) { - errors.push(createCompilerDiagnostic(Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); } if (options.sourceRoot) { - errors.push(createCompilerDiagnostic(Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); } return; } @@ -368,7 +367,7 @@ module ts { var externalModuleErrorSpan = getErrorSpanForNode(firstExternalModule.externalModuleIndicator); var errorStart = skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); var errorLength = externalModuleErrorSpan.end - errorStart; - errors.push(createFileDiagnostic(firstExternalModule, errorStart, errorLength, Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); + diagnostics.add(createFileDiagnostic(firstExternalModule, errorStart, errorLength, Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); } // there has to be common source directory if user specified --outdir || --sourcRoot @@ -389,7 +388,7 @@ module ts { for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathComponents.length); i++) { if (commonPathComponents[i] !== sourcePathComponents[i]) { if (i === 0) { - errors.push(createCompilerDiagnostic(Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); return; } @@ -422,11 +421,11 @@ module ts { if (options.noEmit) { if (options.out || options.outDir) { - errors.push(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); } if (options.declaration) { - errors.push(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); + diagnostics.add(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); } } } diff --git a/tests/baselines/reference/project/invalidRootFile/amd/invalidRootFile.errors.txt b/tests/baselines/reference/project/invalidRootFile/amd/invalidRootFile.errors.txt index 45741b88910..25059478bf5 100644 --- a/tests/baselines/reference/project/invalidRootFile/amd/invalidRootFile.errors.txt +++ b/tests/baselines/reference/project/invalidRootFile/amd/invalidRootFile.errors.txt @@ -1,8 +1,6 @@ error TS6054: File 'a.t' must have extension '.ts' or '.d.ts'. error TS6053: File 'a.ts' not found. -error TS6053: File 'a.ts' not found. !!! error TS6054: File 'a.t' must have extension '.ts' or '.d.ts'. -!!! error TS6053: File 'a.ts' not found. !!! error TS6053: File 'a.ts' not found. \ No newline at end of file diff --git a/tests/baselines/reference/project/invalidRootFile/node/invalidRootFile.errors.txt b/tests/baselines/reference/project/invalidRootFile/node/invalidRootFile.errors.txt index 45741b88910..25059478bf5 100644 --- a/tests/baselines/reference/project/invalidRootFile/node/invalidRootFile.errors.txt +++ b/tests/baselines/reference/project/invalidRootFile/node/invalidRootFile.errors.txt @@ -1,8 +1,6 @@ error TS6054: File 'a.t' must have extension '.ts' or '.d.ts'. error TS6053: File 'a.ts' not found. -error TS6053: File 'a.ts' not found. !!! error TS6054: File 'a.t' must have extension '.ts' or '.d.ts'. -!!! error TS6053: File 'a.ts' not found. !!! error TS6053: File 'a.ts' not found. \ No newline at end of file From 28c1a23e7c570975124b5fa62ff9d0a23812f944 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 18:42:44 -0800 Subject: [PATCH 11/33] Track performance statistics in the ts module. This allows us to greatly simplify the compile function in tsc. --- src/compiler/binder.ts | 9 ++++++++- src/compiler/checker.ts | 10 +++++++++- src/compiler/parser.ts | 8 +++++++- src/compiler/program.ts | 9 ++++++++- src/compiler/tsc.ts | 30 +++++++++++++++--------------- 5 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index a8055d993a1..c1b9d76f1b5 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1,6 +1,8 @@ /// module ts { + /* @internal */ export var bindTime = 0; + export const enum ModuleInstanceState { NonInstantiated = 0, Instantiated = 1, @@ -60,8 +62,13 @@ module ts { return declaration.name && declaration.name.kind === SyntaxKind.ComputedPropertyName; } - export function bindSourceFile(file: SourceFile) { + export function bindSourceFile(file: SourceFile): void { + var start = new Date().getTime(); + bindSourceFileWorker(file); + bindTime += new Date().getTime() - start; + } + function bindSourceFileWorker(file: SourceFile): void { var parent: Node; var container: Node; var blockScopeContainer: Node; diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 05e60ddcd46..945dc4d7a2a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5,6 +5,8 @@ module ts { var nextNodeId = 1; var nextMergeId = 1; + /* @internal */ export var checkTime = 0; + export function createTypeChecker(host: TypeCheckerHost, produceDiagnostics: boolean): TypeChecker { var Symbol = objectAllocator.getSymbolConstructor(); var Type = objectAllocator.getTypeConstructor(); @@ -9537,8 +9539,14 @@ module ts { } } - // Fully type check a source file and collect the relevant diagnostics. function checkSourceFile(node: SourceFile) { + var start = new Date().getTime(); + checkSourceFileWorker(node); + checkTime += new Date().getTime() - start; + } + + // Fully type check a source file and collect the relevant diagnostics. + function checkSourceFileWorker(node: SourceFile) { var links = getNodeLinks(node); if (!(links.flags & NodeCheckFlags.TypeChecked)) { // Grammar checking diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e563291f762..4f23e2f30a7 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3,6 +3,7 @@ module ts { var nodeConstructors = new Array Node>(SyntaxKind.Count); + /* @internal */ export var parseTime = 0; export function getNodeConstructor(kind: SyntaxKind): new () => Node { return nodeConstructors[kind] || (nodeConstructors[kind] = objectAllocator.getNodeConstructor(kind)); @@ -856,8 +857,13 @@ module ts { } } } + export function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes = false): SourceFile { - return parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes); + var start = new Date().getTime(); + var result = parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes); + + parseTime += new Date().getTime() - start; + return result; } function parseSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, syntaxCursor: SyntaxCursor, setParentNodes = false): SourceFile { diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 34f044b8ebe..c28ca61e548 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2,6 +2,8 @@ /// module ts { + /* @internal */ export var emitTime = 0; + export function createCompilerHost(options: CompilerOptions): CompilerHost { var currentDirectory: string; var existingDirectories: Map = {}; @@ -155,9 +157,14 @@ module ts { } function emit(targetSourceFile?: SourceFile, writeFileCallback?: WriteFileCallback) { + var start = new Date().getTime(); + var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(); var host = getEmitHost(writeFileCallback); - return emitFiles(resolver, host, targetSourceFile); + var result = emitFiles(resolver, host, targetSourceFile); + + emitTime += new Date().getTime() - start; + return result; } function getSourceFile(fileName: string) { diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 1491c90e979..e4a9f92164d 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -322,35 +322,33 @@ module ts { } function compile(fileNames: string[], compilerOptions: CompilerOptions, compilerHost: CompilerHost) { - var parseStart = new Date().getTime(); + ts.parseTime = 0; + ts.bindTime = 0; + ts.checkTime = 0; + ts.emitTime = 0; + + var start = new Date().getTime(); var program = createProgram(fileNames, compilerOptions, compilerHost); - var bindStart = new Date().getTime(); var errors: Diagnostic[] = program.getDiagnostics(); var exitStatus: EmitReturnStatus; if (errors.length) { - var checkStart = bindStart; - var emitStart = bindStart; - var reportStart = bindStart; exitStatus = EmitReturnStatus.AllOutputGenerationSkipped; } else { - var checkStart = new Date().getTime(); errors = program.getTypeCheckerDiagnostics(); if (compilerOptions.noEmit) { exitStatus = EmitReturnStatus.Succeeded; } else { - var emitStart = new Date().getTime(); var emitOutput = program.emit(); - var emitErrors = emitOutput.diagnostics; exitStatus = emitOutput.emitResultStatus; - var reportStart = new Date().getTime(); - errors = concatenate(errors, emitErrors); + errors = concatenate(errors, emitOutput.diagnostics); } } + var end = start - new Date().getTime(); reportDiagnostics(errors); if (compilerOptions.listFiles) { @@ -367,14 +365,16 @@ module ts { reportCountStatistic("Identifiers", program.getIdentifierCount()); reportCountStatistic("Symbols", program.getSymbolCount()); reportCountStatistic("Types", program.getTypeCount()); + if (memoryUsed >= 0) { reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K"); } - reportTimeStatistic("Parse time", bindStart - parseStart); - reportTimeStatistic("Bind time", checkStart - bindStart); - reportTimeStatistic("Check time", emitStart - checkStart); - reportTimeStatistic("Emit time", reportStart - emitStart); - reportTimeStatistic("Total time", reportStart - parseStart); + + reportTimeStatistic("Parse time", ts.parseTime); + reportTimeStatistic("Bind time", ts.bindTime); + reportTimeStatistic("Check time", ts.checkTime); + reportTimeStatistic("Emit time", ts.emitTime); + reportTimeStatistic("Total time", start - end); } return { program, exitStatus }; From de308664604cd50e8f1690a60ec33eadd27fafbd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 22:26:03 -0800 Subject: [PATCH 12/33] Simplify the code for actually compiling within tsc. --- src/compiler/tsc.ts | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index e4a9f92164d..f0dcb872950 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -328,28 +328,11 @@ module ts { ts.emitTime = 0; var start = new Date().getTime(); + var program = createProgram(fileNames, compilerOptions, compilerHost); - - var errors: Diagnostic[] = program.getDiagnostics(); - var exitStatus: EmitReturnStatus; - - if (errors.length) { - exitStatus = EmitReturnStatus.AllOutputGenerationSkipped; - } - else { - errors = program.getTypeCheckerDiagnostics(); - if (compilerOptions.noEmit) { - exitStatus = EmitReturnStatus.Succeeded; - } - else { - var emitOutput = program.emit(); - exitStatus = emitOutput.emitResultStatus; - errors = concatenate(errors, emitOutput.diagnostics); - } - } + var exitStatus = compileProgram(); var end = start - new Date().getTime(); - reportDiagnostics(errors); if (compilerOptions.listFiles) { forEach(program.getSourceFiles(), file => { @@ -378,6 +361,29 @@ module ts { } return { program, exitStatus }; + + function compileProgram(): EmitReturnStatus { + // First get any syntactic errors. + var errors = program.getDiagnostics(); + reportDiagnostics(errors); + + // If we didn't have any syntactic errors, then also try getting the semantic errors. + if (errors.length === 0) { + var errors = program.getTypeCheckerDiagnostics(); + reportDiagnostics(errors); + } + + // If the user doesn't want us to emit, then we're done at this point. + if (compilerOptions.noEmit) { + return EmitReturnStatus.Succeeded; + } + + // Otherwise, emit and report any errors we ran into. + var emitOutput = program.emit(); + reportDiagnostics(emitOutput.diagnostics); + + return emitOutput.emitResultStatus; + } } function printVersion() { From b12be3db1909164642f7dd04d5b78a4aa0efd489 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 4 Feb 2015 23:20:26 -0800 Subject: [PATCH 13/33] Remove dependency from the typechecker to the compiler host. This also lets us not expose the compiler host from the Program instance. The compiler host was only needed by the type checker to get the host newline. The host newline was used for concatenating diagnostic message chains. Now we don't concatenate them up front. Instead, we just store the message chain in the diagnostic itself. Then when we pass it to the host, it can then decide what newline to use. --- src/compiler/checker.ts | 4 +- src/compiler/core.ts | 58 ++++++++----------- src/compiler/program.ts | 16 +++-- src/compiler/tsc.ts | 6 +- src/compiler/types.ts | 6 +- src/compiler/utilities.ts | 37 +++++++++++- src/harness/fourslash.ts | 11 +++- src/harness/harness.ts | 8 ++- src/harness/harnessLanguageService.ts | 4 ++ src/harness/projectsRunner.ts | 4 +- src/services/shims.ts | 15 +++-- .../baselines/reference/APISample_compile.js | 6 +- .../reference/APISample_compile.types | 19 ++---- tests/baselines/reference/APISample_linter.js | 6 +- .../reference/APISample_linter.types | 15 ++--- .../reference/APISample_transform.js | 6 +- .../reference/APISample_transform.types | 19 ++---- .../baselines/reference/APISample_watcher.js | 6 +- .../reference/APISample_watcher.types | 23 +++----- 19 files changed, 135 insertions(+), 134 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 945dc4d7a2a..50dcbd21fdc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3476,7 +3476,7 @@ module ts { errorInfo = concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); } - diagnostics.add(createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); } return result !== Ternary.False; @@ -8924,7 +8924,7 @@ module ts { var errorInfo = chainDiagnosticMessages(undefined, Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); - diagnostics.add(createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); } } } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 87094150baf..9b852a37ff6 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -325,38 +325,6 @@ module ts { return headChain; } - export function flattenDiagnosticChain(file: SourceFile, start: number, length: number, diagnosticChain: DiagnosticMessageChain, newLine: string): Diagnostic { - Debug.assert(start >= 0, "start must be non-negative, is " + start); - Debug.assert(length >= 0, "length must be non-negative, is " + length); - - var code = diagnosticChain.code; - var category = diagnosticChain.category; - var messageText = ""; - - var indent = 0; - while (diagnosticChain) { - if (indent) { - messageText += newLine; - - for (var i = 0; i < indent; i++) { - messageText += " "; - } - } - messageText += diagnosticChain.messageText; - indent++; - diagnosticChain = diagnosticChain.next; - } - - return { - file, - start, - length, - code, - category, - messageText - }; - } - export function compareValues(a: T, b: T): Comparison { if (a === b) return Comparison.EqualTo; if (a === undefined) return Comparison.LessThan; @@ -373,10 +341,34 @@ module ts { compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || - compareValues(d1.messageText, d2.messageText) || + compareMessageText(d1.messageText, d2.messageText) || 0; } + function compareMessageText(text1: string | DiagnosticMessageChain, text2: string | DiagnosticMessageChain): number { + while (text1 && text2) { + // We still have both chains. + var string1 = typeof text1 === "string" ? text1 : text1.messageText; + var string2 = typeof text2 === "string" ? text2 : text2.messageText; + + var res = compareValues(string1, string2); + if (res) { + return res; + } + + text1 = typeof text1 === "string" ? undefined : text1.next; + text2 = typeof text2 === "string" ? undefined : text2.next; + } + + if (!text1 && !text2) { + // if the chains are done, then these messages are the same. + return 0; + } + + // We still have one chain remaining. The shorter chain should come first. + return text1 ? 1 : -1; + } + export function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] { if (diagnostics.length < 2) { return diagnostics; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index c28ca61e548..85181b2aa55 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -23,9 +23,9 @@ module ts { } catch (e) { if (onError) { - onError(e.number === unsupportedFileEncodingErrorCode ? - createCompilerDiagnostic(Diagnostics.Unsupported_file_encoding).messageText : - e.message); + onError(e.number === unsupportedFileEncodingErrorCode + ? createCompilerDiagnostic(Diagnostics.Unsupported_file_encoding).messageText + : e.message); } text = ""; } @@ -97,7 +97,6 @@ module ts { getSourceFile: getSourceFile, getSourceFiles: () => files, getCompilerOptions: () => options, - getCompilerHost: () => host, getDiagnostics, getGlobalDiagnostics, getTypeCheckerDiagnostics, @@ -118,17 +117,16 @@ module ts { return program; function getEmitHost(writeFileCallback?: WriteFileCallback) { - var compilerHost = program.getCompilerHost(); return { - getCanonicalFileName: compilerHost.getCanonicalFileName, + getCanonicalFileName: host.getCanonicalFileName, getCommonSourceDirectory: program.getCommonSourceDirectory, getCompilerOptions: program.getCompilerOptions, - getCurrentDirectory: compilerHost.getCurrentDirectory, - getNewLine: compilerHost.getNewLine, + getCurrentDirectory: host.getCurrentDirectory, + getNewLine: host.getNewLine, getSourceFile: program.getSourceFile, getSourceFiles: program.getSourceFiles, isEmitBlocked, - writeFile: writeFileCallback || compilerHost.writeFile, + writeFile: writeFileCallback || host.writeFile, }; } diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index f0dcb872950..15f97e028fc 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -78,8 +78,8 @@ module ts { } function getDiagnosticText(message: DiagnosticMessage, ...args: any[]): string { - var diagnostic: Diagnostic = createCompilerDiagnostic.apply(undefined, arguments); - return diagnostic.messageText; + var diagnostic = createCompilerDiagnostic.apply(undefined, arguments); + return diagnostic.messageText; } function reportDiagnostic(diagnostic: Diagnostic) { @@ -92,7 +92,7 @@ module ts { } var category = DiagnosticCategory[diagnostic.category].toLowerCase(); - output += category + " TS" + diagnostic.code + ": " + diagnostic.messageText + sys.newLine; + output += category + " TS" + diagnostic.code + ": " + flattenDiagnosticMessageText(diagnostic.messageText, sys.newLine) + sys.newLine; sys.write(output); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 60d19b4a5d3..467d9b6cc90 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -933,7 +933,6 @@ module ts { export interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then @@ -941,7 +940,7 @@ module ts { * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -1009,7 +1008,6 @@ module ts { export interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; getSourceFile(fileName: string): SourceFile; @@ -1451,7 +1449,7 @@ module ts { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 9df23b22dd0..4204acc4716 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -199,12 +199,45 @@ module ts { return createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); } - export function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain, newLine: string): Diagnostic { + export function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): Diagnostic { node = getErrorSpanForNode(node); var file = getSourceFileOfNode(node); var start = skipTrivia(file.text, node.pos); var length = node.end - start; - return flattenDiagnosticChain(file, start, length, messageChain, newLine); + return { + file, + start, + length, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain + }; + } + + export function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string { + if (typeof messageText === "string") { + return messageText; + } + else { + var diagnosticChain = messageText; + var result = ""; + + var indent = 0; + while (diagnosticChain) { + if (indent) { + result += newLine; + + for (var i = 0; i < indent; i++) { + result += " "; + } + } + result += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + + return result; + } } export function getErrorSpanForNode(node: Node): Node { diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index dd55e702d09..5e046c070ab 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -513,7 +513,9 @@ module FourSlash { } errors.forEach(function (error: ts.Diagnostic) { - Harness.IO.log(" minChar: " + error.start + ", limChar: " + (error.start + error.length) + ", message: " + error.messageText + "\n"); + Harness.IO.log(" minChar: " + error.start + + ", limChar: " + (error.start + error.length) + + ", message: " + ts.flattenDiagnosticMessageText(error.messageText, ts.sys.newLine) + "\n"); }); } @@ -1179,7 +1181,10 @@ module FourSlash { if (errorList.length) { errorList.forEach(err => { - Harness.IO.log("start: " + err.start + ", length: " + err.length + ", message: " + err.messageText); + Harness.IO.log( + "start: " + err.start + + ", length: " + err.length + + ", message: " + ts.flattenDiagnosticMessageText(err.messageText, ts.sys.newLine)); }); } } @@ -2214,7 +2219,7 @@ module FourSlash { var errors = program.getDiagnostics().concat(checker.getDiagnostics()); if (errors.length > 0) { - throw new Error('Error compiling ' + fileName + ': ' + errors.map(e => e.messageText).join('\r\n')); + throw new Error('Error compiling ' + fileName + ': ' + errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, ts.sys.newLine)).join('\r\n')); } program.emit(); result = result || ''; // Might have an empty fourslash file diff --git a/src/harness/harness.ts b/src/harness/harness.ts index a7d107c66d5..84aaf66be3d 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -183,7 +183,7 @@ module Utils { return { start: diagnostic.start, length: diagnostic.length, - messageText: diagnostic.messageText, + messageText: ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine), category: (ts).DiagnosticCategory[diagnostic.category], code: diagnostic.code }; @@ -305,7 +305,9 @@ module Utils { assert.equal(d1.start, d2.start, "d1.start !== d2.start"); assert.equal(d1.length, d2.length, "d1.length !== d2.length"); - assert.equal(d1.messageText, d2.messageText, "d1.messageText !== d2.messageText"); + assert.equal( + ts.flattenDiagnosticMessageText(d1.messageText, ts.sys.newLine), + ts.flattenDiagnosticMessageText(d2.messageText, ts.sys.newLine), "d1.messageText !== d2.messageText"); assert.equal(d1.category, d2.category, "d1.category !== d2.category"); assert.equal(d1.code, d2.code, "d1.code !== d2.code"); } @@ -1182,7 +1184,7 @@ module Harness { end: err.start + err.length, line: errorLineInfo.line, character: errorLineInfo.character, - message: err.messageText, + message: ts.flattenDiagnosticMessageText(err.messageText, ts.sys.newLine), category: ts.DiagnosticCategory[err.category].toLowerCase(), code: err.code }; diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index d7510c7879e..547f8ccce48 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -134,6 +134,10 @@ module Harness.LanguageService { public trace(s: string) { } + public getNewLine(): string { + return "\r\n"; + } + public addDefaultLibrary() { this.addScript(Harness.Compiler.defaultLibFileName, Harness.Compiler.defaultLibSourceFile.text); } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 327ebc3520e..53ce8e507a0 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -275,14 +275,14 @@ class ProjectRunner extends RunnerBase { function compileCompileDTsFiles(compilerResult: BatchCompileProjectTestCaseResult) { 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()); + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, compilerResult.program.getCurrentDirectory()); sourceFilePath = sourceFilePath.replace(compilerResult.program.getCommonSourceDirectory(), ""); var emitOutputFilePathWithoutExtension = ts.removeFileExtension(ts.combinePaths(compilerOptions.outDir, sourceFilePath)); } diff --git a/src/services/shims.ts b/src/services/shims.ts index c5b2b24108d..8b7a48d03f3 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -52,6 +52,7 @@ module ts { getCancellationToken(): CancellationToken; getCurrentDirectory(): string; getDefaultLibFileName(options: string): string; + getNewLine?(): string; } /// @@ -367,9 +368,9 @@ module ts { }); } - private static realizeDiagnostic(diagnostic: Diagnostic): { message: string; start: number; length: number; category: string; } { + private realizeDiagnostic(diagnostic: Diagnostic, newLine?: string): { message: string; start: number; length: number; category: string; } { return { - message: diagnostic.messageText, + message: flattenDiagnosticMessageText(diagnostic.messageText, newLine), start: diagnostic.start, length: diagnostic.length, /// TODO: no need for the tolowerCase call @@ -396,12 +397,16 @@ module ts { }); } + private getNewLine(): string { + return this.host.getNewLine ? this.host.getNewLine() : "\r\n"; + } + public getSyntacticDiagnostics(fileName: string): string { return this.forwardJSONCall( "getSyntacticDiagnostics('" + fileName + "')", () => { var errors = this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(LanguageServiceShimObject.realizeDiagnostic); + return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()); }); } @@ -410,7 +415,7 @@ module ts { "getSemanticDiagnostics('" + fileName + "')", () => { var errors = this.languageService.getSemanticDiagnostics(fileName); - return errors.map(LanguageServiceShimObject.realizeDiagnostic); + return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()); }); } @@ -419,7 +424,7 @@ module ts { "getCompilerOptionsDiagnostics()", () => { var errors = this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(LanguageServiceShimObject.realizeDiagnostic) + return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()) }); } diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index f057f673607..db4f29683d2 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -741,14 +741,13 @@ declare module "typescript" { } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -795,7 +794,6 @@ declare module "typescript" { } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; getSourceFile(fileName: string): SourceFile; } @@ -1144,7 +1142,7 @@ declare module "typescript" { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; } diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 00a34474041..5124312b6d3 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -98,9 +98,9 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >lineChar.character : number >lineChar : ts.LineAndCharacter >character : number ->diagnostic.messageText : string +>diagnostic.messageText : string | ts.DiagnosticMessageChain >diagnostic : ts.Diagnostic ->messageText : string +>messageText : string | ts.DiagnosticMessageChain }); @@ -2250,17 +2250,13 @@ declare module "typescript" { >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -2400,10 +2396,6 @@ declare module "typescript" { >getCompilerOptions : () => CompilerOptions >CompilerOptions : CompilerOptions - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - getSourceFiles(): SourceFile[]; >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile @@ -3659,8 +3651,9 @@ declare module "typescript" { length: number; >length : number - messageText: string; ->messageText : string + messageText: string | DiagnosticMessageChain; +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain category: DiagnosticCategory; >category : DiagnosticCategory diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index bc4b118891a..646d0e47a4e 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -772,14 +772,13 @@ declare module "typescript" { } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -826,7 +825,6 @@ declare module "typescript" { } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; getSourceFile(fileName: string): SourceFile; } @@ -1175,7 +1173,7 @@ declare module "typescript" { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; } diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 3fbd07f08d8..1e917893832 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2397,17 +2397,13 @@ declare module "typescript" { >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -2547,10 +2543,6 @@ declare module "typescript" { >getCompilerOptions : () => CompilerOptions >CompilerOptions : CompilerOptions - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - getSourceFiles(): SourceFile[]; >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile @@ -3806,8 +3798,9 @@ declare module "typescript" { length: number; >length : number - messageText: string; ->messageText : string + messageText: string | DiagnosticMessageChain; +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain category: DiagnosticCategory; >category : DiagnosticCategory diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 4b50058a855..280c5202db3 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -772,14 +772,13 @@ declare module "typescript" { } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -826,7 +825,6 @@ declare module "typescript" { } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; getSourceFile(fileName: string): SourceFile; } @@ -1175,7 +1173,7 @@ declare module "typescript" { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; } diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 3882bd50445..c8b7e10fa89 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -212,9 +212,9 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { >e : ts.Diagnostic >start : number >line : number ->e.messageText : string +>e.messageText : string | ts.DiagnosticMessageChain >e : ts.Diagnostic ->messageText : string +>messageText : string | ts.DiagnosticMessageChain }; } @@ -2338,17 +2338,13 @@ declare module "typescript" { >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -2488,10 +2484,6 @@ declare module "typescript" { >getCompilerOptions : () => CompilerOptions >CompilerOptions : CompilerOptions - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - getSourceFiles(): SourceFile[]; >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile @@ -3747,8 +3739,9 @@ declare module "typescript" { length: number; >length : number - messageText: string; ->messageText : string + messageText: string | DiagnosticMessageChain; +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain category: DiagnosticCategory; >category : DiagnosticCategory diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 5f99e7beefb..89f3bc43d37 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -810,14 +810,13 @@ declare module "typescript" { } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -864,7 +863,6 @@ declare module "typescript" { } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; getSourceFile(fileName: string): SourceFile; } @@ -1213,7 +1211,7 @@ declare module "typescript" { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; } diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index dadd3a08cea..f286fe18eb2 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -362,9 +362,9 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >lineChar.character : number >lineChar : ts.LineAndCharacter >character : number ->diagnostic.messageText : string +>diagnostic.messageText : string | ts.DiagnosticMessageChain >diagnostic : ts.Diagnostic ->messageText : string +>messageText : string | ts.DiagnosticMessageChain } else { console.log(` Error: ${diagnostic.messageText}`); @@ -372,9 +372,9 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >console.log : any >console : any >log : any ->diagnostic.messageText : string +>diagnostic.messageText : string | ts.DiagnosticMessageChain >diagnostic : ts.Diagnostic ->messageText : string +>messageText : string | ts.DiagnosticMessageChain } }); } @@ -2523,17 +2523,13 @@ declare module "typescript" { >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - /** * Emits the javascript and declaration files. If targetSourceFile is not specified, then * the javascript and declaration files will be produced for all the files in this program. * If targetSourceFile is specified, then only the javascript and declaration for that * specific file will be generated. * - * If writeFile is not specified then the writeFile callback from getCompilerHost() will be + * If writeFile is not specified then the writeFile callback from the compiler host will be * used for writing the javascript and declaration files. Otherwise, the writeFile parameter * will be invoked when writing the javascript and declaration files. */ @@ -2673,10 +2669,6 @@ declare module "typescript" { >getCompilerOptions : () => CompilerOptions >CompilerOptions : CompilerOptions - getCompilerHost(): CompilerHost; ->getCompilerHost : () => CompilerHost ->CompilerHost : CompilerHost - getSourceFiles(): SourceFile[]; >getSourceFiles : () => SourceFile[] >SourceFile : SourceFile @@ -3932,8 +3924,9 @@ declare module "typescript" { length: number; >length : number - messageText: string; ->messageText : string + messageText: string | DiagnosticMessageChain; +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain category: DiagnosticCategory; >category : DiagnosticCategory From 337a99f62af832dcb7e232952a7b44d27dd9c3fe Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 01:47:29 -0800 Subject: [PATCH 14/33] Change the API for getting diagnostics so that all calls go through a Program instance. --- src/compiler/checker.ts | 9 +- src/compiler/core.ts | 10 ++ src/compiler/emitter.ts | 23 ++-- src/compiler/parser.ts | 2 +- src/compiler/program.ts | 105 ++++++++++++--- src/compiler/tsc.ts | 12 +- src/compiler/types.ts | 36 ++++-- src/compiler/utilities.ts | 40 +----- src/harness/fourslash.ts | 25 ++-- src/harness/harness.ts | 3 +- src/harness/projectsRunner.ts | 27 ++-- src/services/services.ts | 15 ++- .../baselines/reference/APISample_compile.js | 39 +++--- .../reference/APISample_compile.types | 119 ++++++++--------- tests/baselines/reference/APISample_linter.js | 16 +-- .../reference/APISample_linter.types | 53 ++++---- .../reference/APISample_transform.js | 48 ++++--- .../reference/APISample_transform.types | 120 ++++++++++-------- .../baselines/reference/APISample_watcher.js | 16 +-- .../reference/APISample_watcher.types | 53 ++++---- .../declarationEmit_invalidReference2.js | 4 - ...etEmitOutputDeclarationMultiFiles.baseline | 16 +-- ...etEmitOutputDeclarationSingleFile.baseline | 8 +- .../getEmitOutputExternalModule.baseline | 6 +- .../getEmitOutputExternalModule2.baseline | 9 +- .../reference/getEmitOutputMapRoots.baseline | 8 +- .../reference/getEmitOutputNoErrors.baseline | 6 +- .../getEmitOutputOnlyOneFile.baseline | 6 +- .../getEmitOutputSingleFile.baseline | 6 +- .../getEmitOutputSingleFile2.baseline | 8 +- .../reference/getEmitOutputSourceMap.baseline | 8 +- .../getEmitOutputSourceMap2.baseline | 16 +-- .../getEmitOutputSourceRoot.baseline | 8 +- ...getEmitOutputSourceRootMultiFiles.baseline | 16 +-- .../getEmitOutputWithDeclarationFile.baseline | 10 +- ...getEmitOutputWithDeclarationFile2.baseline | 16 +-- ...getEmitOutputWithDeclarationFile3.baseline | 6 +- ...mitOutputWithEarlySyntacticErrors.baseline | 9 +- .../getEmitOutputWithEmitterErrors.baseline | 7 +- .../getEmitOutputWithEmitterErrors2.baseline | 7 +- .../getEmitOutputWithSemanticErrors.baseline | 8 +- .../getEmitOutputWithSemanticErrors2.baseline | 8 +- ...ithSemanticErrorsForMultipleFiles.baseline | 8 +- ...thSemanticErrorsForMultipleFiles2.baseline | 8 +- ...thSyntacticErrorsForMultipleFiles.baseline | 6 +- ...hSyntacticErrorsForMultipleFiles2.baseline | 8 +- .../getEmitOutputWithSyntaxErrors.baseline | 8 +- ...apRootSourceRootWithNoSourceMapOption.json | 5 +- ...apRootSourceRootWithNoSourceMapOption.json | 5 +- .../amd/mapRootWithNoSourceMapOption.json | 5 +- .../node/mapRootWithNoSourceMapOption.json | 5 +- .../amd/sourceRootWithNoSourceMapOption.json | 5 +- .../node/sourceRootWithNoSourceMapOption.json | 5 +- .../visibilityOfTypeUsedAcrossModules2.json | 4 +- .../visibilityOfTypeUsedAcrossModules2.json | 4 +- tests/cases/compiler/APISample_compile.ts | 13 +- tests/cases/compiler/APISample_transform.ts | 19 +-- .../getEmitOutputWithDeclarationFile3.ts | 2 +- ...utputWithSemanticErrorsForMultipleFiles.ts | 2 +- 59 files changed, 601 insertions(+), 478 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 50dcbd21fdc..7eb13e52a29 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10111,11 +10111,6 @@ module ts { return isImportResolvedToValue(getSymbolOfNode(node)); } - function hasSemanticDiagnostics(sourceFile?: SourceFile) { - // Return true if there is any semantic error in a file or globally - return getDiagnostics(sourceFile).length > 0 || getGlobalDiagnostics().length > 0; - } - function isImportResolvedToValue(symbol: Symbol): boolean { var target = resolveImport(symbol); // const enums and modules that contain only const enums are not considered values from the emit perespective @@ -10210,7 +10205,6 @@ module ts { getNodeCheckFlags, getEnumMemberValue, isTopLevelValueImportWithEntityName, - hasSemanticDiagnostics, isDeclarationVisible, isImplementationOfOverload, writeTypeOfDeclaration, @@ -10226,14 +10220,15 @@ module ts { // Bind all source files and propagate errors forEach(host.getSourceFiles(), file => { bindSourceFile(file); - forEach(file.bindDiagnostics, d => diagnostics.add(d)); }); + // Initialize global symbol table forEach(host.getSourceFiles(), file => { if (!isExternalModule(file)) { extendSymbolTable(globals, file.locals); } }); + // Initialize special symbols getSymbolLinks(undefinedSymbol).type = undefinedType; getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 9b852a37ff6..b82ca2f07af 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -118,6 +118,12 @@ module ts { return result; } + export function addRange(to: T[], from: T[]): void { + for (var i = 0, n = from.length; i < n; i++) { + to.push(from[i]); + } + } + /** * Returns the last element of an array if non-empty, undefined otherwise. */ @@ -369,6 +375,10 @@ module ts { return text1 ? 1 : -1; } + export function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] { + return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); + } + export function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] { if (diagnostics.length < 2) { return diagnostics; diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9b080fa4c39..467bef144fe 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4395,13 +4395,13 @@ module ts { } } - var hasSemanticDiagnostics = false; var isEmitBlocked = false; + var isDeclarationEmitBlocked = false; if (targetSourceFile === undefined) { // No targetSourceFile is specified (e.g. calling emitter from batch compiler) - hasSemanticDiagnostics = resolver.hasSemanticDiagnostics(); isEmitBlocked = host.isEmitBlocked(); + isDeclarationEmitBlocked = host.isDeclarationEmitBlocked(); forEach(host.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { @@ -4418,8 +4418,8 @@ 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 - hasSemanticDiagnostics = resolver.hasSemanticDiagnostics(targetSourceFile); isEmitBlocked = host.isEmitBlocked(targetSourceFile); + isDeclarationEmitBlocked = host.isDeclarationEmitBlocked(targetSourceFile); var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); emitFile(jsFilePath, targetSourceFile); @@ -4429,8 +4429,8 @@ module ts { // Emit all, non-external-module file, into one single output file forEach(host.getSourceFiles(), sourceFile => { if (!shouldEmitToOwnFile(sourceFile, compilerOptions)) { - hasSemanticDiagnostics = hasSemanticDiagnostics || resolver.hasSemanticDiagnostics(sourceFile); isEmitBlocked = isEmitBlocked || host.isEmitBlocked(sourceFile); + isDeclarationEmitBlocked = isDeclarationEmitBlocked || host.isDeclarationEmitBlocked(sourceFile); } }); @@ -4441,15 +4441,14 @@ module ts { function emitFile(jsFilePath: string, sourceFile?: SourceFile) { if (!isEmitBlocked) { emitJavaScript(jsFilePath, sourceFile); - if (!hasSemanticDiagnostics && compilerOptions.declaration) { + if (!isDeclarationEmitBlocked && compilerOptions.declaration) { writeDeclarationFile(jsFilePath, sourceFile); } } } // Sort and make the unique list of diagnostics - diagnostics.sort(compareDiagnostics); - diagnostics = deduplicateSortedDiagnostics(diagnostics); + diagnostics = sortAndDeduplicateDiagnostics(diagnostics); // Update returnCode if there is any EmitterError var hasEmitterError = forEach(diagnostics, diagnostic => diagnostic.category === DiagnosticCategory.Error); @@ -4457,13 +4456,13 @@ module ts { // Check and update returnCode for syntactic and semantic var emitResultStatus: EmitReturnStatus; if (isEmitBlocked) { - emitResultStatus = EmitReturnStatus.AllOutputGenerationSkipped; + emitResultStatus = EmitReturnStatus.DiagnosticsPresent_AllOutputsSkipped; } else if (hasEmitterError) { emitResultStatus = EmitReturnStatus.EmitErrorsEncountered; - } else if (hasSemanticDiagnostics && compilerOptions.declaration) { - emitResultStatus = EmitReturnStatus.DeclarationGenerationSkipped; - } else if (hasSemanticDiagnostics && !compilerOptions.declaration) { - emitResultStatus = EmitReturnStatus.JSGeneratedWithSemanticErrors; + } else if (isDeclarationEmitBlocked && compilerOptions.declaration) { + emitResultStatus = EmitReturnStatus.DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated; + } else if (isDeclarationEmitBlocked && !compilerOptions.declaration) { + emitResultStatus = EmitReturnStatus.DiagnosticsPresent_JavaScriptGenerated; } else { emitResultStatus = EmitReturnStatus.Succeeded; } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4f23e2f30a7..05b5ea55505 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -357,7 +357,7 @@ module ts { forEachChild(sourceFile, walk); } - export function getSyntacticDiagnostics(sourceFile: SourceFile) { + export function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[] { if (!sourceFile.syntacticDiagnostics) { sourceFile.syntacticDiagnostics = sourceFile.referenceDiagnostics.concat(sourceFile.parseDiagnostics); } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 85181b2aa55..e60a9e9f188 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -75,6 +75,37 @@ module ts { }; } + export function getPreEmitDiagnostics(program: Program): Diagnostic[] { + var diagnostics = program.getSyntacticDiagnostics().concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics()); + return sortAndDeduplicateDiagnostics(diagnostics); + } + + export function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string { + if (typeof messageText === "string") { + return messageText; + } + else { + var diagnosticChain = messageText; + var result = ""; + + var indent = 0; + while (diagnosticChain) { + if (indent) { + result += newLine; + + for (var i = 0; i < indent; i++) { + result += " "; + } + } + result += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + + return result; + } + } + export function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program { var program: Program; var files: SourceFile[] = []; @@ -97,10 +128,9 @@ module ts { getSourceFile: getSourceFile, getSourceFiles: () => files, getCompilerOptions: () => options, - getDiagnostics, + getSyntacticDiagnostics, getGlobalDiagnostics, - getTypeCheckerDiagnostics, - getTypeCheckerGlobalDiagnostics, + getSemanticDiagnostics, getDeclarationDiagnostics, getTypeChecker, getDiagnosticsProducingTypeChecker, @@ -116,7 +146,7 @@ module ts { }; return program; - function getEmitHost(writeFileCallback?: WriteFileCallback) { + function getEmitHost(writeFileCallback?: WriteFileCallback): EmitHost { return { getCanonicalFileName: host.getCanonicalFileName, getCommonSourceDirectory: program.getCommonSourceDirectory, @@ -126,17 +156,28 @@ module ts { getSourceFile: program.getSourceFile, getSourceFiles: program.getSourceFiles, isEmitBlocked, + isDeclarationEmitBlocked, writeFile: writeFileCallback || host.writeFile, }; } + function hasPreEmitDiagnostics(sourceFile?: SourceFile): boolean { + var hasSyntacticDiagnostics = program.getSyntacticDiagnostics(sourceFile).length > 0; + var hasSemanticDiagnostics = program.getSemanticDiagnostics(sourceFile).length > 0; - function isEmitBlocked(sourceFile?: SourceFile): boolean { - if (options.noEmitOnError) { - return getDiagnostics(sourceFile).length !== 0 || getTypeCheckerDiagnostics(sourceFile).length !== 0; + if (hasSyntacticDiagnostics || hasSemanticDiagnostics) { + return true; } - return false; + return !sourceFile && program.getGlobalDiagnostics().length > 0; + } + + function isEmitBlocked(sourceFile?: SourceFile): boolean { + return options.noEmitOnError && hasPreEmitDiagnostics(sourceFile); + } + + function isDeclarationEmitBlocked(sourceFile?: SourceFile) { + return hasPreEmitDiagnostics(sourceFile); } function getDiagnosticsProducingTypeChecker() { @@ -170,20 +211,51 @@ module ts { return hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; } - function getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[] { - return getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile); + function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { + if (sourceFile) { + return ts.getSyntacticDiagnostics(sourceFile); + } + + var allDiagnostics: Diagnostic[] = []; + forEach(program.getSourceFiles(), sourceFile => { + addRange(allDiagnostics, ts.getSyntacticDiagnostics(sourceFile)); + }); + + return sortAndDeduplicateDiagnostics(allDiagnostics); } - function getTypeCheckerGlobalDiagnostics(): Diagnostic[] { - return getDiagnosticsProducingTypeChecker().getGlobalDiagnostics(); + function getSemanticDiagnosticsForFile(sourceFile: SourceFile): Diagnostic[] { + var typeChecker = getDiagnosticsProducingTypeChecker(); + + Debug.assert(!!sourceFile.bindDiagnostics); + var bindDiagnostics = sourceFile.bindDiagnostics; + var checkDiagnostics = typeChecker.getDiagnostics(sourceFile); + var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + + return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics); } - function getDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ - return sourceFile ? diagnostics.getDiagnostics(sourceFile.fileName) : diagnostics.getDiagnostics(); + function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { + if (sourceFile) { + return sortAndDeduplicateDiagnostics(getSemanticDiagnosticsForFile(sourceFile)); + } + + var allDiagnostics: Diagnostic[] = []; + forEach(program.getSourceFiles(), sourceFile => { + addRange(allDiagnostics, getSemanticDiagnosticsForFile(sourceFile)); + }); + + return sortAndDeduplicateDiagnostics(allDiagnostics); } function getGlobalDiagnostics(): Diagnostic[]{ - return diagnostics.getGlobalDiagnostics(); + var typeChecker = getDiagnosticsProducingTypeChecker(); + + var allDiagnostics: Diagnostic[] = []; + addRange(allDiagnostics, typeChecker.getGlobalDiagnostics()); + addRange(allDiagnostics, diagnostics.getGlobalDiagnostics()); + + return sortAndDeduplicateDiagnostics(allDiagnostics); } function hasExtension(fileName: string): boolean { @@ -272,9 +344,6 @@ module ts { else { files.push(file); } - forEach(getSyntacticDiagnostics(file), e => { - diagnostics.add(e); - }); } } return file; diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 15f97e028fc..541a64b6473 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -364,13 +364,19 @@ module ts { function compileProgram(): EmitReturnStatus { // First get any syntactic errors. - var errors = program.getDiagnostics(); + var errors = program.getSyntacticDiagnostics(); reportDiagnostics(errors); - // If we didn't have any syntactic errors, then also try getting the semantic errors. + // If we didn't have any syntactic errors, then also try getting the global and + // semantic errors. if (errors.length === 0) { - var errors = program.getTypeCheckerDiagnostics(); + var errors = program.getGlobalDiagnostics(); reportDiagnostics(errors); + + if (errors.length === 0) { + var errors = program.getSemanticDiagnostics(); + reportDiagnostics(errors); + } } // If the user doesn't want us to emit, then we're done at this point. diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 467d9b6cc90..75cee5e7314 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -946,13 +946,10 @@ module ts { */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - // These will merge with the below diagnostics function in a followup checkin. - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; - - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; // Gets a type checker that can be used to semantically analyze source fils in the program. getTypeChecker(): TypeChecker; @@ -992,12 +989,26 @@ module ts { // Return code used by getEmitOutput function to indicate status of the function export enum EmitReturnStatus { - Succeeded = 0, // All outputs generated if requested (.js, .map, .d.ts), no errors reported - AllOutputGenerationSkipped = 1, // No .js generated because of syntax errors, nothing generated - JSGeneratedWithSemanticErrors = 2, // .js and .map generated with semantic errors - DeclarationGenerationSkipped = 3, // .d.ts generation skipped because of semantic errors or declaration emitter specific errors; Output .js with semantic errors - EmitErrorsEncountered = 4, // Emitter errors occurred during emitting process - CompilerOptionsErrors = 5, // Errors occurred in parsing compiler options, nothing generated + // All outputs generated if requested (.js, .map, .d.ts), no errors reported + Succeeded = 0, + + // No .js, .map or d.ts generated because of diagnostics and the presence of the + // -noEmitOnError optoin. + DiagnosticsPresent_AllOutputsSkipped = 1, + + // .js and .map generated. However, diagnostics were generated as well. + // No .d.ts was requested or generated. + DiagnosticsPresent_JavaScriptGenerated = 2, + + // .js, .map generated. .d.ts was requested but was not generated due to the + // presence of diagnostics. + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, + + // Emitter errors occurred during emitting process. + EmitErrorsEncountered = 4, + + // Errors occurred in parsing compiler options, nothing generated + CompilerOptionsErrors = 5, } export interface EmitResult { @@ -1137,7 +1148,6 @@ module ts { isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; getEnumMemberValue(node: EnumMember): number; - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 4204acc4716..8291520da82 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -25,7 +25,9 @@ module ts { export interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; + isEmitBlocked(sourceFile?: SourceFile): boolean; + isDeclarationEmitBlocked(sourceFile?: SourceFile): boolean; getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; @@ -210,36 +212,10 @@ module ts { length, code: messageChain.code, category: messageChain.category, - messageText: messageChain + messageText: messageChain.next ? messageChain : messageChain.messageText }; } - export function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string { - if (typeof messageText === "string") { - return messageText; - } - else { - var diagnosticChain = messageText; - var result = ""; - - var indent = 0; - while (diagnosticChain) { - if (indent) { - result += newLine; - - for (var i = 0; i < indent; i++) { - result += " "; - } - } - result += diagnosticChain.messageText; - indent++; - diagnosticChain = diagnosticChain.next; - } - - return result; - } - } - export function getErrorSpanForNode(node: Node): Node { var errorSpan: Node; switch (node.kind) { @@ -1144,7 +1120,7 @@ module ts { } } - return sortAndDeplicateList(allDiagnostics); + return sortAndDeduplicateDiagnostics(allDiagnostics); } function sortAndDeduplicate() { @@ -1153,17 +1129,13 @@ module ts { } diagnosticsModified = false; - nonFileDiagnostics = sortAndDeplicateList(nonFileDiagnostics); + nonFileDiagnostics = sortAndDeduplicateDiagnostics(nonFileDiagnostics); for (var key in fileDiagnostics) { if (hasProperty(fileDiagnostics, key)) { - fileDiagnostics[key] = sortAndDeplicateList(fileDiagnostics[key]); + fileDiagnostics[key] = sortAndDeduplicateDiagnostics(fileDiagnostics[key]); } } } - - function sortAndDeplicateList(diagnostics: Diagnostic[]): Diagnostic[] { - return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)) - } } } \ No newline at end of file diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 5e046c070ab..5ce3d3f37b9 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1142,14 +1142,23 @@ module FourSlash { var emitOutput = this.languageService.getEmitOutput(emitFile.fileName); var emitOutputStatus = emitOutput.emitOutputStatus; // Print emitOutputStatus in readable format - resultString += "EmitOutputStatus : " + ts.EmitReturnStatus[emitOutputStatus]; - resultString += "\n"; + resultString += "EmitOutputStatus : " + ts.EmitReturnStatus[emitOutputStatus] + ts.sys.newLine; + + if (emitOutputStatus !== ts.EmitReturnStatus.Succeeded) { + resultString += "Diagnostics:" + ts.sys.newLine; + var diagnostics = ts.getPreEmitDiagnostics(this.languageService.getProgram()); + for (var i = 0, n = diagnostics.length; i < n; i++) { + resultString += " " + diagnostics[0].messageText + ts.sys.newLine; + } + } + emitOutput.outputFiles.forEach((outputFile, idx, array) => { - var fileName = "FileName : " + outputFile.name + "\n"; + var fileName = "FileName : " + outputFile.name + ts.sys.newLine; resultString = resultString + fileName + outputFile.text; }); - resultString += "\n"; + resultString += ts.sys.newLine; }); + return resultString; }, true /* run immediately */); @@ -2215,11 +2224,11 @@ module FourSlash { ts.sys.useCaseSensitiveFileNames); // TODO (drosen): We need to enforce checking on these tests. var program = ts.createProgram([Harness.Compiler.fourslashFileName, fileName], { out: "fourslashTestOutput.js", noResolve: true, target: ts.ScriptTarget.ES3 }, host); - var checker = ts.createTypeChecker(program, /*produceDiagnostics*/ true); - var errors = program.getDiagnostics().concat(checker.getDiagnostics()); - if (errors.length > 0) { - throw new Error('Error compiling ' + fileName + ': ' + errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, ts.sys.newLine)).join('\r\n')); + var diagnostics = ts.getPreEmitDiagnostics(program); + if (diagnostics.length > 0) { + throw new Error('Error compiling ' + fileName + ': ' + + diagnostics.map(e => ts.flattenDiagnosticMessageText(e.messageText, ts.sys.newLine)).join('\r\n')); } program.emit(); result = result || ''; // Might have an empty fourslash file diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 84aaf66be3d..866652e2e26 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -1083,10 +1083,11 @@ module Harness { (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), options.target, useCaseSensitiveFileNames, currentDirectory)); + debugger; var emitResult = program.emit(); var errors: HarnessDiagnostic[] = []; - program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(emitResult.diagnostics).forEach(err => { + ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics).forEach(err => { // TODO: new compiler formats errors after this point to add . and newlines so we'll just do it manually for now errors.push(getMinimalDiagnostic(err)); }); diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 53ce8e507a0..0fde9a9d77c 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -127,23 +127,20 @@ class ProjectRunner extends RunnerBase { writeFile: (fileName: string, data: string, writeByteOrderMark: boolean) => void): CompileProjectFilesResult { var program = ts.createProgram(getInputFiles(), createCompilerOptions(), createCompilerHost()); - var errors = program.getDiagnostics(); - var sourceMapData: ts.SourceMapData[] = null; - if (!errors.length) { - errors = program.getTypeCheckerDiagnostics(); - var emitResult = program.emit(); - errors = ts.concatenate(errors, emitResult.diagnostics); - sourceMapData = emitResult.sourceMaps; + var errors = ts.getPreEmitDiagnostics(program); - // Clean up source map data that will be used in baselining - if (sourceMapData) { - for (var i = 0; i < sourceMapData.length; i++) { - for (var j = 0; j < sourceMapData[i].sourceMapSources.length; j++) { - sourceMapData[i].sourceMapSources[j] = cleanProjectUrl(sourceMapData[i].sourceMapSources[j]); - } - sourceMapData[i].jsSourceMappingURL = cleanProjectUrl(sourceMapData[i].jsSourceMappingURL); - sourceMapData[i].sourceMapSourceRoot = cleanProjectUrl(sourceMapData[i].sourceMapSourceRoot); + var emitResult = program.emit(); + errors = ts.concatenate(errors, emitResult.diagnostics); + var sourceMapData = emitResult.sourceMaps; + + // Clean up source map data that will be used in baselining + if (sourceMapData) { + for (var i = 0; i < sourceMapData.length; i++) { + for (var j = 0; j < sourceMapData[i].sourceMapSources.length; j++) { + sourceMapData[i].sourceMapSources[j] = cleanProjectUrl(sourceMapData[i].sourceMapSources[j]); } + sourceMapData[i].jsSourceMappingURL = cleanProjectUrl(sourceMapData[i].jsSourceMappingURL); + sourceMapData[i].sourceMapSourceRoot = cleanProjectUrl(sourceMapData[i].sourceMapSourceRoot); } } diff --git a/src/services/services.ts b/src/services/services.ts index 7311e5f7596..da695920cd7 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2168,7 +2168,7 @@ module ts { fileName = normalizeSlashes(fileName); - return program.getDiagnostics(getValidSourceFile(fileName)); + return program.getSyntacticDiagnostics(getValidSourceFile(fileName)); } /** @@ -2179,18 +2179,19 @@ module ts { synchronizeHostData(); fileName = normalizeSlashes(fileName) - var compilerOptions = program.getCompilerOptions(); var targetSourceFile = getValidSourceFile(fileName); // Only perform the action per file regardless of '-out' flag as LanguageServiceHost is expected to call this function per file. // Therefore only get diagnostics for given file. - var allDiagnostics = program.getTypeCheckerDiagnostics(targetSourceFile); - if (compilerOptions.declaration) { - // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface - allDiagnostics = allDiagnostics.concat(program.getDeclarationDiagnostics(targetSourceFile)); + var semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile); + if (!program.getCompilerOptions().declaration) { + return semanticDiagnostics; } - return allDiagnostics + + // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface + var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile); + return semanticDiagnostics.concat(declarationDiagnostics); } function getCompilerOptionsDiagnostics() { diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index db4f29683d2..c64da05d512 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -10,24 +10,23 @@ declare var process: any; declare var console: any; +declare var os: any; import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var program = ts.createProgram(fileNames, options); - var result = program.emit(); + var emitResult = program.emit(); - var allDiagnostics = program.getDiagnostics() - .concat(program.getTypeCheckerDiagnostics()) - .concat(result.diagnostics); + var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); allDiagnostics.forEach(diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); + console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); }); - console.log(`Process exiting with code '${result.emitResultStatus}'.`); - process.exit(result.emitResultStatus); + console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); + process.exit(emitResult.emitResultStatus); } compile(process.argv.slice(2), { @@ -752,11 +751,10 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; } @@ -781,9 +779,9 @@ declare module "typescript" { } enum EmitReturnStatus { Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, + DiagnosticsPresent_AllOutputsSkipped = 1, + DiagnosticsPresent_JavaScriptGenerated = 2, + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, EmitErrorsEncountered = 4, CompilerOptionsErrors = 5, } @@ -888,7 +886,6 @@ declare module "typescript" { isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; getEnumMemberValue(node: EnumMember): number; - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; @@ -1422,6 +1419,8 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { @@ -1923,14 +1922,14 @@ declare module "typescript" { var ts = require("typescript"); function compile(fileNames, options) { var program = ts.createProgram(fileNames, options); - var result = program.emit(); - var allDiagnostics = program.getDiagnostics().concat(program.getTypeCheckerDiagnostics()).concat(result.diagnostics); + var emitResult = program.emit(); + var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); allDiagnostics.forEach(function (diagnostic) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + diagnostic.messageText); + console.log(diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)); }); - console.log("Process exiting with code '" + result.emitResultStatus + "'."); - process.exit(result.emitResultStatus); + console.log("Process exiting with code '" + emitResult.emitResultStatus + "'."); + process.exit(emitResult.emitResultStatus); } exports.compile = compile; compile(process.argv.slice(2), { diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 5124312b6d3..e5ac6de7c10 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -12,6 +12,9 @@ declare var process: any; declare var console: any; >console : any +declare var os: any; +>os : any + import ts = require("typescript"); >ts : typeof ts @@ -31,43 +34,33 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >fileNames : string[] >options : ts.CompilerOptions - var result = program.emit(); ->result : ts.EmitResult + var emitResult = program.emit(); +>emitResult : ts.EmitResult >program.emit() : ts.EmitResult >program.emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult >program : ts.Program >emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult - var allDiagnostics = program.getDiagnostics() + var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); >allDiagnostics : ts.Diagnostic[] ->program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) .concat(result.diagnostics) : ts.Diagnostic[] ->program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) .concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->program.getDiagnostics() .concat(program.getTypeCheckerDiagnostics()) : ts.Diagnostic[] ->program.getDiagnostics() .concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->program.getDiagnostics() : ts.Diagnostic[] ->program.getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics) : ts.Diagnostic[] +>ts.getPreEmitDiagnostics(program).concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } +>ts.getPreEmitDiagnostics(program) : ts.Diagnostic[] +>ts.getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[] +>ts : typeof ts +>getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[] >program : ts.Program ->getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] - - .concat(program.getTypeCheckerDiagnostics()) >concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->program.getTypeCheckerDiagnostics() : ts.Diagnostic[] ->program.getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] ->program : ts.Program ->getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] - - .concat(result.diagnostics); ->concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } ->result.diagnostics : ts.Diagnostic[] ->result : ts.EmitResult +>emitResult.diagnostics : ts.Diagnostic[] +>emitResult : ts.EmitResult >diagnostics : ts.Diagnostic[] allDiagnostics.forEach(diagnostic => { ->allDiagnostics.forEach(diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); }) : void +>allDiagnostics.forEach(diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); }) : void >allDiagnostics.forEach : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => void, thisArg?: any) => void >allDiagnostics : ts.Diagnostic[] >forEach : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => void, thisArg?: any) => void ->diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); } : (diagnostic: ts.Diagnostic) => void +>diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); } : (diagnostic: ts.Diagnostic) => void >diagnostic : ts.Diagnostic var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); @@ -82,8 +75,8 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >diagnostic : ts.Diagnostic >start : number - console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); ->console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`) : any + console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); +>console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`) : any >console.log : any >console : any >log : any @@ -98,28 +91,35 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void >lineChar.character : number >lineChar : ts.LineAndCharacter >character : number +>ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL) : string +>ts.flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string +>ts : typeof ts +>flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string >diagnostic.messageText : string | ts.DiagnosticMessageChain >diagnostic : ts.Diagnostic >messageText : string | ts.DiagnosticMessageChain +>os.EOL : any +>os : any +>EOL : any }); - console.log(`Process exiting with code '${result.emitResultStatus}'.`); ->console.log(`Process exiting with code '${result.emitResultStatus}'.`) : any + console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); +>console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`) : any >console.log : any >console : any >log : any ->result.emitResultStatus : ts.EmitReturnStatus ->result : ts.EmitResult +>emitResult.emitResultStatus : ts.EmitReturnStatus +>emitResult : ts.EmitResult >emitResultStatus : ts.EmitReturnStatus - process.exit(result.emitResultStatus); ->process.exit(result.emitResultStatus) : any + process.exit(emitResult.emitResultStatus); +>process.exit(emitResult.emitResultStatus) : any >process.exit : any >process : any >exit : any ->result.emitResultStatus : ts.EmitReturnStatus ->result : ts.EmitResult +>emitResult.emitResultStatus : ts.EmitReturnStatus +>emitResult : ts.EmitResult >emitResultStatus : ts.EmitReturnStatus } @@ -2268,18 +2268,8 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; ->getTypeCheckerGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSyntacticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2288,8 +2278,14 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getDeclarationDiagnostics : (sourceFile: SourceFile) => Diagnostic[] + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSemanticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getDeclarationDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2359,14 +2355,14 @@ declare module "typescript" { Succeeded = 0, >Succeeded : EmitReturnStatus - AllOutputGenerationSkipped = 1, ->AllOutputGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_AllOutputsSkipped = 1, +>DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus - JSGeneratedWithSemanticErrors = 2, ->JSGeneratedWithSemanticErrors : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated = 2, +>DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - DeclarationGenerationSkipped = 3, ->DeclarationGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, +>DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus EmitErrorsEncountered = 4, >EmitErrorsEncountered : EmitReturnStatus @@ -2852,11 +2848,6 @@ declare module "typescript" { >node : EnumMember >EnumMember : EnumMember - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; ->hasSemanticDiagnostics : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -4556,6 +4547,18 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost + function getPreEmitDiagnostics(program: Program): Diagnostic[]; +>getPreEmitDiagnostics : (program: Program) => Diagnostic[] +>program : Program +>Program : Program +>Diagnostic : Diagnostic + + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; +>flattenDiagnosticMessageText : (messageText: string | DiagnosticMessageChain, newLine: string) => string +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain +>newLine : string + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; >createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 646d0e47a4e..b84bcdb33fd 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -783,11 +783,10 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; } @@ -812,9 +811,9 @@ declare module "typescript" { } enum EmitReturnStatus { Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, + DiagnosticsPresent_AllOutputsSkipped = 1, + DiagnosticsPresent_JavaScriptGenerated = 2, + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, EmitErrorsEncountered = 4, CompilerOptionsErrors = 5, } @@ -919,7 +918,6 @@ declare module "typescript" { isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; getEnumMemberValue(node: EnumMember): number; - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; @@ -1453,6 +1451,8 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 1e917893832..798d41e70ee 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2415,18 +2415,8 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; ->getTypeCheckerGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSyntacticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2435,8 +2425,14 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getDeclarationDiagnostics : (sourceFile: SourceFile) => Diagnostic[] + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSemanticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getDeclarationDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2506,14 +2502,14 @@ declare module "typescript" { Succeeded = 0, >Succeeded : EmitReturnStatus - AllOutputGenerationSkipped = 1, ->AllOutputGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_AllOutputsSkipped = 1, +>DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus - JSGeneratedWithSemanticErrors = 2, ->JSGeneratedWithSemanticErrors : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated = 2, +>DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - DeclarationGenerationSkipped = 3, ->DeclarationGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, +>DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus EmitErrorsEncountered = 4, >EmitErrorsEncountered : EmitReturnStatus @@ -2999,11 +2995,6 @@ declare module "typescript" { >node : EnumMember >EnumMember : EnumMember - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; ->hasSemanticDiagnostics : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -4703,6 +4694,18 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost + function getPreEmitDiagnostics(program: Program): Diagnostic[]; +>getPreEmitDiagnostics : (program: Program) => Diagnostic[] +>program : Program +>Program : Program +>Diagnostic : Diagnostic + + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; +>flattenDiagnosticMessageText : (messageText: string | DiagnosticMessageChain, newLine: string) => string +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain +>newLine : string + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; >createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 280c5202db3..4b235f25df3 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -12,6 +12,7 @@ declare var process: any; declare var console: any; declare var fs: any; declare var path: any; +declare var os: any; import ts = require("typescript"); @@ -45,17 +46,17 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { var program = ts.createProgram(["file.ts"], compilerOptions, compilerHost); // Query for early errors - var errors = program.getDiagnostics(); - // Do not generate code in the presence of early errors - if (!errors.length) { - // Type check and get semantic errors - errors = program.getTypeCheckerDiagnostics(); - // Generate output - program.emit(); - } + var errors = ts.getPreEmitDiagnostics(program); + var emitResult = program.emit(); + + errors = errors.concat(emitResult.diagnostics); + return { outputs: outputs, - errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) + errors: errors.map(function (e) { + return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); + }) }; } @@ -783,11 +784,10 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; } @@ -812,9 +812,9 @@ declare module "typescript" { } enum EmitReturnStatus { Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, + DiagnosticsPresent_AllOutputsSkipped = 1, + DiagnosticsPresent_JavaScriptGenerated = 2, + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, EmitErrorsEncountered = 4, CompilerOptionsErrors = 5, } @@ -919,7 +919,6 @@ declare module "typescript" { isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; getEnumMemberValue(node: EnumMember): number; - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; @@ -1453,6 +1452,8 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { @@ -1978,18 +1979,13 @@ function transform(contents, compilerOptions) { // Create a program from inputs var program = ts.createProgram(["file.ts"], compilerOptions, compilerHost); // Query for early errors - var errors = program.getDiagnostics(); - // Do not generate code in the presence of early errors - if (!errors.length) { - // Type check and get semantic errors - errors = program.getTypeCheckerDiagnostics(); - // Generate output - program.emit(); - } + var errors = ts.getPreEmitDiagnostics(program); + var emitResult = program.emit(); + errors = errors.concat(emitResult.diagnostics); return { outputs: outputs, errors: errors.map(function (e) { - return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; + return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); }) }; } diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index c8b7e10fa89..6a149ddbae3 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -18,6 +18,9 @@ declare var fs: any; declare var path: any; >path : any +declare var os: any; +>os : any + import ts = require("typescript"); >ts : typeof ts @@ -147,52 +150,50 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { >compilerHost : { getSourceFile: (fileName: any, target: any) => ts.SourceFile; writeFile: (name: any, text: any, writeByteOrderMark: any) => void; getDefaultLibFileName: () => string; useCaseSensitiveFileNames: () => boolean; getCanonicalFileName: (fileName: any) => any; getCurrentDirectory: () => string; getNewLine: () => string; } // Query for early errors - var errors = program.getDiagnostics(); + var errors = ts.getPreEmitDiagnostics(program); >errors : ts.Diagnostic[] ->program.getDiagnostics() : ts.Diagnostic[] ->program.getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] +>ts.getPreEmitDiagnostics(program) : ts.Diagnostic[] +>ts.getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[] +>ts : typeof ts +>getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[] >program : ts.Program ->getDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] - // Do not generate code in the presence of early errors - if (!errors.length) { ->!errors.length : boolean ->errors.length : number ->errors : ts.Diagnostic[] ->length : number - - // Type check and get semantic errors - errors = program.getTypeCheckerDiagnostics(); ->errors = program.getTypeCheckerDiagnostics() : ts.Diagnostic[] ->errors : ts.Diagnostic[] ->program.getTypeCheckerDiagnostics() : ts.Diagnostic[] ->program.getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] ->program : ts.Program ->getTypeCheckerDiagnostics : (sourceFile?: ts.SourceFile) => ts.Diagnostic[] - - // Generate output - program.emit(); + var emitResult = program.emit(); +>emitResult : ts.EmitResult >program.emit() : ts.EmitResult >program.emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult >program : ts.Program >emit : (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback) => ts.EmitResult - } + + errors = errors.concat(emitResult.diagnostics); +>errors = errors.concat(emitResult.diagnostics) : ts.Diagnostic[] +>errors : ts.Diagnostic[] +>errors.concat(emitResult.diagnostics) : ts.Diagnostic[] +>errors.concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } +>errors : ts.Diagnostic[] +>concat : { (...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; } +>emitResult.diagnostics : ts.Diagnostic[] +>emitResult : ts.EmitResult +>diagnostics : ts.Diagnostic[] + return { ->{ outputs: outputs, errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) } : { outputs: any[]; errors: string[]; } +>{ outputs: outputs, errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); }) } : { outputs: any[]; errors: string[]; } outputs: outputs, >outputs : any[] >outputs : any[] - errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) + errors: errors.map(function (e) { >errors : string[] ->errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) : string[] +>errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); }) : string[] >errors.map : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => U, thisArg?: any) => U[] >errors : ts.Diagnostic[] >map : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => U, thisArg?: any) => U[] ->function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; } : (e: ts.Diagnostic) => string +>function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); } : (e: ts.Diagnostic) => string >e : ts.Diagnostic ->e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText : string + + return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " +>e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + ts.flattenDiagnosticMessageText(e.messageText, os.EOL) : string >e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " : string >e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line : string >e.file.fileName + "(" : string @@ -212,10 +213,20 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { >e : ts.Diagnostic >start : number >line : number + + + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); +>ts.flattenDiagnosticMessageText(e.messageText, os.EOL) : string +>ts.flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string +>ts : typeof ts +>flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string >e.messageText : string | ts.DiagnosticMessageChain >e : ts.Diagnostic >messageText : string | ts.DiagnosticMessageChain +>os.EOL : any +>os : any +>EOL : any + }) }; } @@ -2356,18 +2367,8 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; ->getTypeCheckerGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSyntacticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2376,8 +2377,14 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getDeclarationDiagnostics : (sourceFile: SourceFile) => Diagnostic[] + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSemanticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getDeclarationDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2447,14 +2454,14 @@ declare module "typescript" { Succeeded = 0, >Succeeded : EmitReturnStatus - AllOutputGenerationSkipped = 1, ->AllOutputGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_AllOutputsSkipped = 1, +>DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus - JSGeneratedWithSemanticErrors = 2, ->JSGeneratedWithSemanticErrors : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated = 2, +>DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - DeclarationGenerationSkipped = 3, ->DeclarationGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, +>DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus EmitErrorsEncountered = 4, >EmitErrorsEncountered : EmitReturnStatus @@ -2940,11 +2947,6 @@ declare module "typescript" { >node : EnumMember >EnumMember : EnumMember - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; ->hasSemanticDiagnostics : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -4644,6 +4646,18 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost + function getPreEmitDiagnostics(program: Program): Diagnostic[]; +>getPreEmitDiagnostics : (program: Program) => Diagnostic[] +>program : Program +>Program : Program +>Diagnostic : Diagnostic + + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; +>flattenDiagnosticMessageText : (messageText: string | DiagnosticMessageChain, newLine: string) => string +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain +>newLine : string + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; >createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 89f3bc43d37..8c53f252843 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -821,11 +821,10 @@ declare module "typescript" { * will be invoked when writing the javascript and declaration files. */ emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; } @@ -850,9 +849,9 @@ declare module "typescript" { } enum EmitReturnStatus { Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, + DiagnosticsPresent_AllOutputsSkipped = 1, + DiagnosticsPresent_JavaScriptGenerated = 2, + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, EmitErrorsEncountered = 4, CompilerOptionsErrors = 5, } @@ -957,7 +956,6 @@ declare module "typescript" { isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; getEnumMemberValue(node: EnumMember): number; - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; @@ -1491,6 +1489,8 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index f286fe18eb2..8a1f4aa259d 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2541,18 +2541,8 @@ declare module "typescript" { >WriteFileCallback : WriteFileCallback >EmitResult : EmitResult - getTypeCheckerDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getTypeCheckerDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - - getTypeCheckerGlobalDiagnostics(): Diagnostic[]; ->getTypeCheckerGlobalDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; ->getDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSyntacticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2561,8 +2551,14 @@ declare module "typescript" { >getGlobalDiagnostics : () => Diagnostic[] >Diagnostic : Diagnostic - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getDeclarationDiagnostics : (sourceFile: SourceFile) => Diagnostic[] + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getSemanticDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] +>sourceFile : SourceFile +>SourceFile : SourceFile +>Diagnostic : Diagnostic + + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; +>getDeclarationDiagnostics : (sourceFile?: SourceFile) => Diagnostic[] >sourceFile : SourceFile >SourceFile : SourceFile >Diagnostic : Diagnostic @@ -2632,14 +2628,14 @@ declare module "typescript" { Succeeded = 0, >Succeeded : EmitReturnStatus - AllOutputGenerationSkipped = 1, ->AllOutputGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_AllOutputsSkipped = 1, +>DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus - JSGeneratedWithSemanticErrors = 2, ->JSGeneratedWithSemanticErrors : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated = 2, +>DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - DeclarationGenerationSkipped = 3, ->DeclarationGenerationSkipped : EmitReturnStatus + DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, +>DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus EmitErrorsEncountered = 4, >EmitErrorsEncountered : EmitReturnStatus @@ -3125,11 +3121,6 @@ declare module "typescript" { >node : EnumMember >EnumMember : EnumMember - hasSemanticDiagnostics(sourceFile?: SourceFile): boolean; ->hasSemanticDiagnostics : (sourceFile?: SourceFile) => boolean ->sourceFile : SourceFile ->SourceFile : SourceFile - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -4829,6 +4820,18 @@ declare module "typescript" { >CompilerOptions : CompilerOptions >CompilerHost : CompilerHost + function getPreEmitDiagnostics(program: Program): Diagnostic[]; +>getPreEmitDiagnostics : (program: Program) => Diagnostic[] +>program : Program +>Program : Program +>Diagnostic : Diagnostic + + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; +>flattenDiagnosticMessageText : (messageText: string | DiagnosticMessageChain, newLine: string) => string +>messageText : string | DiagnosticMessageChain +>DiagnosticMessageChain : DiagnosticMessageChain +>newLine : string + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; >createProgram : (rootNames: string[], options: CompilerOptions, host?: CompilerHost) => Program >rootNames : string[] diff --git a/tests/baselines/reference/declarationEmit_invalidReference2.js b/tests/baselines/reference/declarationEmit_invalidReference2.js index 78fb232cca7..0f8d5d4c07d 100644 --- a/tests/baselines/reference/declarationEmit_invalidReference2.js +++ b/tests/baselines/reference/declarationEmit_invalidReference2.js @@ -5,7 +5,3 @@ var x = 0; //// [declarationEmit_invalidReference2.js] /// var x = 0; - - -//// [declarationEmit_invalidReference2.d.ts] -declare var x: number; diff --git a/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline b/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline index 111448faa61..a8b6f8a9cd4 100644 --- a/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline +++ b/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline @@ -1,30 +1,30 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile1.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile1.js var x = 5; var Bar = (function () { function Bar() { } return Bar; })(); -FileName : tests/cases/fourslash/inputFile1.d.ts +FileName : tests/cases/fourslash/inputFile1.d.ts declare var x: number; declare class Bar { x: string; y: number; } - -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile2.js + +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile2.js var x1 = "hello world"; var Foo = (function () { function Foo() { } return Foo; })(); -FileName : tests/cases/fourslash/inputFile2.d.ts +FileName : tests/cases/fourslash/inputFile2.d.ts declare var x1: string; declare class Foo { x: string; y: number; } - + diff --git a/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline b/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline index a54108eb379..131b6cd98ed 100644 --- a/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline +++ b/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline @@ -1,5 +1,5 @@ -EmitOutputStatus : Succeeded -FileName : declSingleFile.js +EmitOutputStatus : Succeeded +FileName : declSingleFile.js var x = 5; var Bar = (function () { function Bar() { @@ -12,7 +12,7 @@ var Foo = (function () { } return Foo; })(); -FileName : declSingleFile.d.ts +FileName : declSingleFile.d.ts declare var x: number; declare class Bar { x: string; @@ -23,4 +23,4 @@ declare class Foo { x: string; y: number; } - + diff --git a/tests/baselines/reference/getEmitOutputExternalModule.baseline b/tests/baselines/reference/getEmitOutputExternalModule.baseline index 6c1b0552a49..dcfd9bd89cc 100644 --- a/tests/baselines/reference/getEmitOutputExternalModule.baseline +++ b/tests/baselines/reference/getEmitOutputExternalModule.baseline @@ -1,9 +1,9 @@ -EmitOutputStatus : Succeeded -FileName : declSingleFile.js +EmitOutputStatus : Succeeded +FileName : declSingleFile.js var x = 5; var Bar = (function () { function Bar() { } return Bar; })(); - + diff --git a/tests/baselines/reference/getEmitOutputExternalModule2.baseline b/tests/baselines/reference/getEmitOutputExternalModule2.baseline index 5613592b414..5ec634d37a5 100644 --- a/tests/baselines/reference/getEmitOutputExternalModule2.baseline +++ b/tests/baselines/reference/getEmitOutputExternalModule2.baseline @@ -1,5 +1,8 @@ -EmitOutputStatus : JSGeneratedWithSemanticErrors -FileName : declSingleFile.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated +Diagnostics: + Subsequent variable declarations must have the same type. Variable 'x' must be of type 'number', but here has type 'string'. + Subsequent variable declarations must have the same type. Variable 'x' must be of type 'number', but here has type 'string'. +FileName : declSingleFile.js var x = 5; var Bar = (function () { function Bar() { @@ -12,4 +15,4 @@ var Bar2 = (function () { } return Bar2; })(); - + diff --git a/tests/baselines/reference/getEmitOutputMapRoots.baseline b/tests/baselines/reference/getEmitOutputMapRoots.baseline index 733897879df..91cb853bdf0 100644 --- a/tests/baselines/reference/getEmitOutputMapRoots.baseline +++ b/tests/baselines/reference/getEmitOutputMapRoots.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : declSingleFile.js.map -{"version":3,"file":"declSingleFile.js","sourceRoot":"","sources":["../tests/cases/fourslash/inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : declSingleFile.js +EmitOutputStatus : Succeeded +FileName : declSingleFile.js.map +{"version":3,"file":"declSingleFile.js","sourceRoot":"","sources":["../tests/cases/fourslash/inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : declSingleFile.js var x = 109; var foo = "hello world"; var M = (function () { @@ -8,4 +8,4 @@ var M = (function () { } return M; })(); -//# sourceMappingURL=mapRootDir/declSingleFile.js.map +//# sourceMappingURL=mapRootDir/declSingleFile.js.map diff --git a/tests/baselines/reference/getEmitOutputNoErrors.baseline b/tests/baselines/reference/getEmitOutputNoErrors.baseline index b8eddab6a9c..7fb0ca2eee5 100644 --- a/tests/baselines/reference/getEmitOutputNoErrors.baseline +++ b/tests/baselines/reference/getEmitOutputNoErrors.baseline @@ -1,9 +1,9 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile.js var x; var M = (function () { function M() { } return M; })(); - + diff --git a/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline b/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline index 6be2d3e1d04..775cbf195c6 100644 --- a/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline +++ b/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline @@ -1,9 +1,9 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile2.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile2.js var x; var Foo = (function () { function Foo() { } return Foo; })(); - + diff --git a/tests/baselines/reference/getEmitOutputSingleFile.baseline b/tests/baselines/reference/getEmitOutputSingleFile.baseline index b5fc4214d7c..81ceb3f4357 100644 --- a/tests/baselines/reference/getEmitOutputSingleFile.baseline +++ b/tests/baselines/reference/getEmitOutputSingleFile.baseline @@ -1,5 +1,5 @@ -EmitOutputStatus : Succeeded -FileName : outputDir/singleFile.js +EmitOutputStatus : Succeeded +FileName : outputDir/singleFile.js var x; var Bar = (function () { function Bar() { @@ -12,4 +12,4 @@ var Foo = (function () { } return Foo; })(); - + diff --git a/tests/baselines/reference/getEmitOutputSingleFile2.baseline b/tests/baselines/reference/getEmitOutputSingleFile2.baseline index fcbd145361d..0f5fad8505d 100644 --- a/tests/baselines/reference/getEmitOutputSingleFile2.baseline +++ b/tests/baselines/reference/getEmitOutputSingleFile2.baseline @@ -1,8 +1,8 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile3.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile3.js exports.foo = 10; exports.bar = "hello world"; -FileName : tests/cases/fourslash/inputFile3.d.ts +FileName : tests/cases/fourslash/inputFile3.d.ts export declare var foo: number; export declare var bar: string; - + diff --git a/tests/baselines/reference/getEmitOutputSourceMap.baseline b/tests/baselines/reference/getEmitOutputSourceMap.baseline index c095c2f7542..553936bd91b 100644 --- a/tests/baselines/reference/getEmitOutputSourceMap.baseline +++ b/tests/baselines/reference/getEmitOutputSourceMap.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile.js.map -{"version":3,"file":"inputFile.js","sourceRoot":"","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile.js.map +{"version":3,"file":"inputFile.js","sourceRoot":"","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js var x = 109; var foo = "hello world"; var M = (function () { @@ -8,4 +8,4 @@ var M = (function () { } return M; })(); -//# sourceMappingURL=inputFile.js.map +//# sourceMappingURL=inputFile.js.map diff --git a/tests/baselines/reference/getEmitOutputSourceMap2.baseline b/tests/baselines/reference/getEmitOutputSourceMap2.baseline index 021b3918712..838a9a985eb 100644 --- a/tests/baselines/reference/getEmitOutputSourceMap2.baseline +++ b/tests/baselines/reference/getEmitOutputSourceMap2.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : sample/outDir/inputFile1.js.map -{"version":3,"file":"inputFile1.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : sample/outDir/inputFile1.js +EmitOutputStatus : Succeeded +FileName : sample/outDir/inputFile1.js.map +{"version":3,"file":"inputFile1.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : sample/outDir/inputFile1.js var x = 109; var foo = "hello world"; var M = (function () { @@ -8,12 +8,12 @@ var M = (function () { } return M; })(); -//# sourceMappingURL=inputFile1.js.map -EmitOutputStatus : Succeeded -FileName : sample/outDir/inputFile2.js.map -{"version":3,"file":"inputFile2.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile2.ts"],"names":[],"mappings":"AAAA,IAAI,KAAK,GAAG,aAAa,CAAC;AAC1B,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,CAAC;AACd,CAAC"}FileName : sample/outDir/inputFile2.js +//# sourceMappingURL=inputFile1.js.map +EmitOutputStatus : Succeeded +FileName : sample/outDir/inputFile2.js.map +{"version":3,"file":"inputFile2.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile2.ts"],"names":[],"mappings":"AAAA,IAAI,KAAK,GAAG,aAAa,CAAC;AAC1B,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,CAAC;AACd,CAAC"}FileName : sample/outDir/inputFile2.js var intro = "hello world"; if (intro !== undefined) { var k = 10; } -//# sourceMappingURL=inputFile2.js.map +//# sourceMappingURL=inputFile2.js.map diff --git a/tests/baselines/reference/getEmitOutputSourceRoot.baseline b/tests/baselines/reference/getEmitOutputSourceRoot.baseline index 38621490fe7..880ad48ded3 100644 --- a/tests/baselines/reference/getEmitOutputSourceRoot.baseline +++ b/tests/baselines/reference/getEmitOutputSourceRoot.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile.js.map -{"version":3,"file":"inputFile.js","sourceRoot":"sourceRootDir/","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile.js.map +{"version":3,"file":"inputFile.js","sourceRoot":"sourceRootDir/","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js var x = 109; var foo = "hello world"; var M = (function () { @@ -8,4 +8,4 @@ var M = (function () { } return M; })(); -//# sourceMappingURL=inputFile.js.map +//# sourceMappingURL=inputFile.js.map diff --git a/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline b/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline index 46e8a782a97..20ed671e8cf 100644 --- a/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline +++ b/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile1.js.map -{"version":3,"file":"inputFile1.js","sourceRoot":"sourceRootDir/","sources":["inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile1.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile1.js.map +{"version":3,"file":"inputFile1.js","sourceRoot":"sourceRootDir/","sources":["inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile1.js var x = 109; var foo = "hello world"; var M = (function () { @@ -8,14 +8,14 @@ var M = (function () { } return M; })(); -//# sourceMappingURL=inputFile1.js.map -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile2.js.map -{"version":3,"file":"inputFile2.js","sourceRoot":"sourceRootDir/","sources":["inputFile2.ts"],"names":["C","C.constructor"],"mappings":"AAAA,IAAI,GAAG,GAAG,wBAAwB,CAAC;AACnC,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile2.js +//# sourceMappingURL=inputFile1.js.map +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile2.js.map +{"version":3,"file":"inputFile2.js","sourceRoot":"sourceRootDir/","sources":["inputFile2.ts"],"names":["C","C.constructor"],"mappings":"AAAA,IAAI,GAAG,GAAG,wBAAwB,CAAC;AACnC,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile2.js var bar = "hello world Typescript"; var C = (function () { function C() { } return C; })(); -//# sourceMappingURL=inputFile2.js.map +//# sourceMappingURL=inputFile2.js.map diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline index 51ea0ffba1a..0d9c3c16f55 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline @@ -1,11 +1,11 @@ -EmitOutputStatus : Succeeded - -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile2.js +EmitOutputStatus : Succeeded + +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile2.js var x1 = "hello world"; var Foo = (function () { function Foo() { } return Foo; })(); - + diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline index c42cf8974cb..03b466d4dde 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline @@ -1,15 +1,15 @@ -EmitOutputStatus : Succeeded - -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile2.js +EmitOutputStatus : Succeeded + +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile2.js var Foo = (function () { function Foo() { } return Foo; })(); exports.Foo = Foo; - -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile3.js + +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile3.js var x = "hello"; - + diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline index 83837faece8..972d164af42 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline @@ -1,5 +1,5 @@ -EmitOutputStatus : Succeeded -FileName : declSingle.js +EmitOutputStatus : Succeeded +FileName : declSingle.js var x = "hello"; var x1 = 1000; - + diff --git a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline index e38f6a2021c..e9622faf16b 100644 --- a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline @@ -1,5 +1,8 @@ -EmitOutputStatus : JSGeneratedWithSemanticErrors -FileName : tests/cases/fourslash/inputFile1.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated +Diagnostics: + 'const' declarations are only available when targeting ECMAScript 6 and higher. + 'const' declarations are only available when targeting ECMAScript 6 and higher. +FileName : tests/cases/fourslash/inputFile1.js // File contains early errors. All outputs should be skipped. const uninitialized_const_error; - + diff --git a/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline b/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline index 359faef5fc1..d5bf626085e 100644 --- a/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline @@ -1,5 +1,6 @@ -EmitOutputStatus : EmitErrorsEncountered -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : EmitErrorsEncountered +Diagnostics: +FileName : tests/cases/fourslash/inputFile.js var M; (function (M) { var C = (function () { @@ -9,4 +10,4 @@ var M; })(); M.foo = new C(); })(M || (M = {})); - + diff --git a/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline b/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline index 2465f832b37..98df927aa4b 100644 --- a/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline +++ b/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline @@ -1,5 +1,6 @@ -EmitOutputStatus : EmitErrorsEncountered -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : EmitErrorsEncountered +Diagnostics: +FileName : tests/cases/fourslash/inputFile.js define(["require", "exports"], function (require, exports) { var C = (function () { function C() { @@ -11,4 +12,4 @@ define(["require", "exports"], function (require, exports) { M.foo = new C(); })(M = exports.M || (exports.M = {})); }); - + diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline index a1a721704a3..9143fe51318 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline @@ -1,4 +1,6 @@ -EmitOutputStatus : JSGeneratedWithSemanticErrors -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated +Diagnostics: + Type 'string' is not assignable to type 'number'. +FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; - + diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline index d9cf2b1eedd..7a251e5aca4 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline @@ -1,4 +1,6 @@ -EmitOutputStatus : DeclarationGenerationSkipped -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated +Diagnostics: + Type 'string' is not assignable to type 'number'. +FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; - + diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline index 91865045420..2a0b26f47c8 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline @@ -1,8 +1,8 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile1.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile1.js // File to emit, does not contain semantic errors // expected to be emitted correctelly regardless of the semantic errors in the other file var noErrors = true; -FileName : tests/cases/fourslash/inputFile1.d.ts +FileName : tests/cases/fourslash/inputFile1.d.ts declare var noErrors: boolean; - + diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline index 8b3a8ce8526..fde530fd483 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline @@ -1,8 +1,10 @@ -EmitOutputStatus : DeclarationGenerationSkipped -FileName : out.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated +Diagnostics: + Type 'string' is not assignable to type 'boolean'. +FileName : out.js // File to emit, does not contain semantic errors, but --out is passed // expected to not generate declarations because of the semantic errors in the other file var noErrors = true; // File not emitted, and contains semantic errors var semanticError = "string"; - + diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline index 0edb4e3bb61..224742eea3c 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile1.js +EmitOutputStatus : Succeeded +FileName : tests/cases/fourslash/inputFile1.js // File to emit, does not contain syntactic errors // expected to be emitted correctelly regardless of the syntactic errors in the other file var noErrors = true; - + diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline index 21f60cf9eeb..8b68a9d8ad9 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline @@ -1,8 +1,10 @@ -EmitOutputStatus : Succeeded -FileName : out.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated +Diagnostics: + '=' expected. +FileName : out.js // File to emit, does not contain syntactic errors, but --out is passed // expected to not generate outputs because of the syntactic errors in the other file. var noErrors = true; // File not emitted, and contains syntactic errors var syntactic = Error; - + diff --git a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline index 53c09d5fe28..6e6c38f4531 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline @@ -1,4 +1,6 @@ -EmitOutputStatus : Succeeded -FileName : tests/cases/fourslash/inputFile.js +EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated +Diagnostics: + Type expected. +FileName : tests/cases/fourslash/inputFile.js var x; - + diff --git a/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/amd/mapRootSourceRootWithNoSourceMapOption.json b/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/amd/mapRootSourceRootWithNoSourceMapOption.json index 9aefd24fb37..03bc2e44e0c 100644 --- a/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/amd/mapRootSourceRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/amd/mapRootSourceRootWithNoSourceMapOption.json @@ -11,5 +11,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/node/mapRootSourceRootWithNoSourceMapOption.json b/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/node/mapRootSourceRootWithNoSourceMapOption.json index 9aefd24fb37..03bc2e44e0c 100644 --- a/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/node/mapRootSourceRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/mapRootSourceRootWithNoSourceMapOption/node/mapRootSourceRootWithNoSourceMapOption.json @@ -11,5 +11,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/mapRootWithNoSourceMapOption/amd/mapRootWithNoSourceMapOption.json b/tests/baselines/reference/project/mapRootWithNoSourceMapOption/amd/mapRootWithNoSourceMapOption.json index f9d00318f8c..b4ff3c201d8 100644 --- a/tests/baselines/reference/project/mapRootWithNoSourceMapOption/amd/mapRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/mapRootWithNoSourceMapOption/amd/mapRootWithNoSourceMapOption.json @@ -10,5 +10,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/mapRootWithNoSourceMapOption/node/mapRootWithNoSourceMapOption.json b/tests/baselines/reference/project/mapRootWithNoSourceMapOption/node/mapRootWithNoSourceMapOption.json index f9d00318f8c..b4ff3c201d8 100644 --- a/tests/baselines/reference/project/mapRootWithNoSourceMapOption/node/mapRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/mapRootWithNoSourceMapOption/node/mapRootWithNoSourceMapOption.json @@ -10,5 +10,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/amd/sourceRootWithNoSourceMapOption.json b/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/amd/sourceRootWithNoSourceMapOption.json index 7cf066f15c4..be0075d1500 100644 --- a/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/amd/sourceRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/amd/sourceRootWithNoSourceMapOption.json @@ -10,5 +10,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/node/sourceRootWithNoSourceMapOption.json b/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/node/sourceRootWithNoSourceMapOption.json index 7cf066f15c4..be0075d1500 100644 --- a/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/node/sourceRootWithNoSourceMapOption.json +++ b/tests/baselines/reference/project/sourceRootWithNoSourceMapOption/node/sourceRootWithNoSourceMapOption.json @@ -10,5 +10,8 @@ "m1.ts", "test.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "m1.js", + "test.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.json b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.json index 5fb6100024f..6ba257bd4ac 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.json +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.json @@ -8,5 +8,7 @@ "lib.d.ts", "main.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "main.js" + ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.json b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.json index 5fb6100024f..6ba257bd4ac 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.json +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.json @@ -8,5 +8,7 @@ "lib.d.ts", "main.ts" ], - "emittedFiles": [] + "emittedFiles": [ + "main.js" + ] } \ No newline at end of file diff --git a/tests/cases/compiler/APISample_compile.ts b/tests/cases/compiler/APISample_compile.ts index 4731f856e2a..25f9fe6e145 100644 --- a/tests/cases/compiler/APISample_compile.ts +++ b/tests/cases/compiler/APISample_compile.ts @@ -10,24 +10,23 @@ declare var process: any; declare var console: any; +declare var os: any; import ts = require("typescript"); export function compile(fileNames: string[], options: ts.CompilerOptions): void { var program = ts.createProgram(fileNames, options); - var result = program.emit(); + var emitResult = program.emit(); - var allDiagnostics = program.getDiagnostics() - .concat(program.getTypeCheckerDiagnostics()) - .concat(result.diagnostics); + var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); allDiagnostics.forEach(diagnostic => { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); + console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); }); - console.log(`Process exiting with code '${result.emitResultStatus}'.`); - process.exit(result.emitResultStatus); + console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); + process.exit(emitResult.emitResultStatus); } compile(process.argv.slice(2), { diff --git a/tests/cases/compiler/APISample_transform.ts b/tests/cases/compiler/APISample_transform.ts index eccdb1ccecc..e9d9a46d286 100644 --- a/tests/cases/compiler/APISample_transform.ts +++ b/tests/cases/compiler/APISample_transform.ts @@ -12,6 +12,7 @@ declare var process: any; declare var console: any; declare var fs: any; declare var path: any; +declare var os: any; import ts = require("typescript"); @@ -45,17 +46,17 @@ function transform(contents: string, compilerOptions: ts.CompilerOptions = {}) { var program = ts.createProgram(["file.ts"], compilerOptions, compilerHost); // Query for early errors - var errors = program.getDiagnostics(); - // Do not generate code in the presence of early errors - if (!errors.length) { - // Type check and get semantic errors - errors = program.getTypeCheckerDiagnostics(); - // Generate output - program.emit(); - } + var errors = ts.getPreEmitDiagnostics(program); + var emitResult = program.emit(); + + errors = errors.concat(emitResult.diagnostics); + return { outputs: outputs, - errors: errors.map(function (e) { return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) + errors: errors.map(function (e) { + return e.file.fileName + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + + ts.flattenDiagnosticMessageText(e.messageText, os.EOL); + }) }; } diff --git a/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts b/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts index e363d6b53fd..266edaf23e1 100644 --- a/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts +++ b/tests/cases/fourslash/getEmitOutputWithDeclarationFile3.ts @@ -18,5 +18,5 @@ // @Filename: inputFile5.js //// var x2 = 1000; - +debugger; verify.baselineGetEmitOutput(); \ No newline at end of file diff --git a/tests/cases/fourslash/getEmitOutputWithSemanticErrorsForMultipleFiles.ts b/tests/cases/fourslash/getEmitOutputWithSemanticErrorsForMultipleFiles.ts index 5cfacc36715..69f8b8a8b41 100644 --- a/tests/cases/fourslash/getEmitOutputWithSemanticErrorsForMultipleFiles.ts +++ b/tests/cases/fourslash/getEmitOutputWithSemanticErrorsForMultipleFiles.ts @@ -12,5 +12,5 @@ // @Filename: inputFile2.ts //// // File not emitted, and contains semantic errors //// var semanticError: boolean = "string"; - +debugger; verify.baselineGetEmitOutput(); \ No newline at end of file From 493327af346f71d4661fd875e935641b6eddfcc5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 02:10:36 -0800 Subject: [PATCH 15/33] Fix language service handling of diagnostics. --- src/services/shims.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/services/shims.ts b/src/services/shims.ts index 8b7a48d03f3..5b5216813fe 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -368,7 +368,12 @@ module ts { }); } - private realizeDiagnostic(diagnostic: Diagnostic, newLine?: string): { message: string; start: number; length: number; category: string; } { + private realizeDiagnostics(diagnostics: Diagnostic[]): { message: string; start: number; length: number; category: string; }[]{ + var newLine = this.getNewLine(); + return diagnostics.map(d => this.realizeDiagnostic(d, newLine)); + } + + private realizeDiagnostic(diagnostic: Diagnostic, newLine: string): { message: string; start: number; length: number; category: string; } { return { message: flattenDiagnosticMessageText(diagnostic.messageText, newLine), start: diagnostic.start, @@ -405,8 +410,8 @@ module ts { return this.forwardJSONCall( "getSyntacticDiagnostics('" + fileName + "')", () => { - var errors = this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()); + var diagnostics = this.languageService.getSyntacticDiagnostics(fileName); + return this.realizeDiagnostics(diagnostics); }); } @@ -414,8 +419,8 @@ module ts { return this.forwardJSONCall( "getSemanticDiagnostics('" + fileName + "')", () => { - var errors = this.languageService.getSemanticDiagnostics(fileName); - return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()); + var diagnostics = this.languageService.getSemanticDiagnostics(fileName); + return this.realizeDiagnostics(diagnostics); }); } @@ -423,8 +428,8 @@ module ts { return this.forwardJSONCall( "getCompilerOptionsDiagnostics()", () => { - var errors = this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(e => this.realizeDiagnostic(e), this.getNewLine()) + var diagnostics = this.languageService.getCompilerOptionsDiagnostics(); + return this.realizeDiagnostics(diagnostics); }); } From c1dfdaa436f85665b6bc5f73ba0d55a217eaf68c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 02:15:38 -0800 Subject: [PATCH 16/33] Simplify code for getting diagnostics in the Program. --- src/compiler/program.ts | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e60a9e9f188..ee41e9c4ba7 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -211,19 +211,27 @@ module ts { return hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; } - function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { + function getDiagnosticsHelper(sourceFile: SourceFile, getDiagnostics: (sourceFile: SourceFile) => Diagnostic[]): Diagnostic[] { if (sourceFile) { - return ts.getSyntacticDiagnostics(sourceFile); + return getDiagnostics(sourceFile); } var allDiagnostics: Diagnostic[] = []; forEach(program.getSourceFiles(), sourceFile => { - addRange(allDiagnostics, ts.getSyntacticDiagnostics(sourceFile)); + addRange(allDiagnostics, getDiagnostics(sourceFile)); }); return sortAndDeduplicateDiagnostics(allDiagnostics); } + function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ + return getDiagnosticsHelper(sourceFile, ts.getSyntacticDiagnostics); + } + + function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ + return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile); + } + function getSemanticDiagnosticsForFile(sourceFile: SourceFile): Diagnostic[] { var typeChecker = getDiagnosticsProducingTypeChecker(); @@ -235,19 +243,6 @@ module ts { return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics); } - function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { - if (sourceFile) { - return sortAndDeduplicateDiagnostics(getSemanticDiagnosticsForFile(sourceFile)); - } - - var allDiagnostics: Diagnostic[] = []; - forEach(program.getSourceFiles(), sourceFile => { - addRange(allDiagnostics, getSemanticDiagnosticsForFile(sourceFile)); - }); - - return sortAndDeduplicateDiagnostics(allDiagnostics); - } - function getGlobalDiagnostics(): Diagnostic[]{ var typeChecker = getDiagnosticsProducingTypeChecker(); From f20fbb9726004a9003bbdc4021b2606abcd3bd41 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 13:14:41 -0800 Subject: [PATCH 17/33] Remove what looks like copy/paste errors in the parser. --- src/compiler/parser.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 05b5ea55505..0b17d95ac2b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -876,7 +876,10 @@ module ts { var sourceFile = createNode(SyntaxKind.SourceFile, /*pos*/ 0); - sourceFile.pos = sourceFile.end = 0; + sourceFile.pos = 0; + sourceFile.end = sourceText.length; + sourceFile.text = sourceText; + sourceFile.referenceDiagnostics = []; sourceFile.parseDiagnostics = []; sourceFile.bindDiagnostics = []; @@ -961,13 +964,6 @@ module ts { // attached to the EOF token. var parseErrorBeforeNextFinishedNode: boolean = false; - sourceFile.syntacticDiagnostics = undefined; - sourceFile.referenceDiagnostics = []; - sourceFile.parseDiagnostics = []; - sourceFile.bindDiagnostics = []; - sourceFile.end = sourceText.length; - sourceFile.text = sourceText; - // Create and prime the scanner before parsing the source elements. scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText, scanError); token = nextToken(); From 953e568d9e8df805c6af851e985620d8150d9ac8 Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Thu, 5 Feb 2015 13:32:33 -0800 Subject: [PATCH 18/33] Disallow rename for elements that are defined in the standard TypeScript library. --- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 +++ src/services/services.ts | 31 ++++++++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 7bf95dcc846..1188d346191 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -451,6 +451,7 @@ module ts { _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: DiagnosticCategory.Error, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: DiagnosticCategory.Error, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, You_cannot_rename_this_element: { code: 8000, category: DiagnosticCategory.Error, key: "You cannot rename this element." }, + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: DiagnosticCategory.Error, key: "You cannot rename elements that are defined in the standard TypeScript library." }, yield_expressions_are_not_currently_supported: { code: 9000, category: DiagnosticCategory.Error, key: "'yield' expressions are not currently supported." }, Generators_are_not_currently_supported: { code: 9001, category: DiagnosticCategory.Error, key: "Generators are not currently supported." }, The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression: { code: 9002, category: DiagnosticCategory.Error, key: "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index b4944f56d77..b1a794716a4 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1798,6 +1798,10 @@ "category": "Error", "code": 8000 }, + "You cannot rename elements that are defined in the standard TypeScript library.": { + "category": "Error", + "code": 8001 + }, "'yield' expressions are not currently supported.": { "category": "Error", "code": 9000 diff --git a/src/services/services.ts b/src/services/services.ts index 00084f51081..43f74bd323f 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -5450,22 +5450,39 @@ module ts { var symbol = typeInfoResolver.getSymbolAtLocation(node); // Only allow a symbol to be renamed if it actually has at least one declaration. - if (symbol && symbol.getDeclarations() && symbol.getDeclarations().length > 0) { - var kind = getSymbolKind(symbol, typeInfoResolver, node); - if (kind) { - return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, - getSymbolModifiers(symbol), - createTextSpan(node.getStart(), node.getWidth())); + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + + // Disallow rename for elements that are defined in the standard TypeScript library. + var defaultLibFile = getDefaultLibFileName(host.getCompilationSettings()); + for (var i = 0; i < declarations.length; i++) { + var sourceFile = declarations[i].getSourceFile(); + if (sourceFile && endsWith(sourceFile.fileName, defaultLibFile)) { + return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library.key)); + } + } + + var kind = getSymbolKind(symbol, typeInfoResolver, node); + if (kind) { + return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, + getSymbolModifiers(symbol), + createTextSpan(node.getStart(), node.getWidth())); + } } } } return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element.key)); + function endsWith(string: string, value: string): boolean { + return string.substring(string.length - value.length, string.length) === value; + } + function getRenameInfoError(localizedErrorMessage: string): RenameInfo { return { canRename: false, - localizedErrorMessage: getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element.key), + localizedErrorMessage: localizedErrorMessage, displayName: undefined, fullDisplayName: undefined, kind: undefined, From ea4e3de91ce45350297afec9d6bca05c325f7df0 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 13:38:11 -0800 Subject: [PATCH 19/33] Remove unnecessary diagnostics split on SourceFile. --- src/compiler/parser.ts | 13 ++----------- src/compiler/program.ts | 6 +++++- src/compiler/types.ts | 11 ++--------- src/harness/fourslash.ts | 4 ++-- src/services/services.ts | 5 ----- tests/baselines/reference/APISample_compile.js | 2 -- tests/baselines/reference/APISample_compile.types | 10 ---------- tests/baselines/reference/APISample_linter.js | 2 -- tests/baselines/reference/APISample_linter.types | 10 ---------- tests/baselines/reference/APISample_transform.js | 2 -- tests/baselines/reference/APISample_transform.types | 10 ---------- tests/baselines/reference/APISample_watcher.js | 2 -- tests/baselines/reference/APISample_watcher.types | 10 ---------- tests/cases/unittests/incrementalParser.ts | 4 ++-- 14 files changed, 13 insertions(+), 78 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0b17d95ac2b..cd08e592be8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -357,14 +357,6 @@ module ts { forEachChild(sourceFile, walk); } - export function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[] { - if (!sourceFile.syntacticDiagnostics) { - sourceFile.syntacticDiagnostics = sourceFile.referenceDiagnostics.concat(sourceFile.parseDiagnostics); - } - - return sourceFile.syntacticDiagnostics; - } - function moveElementEntirelyPastChangeRange(element: IncrementalElement, delta: number) { if (element.length) { visitArray(element); @@ -880,7 +872,6 @@ module ts { sourceFile.end = sourceText.length; sourceFile.text = sourceText; - sourceFile.referenceDiagnostics = []; sourceFile.parseDiagnostics = []; sourceFile.bindDiagnostics = []; sourceFile.languageVersion = languageVersion; @@ -4698,7 +4689,7 @@ module ts { referencedFiles.push(fileReference); } if (diagnosticMessage) { - sourceFile.referenceDiagnostics.push(createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); + sourceFile.parseDiagnostics.push(createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); } } else { @@ -4706,7 +4697,7 @@ module ts { var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment); if (amdModuleNameMatchResult) { if (amdModuleName) { - sourceFile.referenceDiagnostics.push(createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); + sourceFile.parseDiagnostics.push(createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); } amdModuleName = amdModuleNameMatchResult[2]; } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index ee41e9c4ba7..588ac3ac789 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -225,13 +225,17 @@ module ts { } function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ - return getDiagnosticsHelper(sourceFile, ts.getSyntacticDiagnostics); + return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile); } function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile); } + function getSyntacticDiagnosticsForFile(sourceFile: SourceFile): Diagnostic[] { + return sourceFile.parseDiagnostics; + } + function getSemanticDiagnosticsForFile(sourceFile: SourceFile): Diagnostic[] { var typeChecker = getDiagnosticsProducingTypeChecker(); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 75cee5e7314..8a5822f3266 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -902,20 +902,13 @@ module ts { /* @internal */ identifierCount: number; /* @internal */ symbolCount: number; - // Diagnostics reported about the "///(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; @@ -1473,7 +1472,6 @@ declare module "typescript" { getLineAndCharacterFromPosition(pos: number): LineAndCharacter; getLineStarts(): number[]; getPositionFromLineAndCharacter(line: number, character: number): number; - getSyntacticDiagnostics(): Diagnostic[]; update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index e5ac6de7c10..e5d69bbcfd2 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -4493,12 +4493,6 @@ declare module "typescript" { >SyntaxKind : SyntaxKind >NodeFlags : NodeFlags - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getSyntacticDiagnostics : (sourceFile: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; >updateSourceFile : (sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange) => SourceFile >sourceFile : SourceFile @@ -4755,10 +4749,6 @@ declare module "typescript" { >line : number >character : number - getSyntacticDiagnostics(): Diagnostic[]; ->getSyntacticDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - update(newText: string, textChangeRange: TextChangeRange): SourceFile; >update : (newText: string, textChangeRange: TextChangeRange) => SourceFile >newText : string diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index b84bcdb33fd..6edb6399bf9 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -1439,7 +1439,6 @@ declare module "typescript" { function createNode(kind: SyntaxKind): Node; function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; @@ -1505,7 +1504,6 @@ declare module "typescript" { getLineAndCharacterFromPosition(pos: number): LineAndCharacter; getLineStarts(): number[]; getPositionFromLineAndCharacter(line: number, character: number): number; - getSyntacticDiagnostics(): Diagnostic[]; update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 798d41e70ee..4ce2c4d92db 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -4640,12 +4640,6 @@ declare module "typescript" { >SyntaxKind : SyntaxKind >NodeFlags : NodeFlags - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getSyntacticDiagnostics : (sourceFile: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; >updateSourceFile : (sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange) => SourceFile >sourceFile : SourceFile @@ -4902,10 +4896,6 @@ declare module "typescript" { >line : number >character : number - getSyntacticDiagnostics(): Diagnostic[]; ->getSyntacticDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - update(newText: string, textChangeRange: TextChangeRange): SourceFile; >update : (newText: string, textChangeRange: TextChangeRange) => SourceFile >newText : string diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 4b235f25df3..023e3c5fa06 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -1440,7 +1440,6 @@ declare module "typescript" { function createNode(kind: SyntaxKind): Node; function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; @@ -1506,7 +1505,6 @@ declare module "typescript" { getLineAndCharacterFromPosition(pos: number): LineAndCharacter; getLineStarts(): number[]; getPositionFromLineAndCharacter(line: number, character: number): number; - getSyntacticDiagnostics(): Diagnostic[]; update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 6a149ddbae3..445cd50a205 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -4592,12 +4592,6 @@ declare module "typescript" { >SyntaxKind : SyntaxKind >NodeFlags : NodeFlags - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getSyntacticDiagnostics : (sourceFile: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; >updateSourceFile : (sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange) => SourceFile >sourceFile : SourceFile @@ -4854,10 +4848,6 @@ declare module "typescript" { >line : number >character : number - getSyntacticDiagnostics(): Diagnostic[]; ->getSyntacticDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - update(newText: string, textChangeRange: TextChangeRange): SourceFile; >update : (newText: string, textChangeRange: TextChangeRange) => SourceFile >newText : string diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 8c53f252843..9bdd3d71d07 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -1477,7 +1477,6 @@ declare module "typescript" { function createNode(kind: SyntaxKind): Node; function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; @@ -1543,7 +1542,6 @@ declare module "typescript" { getLineAndCharacterFromPosition(pos: number): LineAndCharacter; getLineStarts(): number[]; getPositionFromLineAndCharacter(line: number, character: number): number; - getSyntacticDiagnostics(): Diagnostic[]; update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 8a1f4aa259d..1c4efc7b5db 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -4766,12 +4766,6 @@ declare module "typescript" { >SyntaxKind : SyntaxKind >NodeFlags : NodeFlags - function getSyntacticDiagnostics(sourceFile: SourceFile): Diagnostic[]; ->getSyntacticDiagnostics : (sourceFile: SourceFile) => Diagnostic[] ->sourceFile : SourceFile ->SourceFile : SourceFile ->Diagnostic : Diagnostic - function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; >updateSourceFile : (sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange) => SourceFile >sourceFile : SourceFile @@ -5028,10 +5022,6 @@ declare module "typescript" { >line : number >character : number - getSyntacticDiagnostics(): Diagnostic[]; ->getSyntacticDiagnostics : () => Diagnostic[] ->Diagnostic : Diagnostic - update(newText: string, textChangeRange: TextChangeRange): SourceFile; >update : (newText: string, textChangeRange: TextChangeRange) => SourceFile >newText : string diff --git a/tests/cases/unittests/incrementalParser.ts b/tests/cases/unittests/incrementalParser.ts index 1b5e1a665ab..7c4213e22c2 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/tests/cases/unittests/incrementalParser.ts @@ -24,8 +24,8 @@ module ts { } function assertSameDiagnostics(file1: SourceFile, file2: SourceFile) { - var diagnostics1 = getSyntacticDiagnostics(file1); - var diagnostics2 = getSyntacticDiagnostics(file2); + var diagnostics1 = file1.parseDiagnostics; + var diagnostics2 = file2.parseDiagnostics; assert.equal(diagnostics1.length, diagnostics2.length, "diagnostics1.length !== diagnostics2.length"); for (var i = 0, n = diagnostics1.length; i < n; i++) { From b0061c14200f21f60b699c668a0724378d81ec6b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 14:41:04 -0800 Subject: [PATCH 20/33] Emit both javascript and declarations in the presence of errors (*unless* -noEmitOnError is specified). --- src/compiler/checker.ts | 9 +- src/compiler/emitter.ts | 82 ++--- src/compiler/program.ts | 42 +-- src/compiler/types.ts | 4 +- src/compiler/utilities.ts | 3 - src/harness/compilerRunner.ts | 1 + tests/baselines/reference/classdecl.js | 62 ++++ .../computedPropertyNamesDeclarationEmit3.js | 5 + .../computedPropertyNamesDeclarationEmit4.js | 5 + .../declFileObjectLiteralWithAccessors.js | 12 + .../declFileObjectLiteralWithOnlyGetter.js | 10 + .../declFileObjectLiteralWithOnlySetter.js | 11 + .../reference/declFilePrivateStatic.js | 13 + tests/baselines/reference/declInput.js | 14 + .../declarationEmit_invalidReference2.js | 4 + .../getEmitOutputExternalModule2.baseline | 5 +- ...mitOutputWithEarlySyntacticErrors.baseline | 5 +- .../getEmitOutputWithSemanticErrors.baseline | 4 +- .../getEmitOutputWithSemanticErrors2.baseline | 6 +- ...thSemanticErrorsForMultipleFiles2.baseline | 7 +- ...hSyntacticErrorsForMultipleFiles2.baseline | 4 +- .../getEmitOutputWithSyntaxErrors.baseline | 4 +- tests/baselines/reference/giant.js | 304 ++++++++++++++++++ .../baselines/reference/intrinsics.errors.txt | 5 +- tests/baselines/reference/moduledecl.js | 134 ++++++++ .../privacyGloImportParseErrors.errors.txt | 8 +- tests/baselines/reference/widenedTypes.js | 14 + tests/baselines/reference/withExportDecl.js | 28 ++ 28 files changed, 690 insertions(+), 115 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7eb13e52a29..d1821d6067c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -55,7 +55,7 @@ module ts { getSignatureFromDeclaration, isImplementationOfOverload, getAliasedSymbol: resolveImport, - getEmitResolver: () => emitResolver, + getEmitResolver, }; var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); @@ -123,6 +123,13 @@ module ts { } }; + function getEmitResolver(sourceFile?: SourceFile) { + // Ensure we have all the type information in place for this file so that all the + // emitter questions of this resolver will return the right information. + getDiagnostics(sourceFile); + return emitResolver; + } + function error(location: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { var diagnostic = location ? createDiagnosticForNode(location, message, arg0, arg1, arg2) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 467bef144fe..12b8d720ad6 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1144,7 +1144,9 @@ module ts { if (accessor) { return accessor.kind === SyntaxKind.GetAccessor ? accessor.type // Getter - return type - : accessor.parameters[0].type; // Setter parameter type + : accessor.parameters.length > 0 + ? accessor.parameters[0].type // Setter parameter type + : undefined; } } @@ -1576,6 +1578,25 @@ module ts { /** Sourcemap data that will get encoded */ var sourceMapData: SourceMapData; + if (compilerOptions.sourceMap) { + initializeEmitterWithSourceMaps(); + } + + if (root) { + emit(root); + } + else { + forEach(host.getSourceFiles(), sourceFile => { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + emit(sourceFile); + } + }); + } + + writeLine(); + writeEmittedFiles(writer.getText(), /*writeByteOrderMark*/ compilerOptions.emitBOM); + return; + function initializeEmitterWithSourceMaps() { var sourceMapDir: string; // The directory in which sourcemap will be @@ -2638,7 +2659,6 @@ module ts { write(tokenToString(node.operator)); } - function emitBinaryExpression(node: BinaryExpression) { if (languageVersion < ScriptTarget.ES6 && node.operator === SyntaxKind.EqualsToken && (node.left.kind === SyntaxKind.ObjectLiteralExpression || node.left.kind === SyntaxKind.ArrayLiteralExpression)) { @@ -4237,7 +4257,6 @@ module ts { return leadingComments; } - function getLeadingCommentsToEmit(node: Node) { // Emit the leading comments only if the parent's pos doesn't match because parent should take care of emitting these comments if (node.parent) { @@ -4355,24 +4374,6 @@ module ts { // Leading comments are emitted at /*leading comment1 */space/*leading comment*/space emitComments(currentSourceFile, writer, pinnedComments, /*trailingSeparator*/ true, newLine, writeComment); } - - if (compilerOptions.sourceMap) { - initializeEmitterWithSourceMaps(); - } - - if (root) { - emit(root); - } - else { - forEach(host.getSourceFiles(), sourceFile => { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - emit(sourceFile); - } - }); - } - - writeLine(); - writeEmittedFiles(writer.getText(), /*writeByteOrderMark*/ compilerOptions.emitBOM); } function writeDeclarationFile(jsFilePath: string, sourceFile: SourceFile) { @@ -4395,14 +4396,7 @@ module ts { } } - var isEmitBlocked = false; - var isDeclarationEmitBlocked = false; - if (targetSourceFile === undefined) { - // No targetSourceFile is specified (e.g. calling emitter from batch compiler) - isEmitBlocked = host.isEmitBlocked(); - isDeclarationEmitBlocked = host.isDeclarationEmitBlocked(); - forEach(host.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); @@ -4417,33 +4411,19 @@ module ts { else { // 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 - isEmitBlocked = host.isEmitBlocked(targetSourceFile); - isDeclarationEmitBlocked = host.isDeclarationEmitBlocked(targetSourceFile); - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); emitFile(jsFilePath, targetSourceFile); } else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { - // Otherwise, if --out is specified and targetSourceFile is not a declaration file, - // Emit all, non-external-module file, into one single output file - forEach(host.getSourceFiles(), sourceFile => { - if (!shouldEmitToOwnFile(sourceFile, compilerOptions)) { - isEmitBlocked = isEmitBlocked || host.isEmitBlocked(sourceFile); - isDeclarationEmitBlocked = isDeclarationEmitBlocked || host.isDeclarationEmitBlocked(sourceFile); - } - }); - emitFile(compilerOptions.out); } } function emitFile(jsFilePath: string, sourceFile?: SourceFile) { - if (!isEmitBlocked) { - emitJavaScript(jsFilePath, sourceFile); - if (!isDeclarationEmitBlocked && compilerOptions.declaration) { - writeDeclarationFile(jsFilePath, sourceFile); - } + emitJavaScript(jsFilePath, sourceFile); + + if (compilerOptions.declaration) { + writeDeclarationFile(jsFilePath, sourceFile); } } @@ -4455,14 +4435,8 @@ module ts { // Check and update returnCode for syntactic and semantic var emitResultStatus: EmitReturnStatus; - if (isEmitBlocked) { - emitResultStatus = EmitReturnStatus.DiagnosticsPresent_AllOutputsSkipped; - } else if (hasEmitterError) { + if (hasEmitterError) { emitResultStatus = EmitReturnStatus.EmitErrorsEncountered; - } else if (isDeclarationEmitBlocked && compilerOptions.declaration) { - emitResultStatus = EmitReturnStatus.DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated; - } else if (isDeclarationEmitBlocked && !compilerOptions.declaration) { - emitResultStatus = EmitReturnStatus.DiagnosticsPresent_JavaScriptGenerated; } else { emitResultStatus = EmitReturnStatus.Succeeded; } @@ -4470,7 +4444,7 @@ module ts { return { emitResultStatus, diagnostics, - sourceMaps: isEmitBlocked ? undefined : sourceMapDataList + sourceMaps: sourceMapDataList }; } } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 588ac3ac789..1c919de9c69 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -136,9 +136,7 @@ module ts { getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: () => commonSourceDirectory, emit, - isEmitBlocked, getCurrentDirectory: host.getCurrentDirectory, - getEmitResolver: () => getDiagnosticsProducingTypeChecker().getEmitResolver(), getNodeCount: () => getDiagnosticsProducingTypeChecker().getNodeCount(), getIdentifierCount: () => getDiagnosticsProducingTypeChecker().getIdentifierCount(), getSymbolCount: () => getDiagnosticsProducingTypeChecker().getSymbolCount(), @@ -155,31 +153,10 @@ module ts { getNewLine: host.getNewLine, getSourceFile: program.getSourceFile, getSourceFiles: program.getSourceFiles, - isEmitBlocked, - isDeclarationEmitBlocked, writeFile: writeFileCallback || host.writeFile, }; } - function hasPreEmitDiagnostics(sourceFile?: SourceFile): boolean { - var hasSyntacticDiagnostics = program.getSyntacticDiagnostics(sourceFile).length > 0; - var hasSemanticDiagnostics = program.getSemanticDiagnostics(sourceFile).length > 0; - - if (hasSyntacticDiagnostics || hasSemanticDiagnostics) { - return true; - } - - return !sourceFile && program.getGlobalDiagnostics().length > 0; - } - - function isEmitBlocked(sourceFile?: SourceFile): boolean { - return options.noEmitOnError && hasPreEmitDiagnostics(sourceFile); - } - - function isDeclarationEmitBlocked(sourceFile?: SourceFile) { - return hasPreEmitDiagnostics(sourceFile); - } - function getDiagnosticsProducingTypeChecker() { return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ true)); } @@ -189,18 +166,23 @@ module ts { } function getDeclarationDiagnostics(targetSourceFile: SourceFile): Diagnostic[]{ - var typeChecker = getDiagnosticsProducingTypeChecker(); - typeChecker.getDiagnostics(targetSourceFile); - var resolver = typeChecker.getEmitResolver(); + var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(targetSourceFile); return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile); } - function emit(targetSourceFile?: SourceFile, writeFileCallback?: WriteFileCallback) { + function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback): EmitResult { + // If the noEmitOnError flag is set, then check if we have any errors so far. If so, + // immediately bail out. + if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) { + return { diagnostics: [], sourceMaps: undefined, emitResultStatus: EmitReturnStatus.DiagnosticsPresent_AllOutputsSkipped }; + } + var start = new Date().getTime(); - var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(); - var host = getEmitHost(writeFileCallback); - var result = emitFiles(resolver, host, targetSourceFile); + var result = emitFiles( + getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile), + getEmitHost(writeFileCallback), + sourceFile); emitTime += new Date().getTime() - start; return result; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 8a5822f3266..7bb1ff1a738 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -984,7 +984,7 @@ module ts { export enum EmitReturnStatus { // All outputs generated if requested (.js, .map, .d.ts), no errors reported Succeeded = 0, - + // No .js, .map or d.ts generated because of diagnostics and the presence of the // -noEmitOnError optoin. DiagnosticsPresent_AllOutputsSkipped = 1, @@ -1050,7 +1050,7 @@ module ts { // Should not be called directly. Should only be accessed through the Program instance. /* @internal */ getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; /* @internal */ getGlobalDiagnostics(): Diagnostic[]; - /* @internal */ getEmitResolver(): EmitResolver; + /* @internal */ getEmitResolver(sourceFile?: SourceFile): EmitResolver; /* @internal */ getNodeCount(): number; /* @internal */ getIdentifierCount(): number; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 8291520da82..ce8b5547f00 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -26,9 +26,6 @@ module ts { export interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - isEmitBlocked(sourceFile?: SourceFile): boolean; - isDeclarationEmitBlocked(sourceFile?: SourceFile): boolean; - getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; getNewLine(): string; diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index e4979f7a3c4..250cd54e764 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -149,6 +149,7 @@ class CompilerBaselineRunner extends RunnerBase { // check errors it('Correct errors for ' + fileName, () => { + debugger; if (this.errors) { Harness.Baseline.runBaseline('Correct errors for ' + fileName, justName.replace(/\.ts$/, '.errors.txt'), (): string => { if (result.errors.length === 0) return null; diff --git a/tests/baselines/reference/classdecl.js b/tests/baselines/reference/classdecl.js index 6c6e542e032..859476c0dad 100644 --- a/tests/baselines/reference/classdecl.js +++ b/tests/baselines/reference/classdecl.js @@ -204,3 +204,65 @@ var e = (function () { }; return e; })(); + + +//// [classdecl.d.ts] +declare class a { + constructor(n: number); + constructor(s: string); + pgF(): void; + pv: any; + d: number; + static p2: { + x: number; + y: number; + }; + private static d2(); + private static p3; + private pv3; + private foo(n); + private foo(s); +} +declare class b extends a { +} +declare module m1 { + class b { + } + interface ib { + } +} +declare module m2 { + module m3 { + class c extends b { + } + class ib2 implements m1.ib { + } + } +} +declare class c extends m1.b { +} +declare class ib2 implements m1.ib { +} +declare class aAmbient { + constructor(n: number); + constructor(s: string); + pgF(): void; + pv: any; + d: number; + static p2: { + x: number; + y: number; + }; + static d2(): any; + static p3: any; + private pv3; + private foo(s); +} +declare class d { + private foo(n); + private foo(s); +} +declare class e { + private foo(s); + private foo(n); +} diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js index df351acf6e9..affe949797e 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3.js @@ -4,3 +4,8 @@ interface I { } //// [computedPropertyNamesDeclarationEmit3.js] + + +//// [computedPropertyNamesDeclarationEmit3.d.ts] +interface I { +} diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js index 870f87bb613..f68c1633ef9 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4.js @@ -5,3 +5,8 @@ var v: { //// [computedPropertyNamesDeclarationEmit4.js] var v; + + +//// [computedPropertyNamesDeclarationEmit4.d.ts] +declare var v: { +}; diff --git a/tests/baselines/reference/declFileObjectLiteralWithAccessors.js b/tests/baselines/reference/declFileObjectLiteralWithAccessors.js index 00598cfcf3e..7d7c6ee73d3 100644 --- a/tests/baselines/reference/declFileObjectLiteralWithAccessors.js +++ b/tests/baselines/reference/declFileObjectLiteralWithAccessors.js @@ -27,3 +27,15 @@ function makePoint(x) { var point = makePoint(2); var x = point.x; point.x = 30; + + +//// [declFileObjectLiteralWithAccessors.d.ts] +declare function makePoint(x: number): { + b: number; + x: number; +}; +declare var point: { + b: number; + x: number; +}; +declare var x: number; diff --git a/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js b/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js index ed457931a69..b3d41829637 100644 --- a/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js +++ b/tests/baselines/reference/declFileObjectLiteralWithOnlyGetter.js @@ -20,3 +20,13 @@ function makePoint(x) { ; var point = makePoint(2); var x = point.x; + + +//// [declFileObjectLiteralWithOnlyGetter.d.ts] +declare function makePoint(x: number): { + x: number; +}; +declare var point: { + x: number; +}; +declare var x: number; diff --git a/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js b/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js index f5716bb06e0..dae362caf36 100644 --- a/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js +++ b/tests/baselines/reference/declFileObjectLiteralWithOnlySetter.js @@ -21,3 +21,14 @@ function makePoint(x) { ; var point = makePoint(2); point.x = 30; + + +//// [declFileObjectLiteralWithOnlySetter.d.ts] +declare function makePoint(x: number): { + b: number; + x: number; +}; +declare var point: { + b: number; + x: number; +}; diff --git a/tests/baselines/reference/declFilePrivateStatic.js b/tests/baselines/reference/declFilePrivateStatic.js index 38dbdb126af..5bec38e4dee 100644 --- a/tests/baselines/reference/declFilePrivateStatic.js +++ b/tests/baselines/reference/declFilePrivateStatic.js @@ -52,3 +52,16 @@ var C = (function () { C.y = 1; return C; })(); + + +//// [declFilePrivateStatic.d.ts] +declare class C { + private static x; + static y: number; + private static a(); + static b(): void; + private static c; + static d: number; + private static e; + static f: any; +} diff --git a/tests/baselines/reference/declInput.js b/tests/baselines/reference/declInput.js index 94c825d87f0..39d466498fa 100644 --- a/tests/baselines/reference/declInput.js +++ b/tests/baselines/reference/declInput.js @@ -28,3 +28,17 @@ var bar = (function () { }; return bar; })(); + + +//// [declInput.d.ts] +interface bar { +} +declare class bar { + f(): string; + g(): { + a: bar; + b: any; + c: any; + }; + h(x?: number, y?: any, z?: string): void; +} diff --git a/tests/baselines/reference/declarationEmit_invalidReference2.js b/tests/baselines/reference/declarationEmit_invalidReference2.js index 0f8d5d4c07d..78fb232cca7 100644 --- a/tests/baselines/reference/declarationEmit_invalidReference2.js +++ b/tests/baselines/reference/declarationEmit_invalidReference2.js @@ -5,3 +5,7 @@ var x = 0; //// [declarationEmit_invalidReference2.js] /// var x = 0; + + +//// [declarationEmit_invalidReference2.d.ts] +declare var x: number; diff --git a/tests/baselines/reference/getEmitOutputExternalModule2.baseline b/tests/baselines/reference/getEmitOutputExternalModule2.baseline index 5ec634d37a5..205b2f1b303 100644 --- a/tests/baselines/reference/getEmitOutputExternalModule2.baseline +++ b/tests/baselines/reference/getEmitOutputExternalModule2.baseline @@ -1,7 +1,4 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated -Diagnostics: - Subsequent variable declarations must have the same type. Variable 'x' must be of type 'number', but here has type 'string'. - Subsequent variable declarations must have the same type. Variable 'x' must be of type 'number', but here has type 'string'. +EmitOutputStatus : Succeeded FileName : declSingleFile.js var x = 5; var Bar = (function () { diff --git a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline index e9622faf16b..5404e2e05e2 100644 --- a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline @@ -1,7 +1,4 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated -Diagnostics: - 'const' declarations are only available when targeting ECMAScript 6 and higher. - 'const' declarations are only available when targeting ECMAScript 6 and higher. +EmitOutputStatus : Succeeded FileName : tests/cases/fourslash/inputFile1.js // File contains early errors. All outputs should be skipped. const uninitialized_const_error; diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline index 9143fe51318..6c263064ae3 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline @@ -1,6 +1,4 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated -Diagnostics: - Type 'string' is not assignable to type 'number'. +EmitOutputStatus : Succeeded FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline index 7a251e5aca4..78c279add04 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated -Diagnostics: - Type 'string' is not assignable to type 'number'. +EmitOutputStatus : Succeeded FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; +FileName : tests/cases/fourslash/inputFile.d.ts +declare var x: number; diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline index fde530fd483..7a6d61855ae 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline @@ -1,10 +1,11 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated -Diagnostics: - Type 'string' is not assignable to type 'boolean'. +EmitOutputStatus : Succeeded FileName : out.js // File to emit, does not contain semantic errors, but --out is passed // expected to not generate declarations because of the semantic errors in the other file var noErrors = true; // File not emitted, and contains semantic errors var semanticError = "string"; +FileName : out.d.ts +declare var noErrors: boolean; +declare var semanticError: boolean; diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline index 8b68a9d8ad9..967f792fb06 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline @@ -1,6 +1,4 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated -Diagnostics: - '=' expected. +EmitOutputStatus : Succeeded FileName : out.js // File to emit, does not contain syntactic errors, but --out is passed // expected to not generate outputs because of the syntactic errors in the other file. diff --git a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline index 6e6c38f4531..b6b40c5352c 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline @@ -1,6 +1,4 @@ -EmitOutputStatus : DiagnosticsPresent_JavaScriptGenerated -Diagnostics: - Type expected. +EmitOutputStatus : Succeeded FileName : tests/cases/fourslash/inputFile.js var x; diff --git a/tests/baselines/reference/giant.js b/tests/baselines/reference/giant.js index d5f17c9728f..b16d0f5231c 100644 --- a/tests/baselines/reference/giant.js +++ b/tests/baselines/reference/giant.js @@ -1218,3 +1218,307 @@ define(["require", "exports"], function (require, exports) { })(eM = exports.eM || (exports.eM = {})); ; }); + + +//// [giant.d.ts] +export declare var eV: any; +export declare function eF(): void; +export declare class eC { + constructor(); + pV: any; + private rV; + pF(): void; + private rF(); + pgF(): void; + pgF: any; + psF(param: any): void; + psF: any; + private rgF(); + private rgF; + private rsF(param); + private rsF; + static tV: any; + static tF(): void; + static tsF(param: any): void; + static tsF: any; + static tgF(): void; + static tgF: any; +} +export interface eI { + (): any; + (): number; + (p: any): any; + (p1: string): any; + (p2?: string): any; + (...p3: any[]): any; + (p4: string, p5?: string): any; + (p6: string, ...p7: any[]): any; + new (): any; + new (): number; + new (p: string): any; + new (p2?: string): any; + new (...p3: any[]): any; + new (p4: string, p5?: string): any; + new (p6: string, ...p7: any[]): any; + [p1: string]: any; + [p2: string, p3: number]: any; + p: any; + p1?: any; + p2?: string; + p3(): any; + p4?(): any; + p5?(): void; + p6(pa1: any): void; + p7(pa1: any, pa2: any): void; + p7?(pa1: any, pa2: any): void; +} +export declare module eM { + var eV: any; + function eF(): void; + class eC { + constructor(); + pV: any; + private rV; + pF(): void; + private rF(); + pgF(): void; + pgF: any; + psF(param: any): void; + psF: any; + private rgF(); + private rgF; + private rsF(param); + private rsF; + static tV: any; + static tF(): void; + static tsF(param: any): void; + static tsF: any; + static tgF(): void; + static tgF: any; + } + interface eI { + (): any; + (): number; + (p: any): any; + (p1: string): any; + (p2?: string): any; + (...p3: any[]): any; + (p4: string, p5?: string): any; + (p6: string, ...p7: any[]): any; + new (): any; + new (): number; + new (p: string): any; + new (p2?: string): any; + new (...p3: any[]): any; + new (p4: string, p5?: string): any; + new (p6: string, ...p7: any[]): any; + [p1: string]: any; + [p2: string, p3: number]: any; + p: any; + p1?: any; + p2?: string; + p3(): any; + p4?(): any; + p5?(): void; + p6(pa1: any): void; + p7(pa1: any, pa2: any): void; + p7?(pa1: any, pa2: any): void; + } + module eM { + var eV: any; + function eF(): void; + class eC { + } + interface eI { + } + module eM { + } + var eaV: any; + function eaF(): void; + class eaC { + } + module eaM { + } + } + var eaV: any; + function eaF(): void; + class eaC { + constructor(); + pV: any; + private rV; + pF(): void; + private rF(); + pgF(): void; + pgF: any; + psF(param: any): void; + psF: any; + private rgF(); + private rgF; + private rsF(param); + private rsF; + static tV: any; + static tF(): void; + static tsF(param: any): void; + static tsF: any; + static tgF(): void; + static tgF: any; + } + module eaM { + var V: any; + function F(): void; + class C { + } + interface I { + } + module M { + } + var eV: any; + function eF(): void; + class eC { + } + interface eI { + } + module eM { + } + } +} +export declare var eaV: any; +export declare function eaF(): void; +export declare class eaC { + constructor(); + pV: any; + private rV; + pF(): void; + private rF(); + pgF(): void; + pgF: any; + psF(param: any): void; + psF: any; + private rgF(); + private rgF; + private rsF(param); + private rsF; + static tV: any; + static tF(): void; + static tsF(param: any): void; + static tsF: any; + static tgF(): void; + static tgF: any; +} +export declare module eaM { + var V: any; + function F(): void; + class C { + constructor(); + pV: any; + private rV; + pF(): void; + static tV: any; + static tF(): void; + } + interface I { + (): any; + (): number; + (p: string): any; + (p2?: string): any; + (...p3: any[]): any; + (p4: string, p5?: string): any; + (p6: string, ...p7: any[]): any; + new (): any; + new (): number; + new (p: string): any; + new (p2?: string): any; + new (...p3: any[]): any; + new (p4: string, p5?: string): any; + new (p6: string, ...p7: any[]): any; + [p1: string]: any; + [p2: string, p3: number]: any; + p: any; + p1?: any; + p2?: string; + p3(): any; + p4?(): any; + p5?(): void; + p6(pa1: any): void; + p7(pa1: any, pa2: any): void; + p7?(pa1: any, pa2: any): void; + } + module M { + var V: any; + function F(): void; + class C { + } + interface I { + } + module M { + } + var eV: any; + function eF(): void; + class eC { + } + interface eI { + } + module eM { + } + var eaV: any; + function eaF(): void; + class eaC { + } + module eaM { + } + } + var eV: any; + function eF(): void; + class eC { + constructor(); + pV: any; + private rV; + pF(): void; + static tV: any; + static tF(): void; + } + interface eI { + (): any; + (): number; + (p: any): any; + (p1: string): any; + (p2?: string): any; + (...p3: any[]): any; + (p4: string, p5?: string): any; + (p6: string, ...p7: any[]): any; + new (): any; + new (): number; + new (p: string): any; + new (p2?: string): any; + new (...p3: any[]): any; + new (p4: string, p5?: string): any; + new (p6: string, ...p7: any[]): any; + [p1: string]: any; + [p2: string, p3: number]: any; + p: any; + p1?: any; + p2?: string; + p3(): any; + p4?(): any; + p5?(): void; + p6(pa1: any): void; + p7(pa1: any, pa2: any): void; + p7?(pa1: any, pa2: any): void; + } + module eM { + var V: any; + function F(): void; + class C { + } + module M { + } + var eV: any; + function eF(): void; + class eC { + } + interface eI { + } + module eM { + } + } +} diff --git a/tests/baselines/reference/intrinsics.errors.txt b/tests/baselines/reference/intrinsics.errors.txt index e9529d4b9f0..342b84e02b9 100644 --- a/tests/baselines/reference/intrinsics.errors.txt +++ b/tests/baselines/reference/intrinsics.errors.txt @@ -1,12 +1,15 @@ tests/cases/compiler/intrinsics.ts(2,21): error TS2304: Cannot find name 'hasOwnProperty'. +tests/cases/compiler/intrinsics.ts(2,21): error TS4025: Exported variable 'hasOwnProperty' has or is using private name 'hasOwnProperty'. tests/cases/compiler/intrinsics.ts(11,1): error TS2304: Cannot find name '__proto__'. -==== tests/cases/compiler/intrinsics.ts (2 errors) ==== +==== tests/cases/compiler/intrinsics.ts (3 errors) ==== var hasOwnProperty: hasOwnProperty; // Error ~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'hasOwnProperty'. + ~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'hasOwnProperty' has or is using private name 'hasOwnProperty'. module m1 { export var __proto__; diff --git a/tests/baselines/reference/moduledecl.js b/tests/baselines/reference/moduledecl.js index 9be1b116a5e..4a27e0fbe1f 100644 --- a/tests/baselines/reference/moduledecl.js +++ b/tests/baselines/reference/moduledecl.js @@ -376,3 +376,137 @@ var m3cVar = new mAmbient.m3.C(); var m3aVar = mAmbient.m3.aVar; var m3bB; var m3eVar; + + +//// [moduledecl.d.ts] +declare module a { +} +declare module b.a { +} +declare module c.a.b { +} +declare module mImport { +} +declare module m0 { +} +declare module m1 { + function f1(): void; + function f2(s: string): any; + function f2(n: number): any; + class c1 { + n: any; + n2: number; + private n3; + private n4; + a: () => string; + private b; + private static s1; + static s2: any; + d(): string; + e: { + x: number; + y: string; + }; + constructor(n: any, n2: number, n3: any, n4: string); + } + interface i1 { + (): Object; + [n: number]: c1; + } +} +declare module m { + module m2 { + var b: number; + } + module m3 { + var c: number; + } +} +declare module m { + module m25 { + module m5 { + var c: number; + } + } +} +declare module m13 { + module m4 { + module m2 { + module m3 { + var c: number; + } + } + function f(): number; + } +} +declare module m4 { + var b: any; +} +declare module m5 { + var c: any; +} +declare module m43 { + var b: any; +} +declare module m55 { + var c: any; +} +declare module "m3" { + var b: number; +} +declare module exportTests { + class C1_public { + private f2(); + f3(): string; + } + class C3_public { + private getC2_private(); + private setC2_private(arg); + private c2; + getC1_public(): C1_public; + setC1_public(arg: C1_public): void; + c1: C1_public; + } +} +declare module mAmbient { + class C { + myProp: number; + } + function foo(): C; + var aVar: C; + interface B { + x: number; + y: C; + } + enum e { + x, + y, + z, + } + module m3 { + class C { + myProp: number; + } + function foo(): C; + var aVar: C; + interface B { + x: number; + y: C; + } + enum e { + x, + y, + z, + } + } +} +declare function foo(): mAmbient.C; +declare var cVar: mAmbient.C; +declare var aVar: mAmbient.C; +declare var bB: mAmbient.B; +declare var eVar: mAmbient.e; +declare function m3foo(): mAmbient.m3.C; +declare var m3cVar: mAmbient.m3.C; +declare var m3aVar: mAmbient.m3.C; +declare var m3bB: mAmbient.m3.B; +declare var m3eVar: mAmbient.m3.e; diff --git a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt index 360259adf7c..2a7c07bfcdb 100644 --- a/tests/baselines/reference/privacyGloImportParseErrors.errors.txt +++ b/tests/baselines/reference/privacyGloImportParseErrors.errors.txt @@ -1,9 +1,11 @@ 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(49,29): error TS4000: Import declaration 'm1_im2_private' is using private name 'm1_M2_private'. 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(59,37): error TS2307: Cannot find external module 'm1_M3_public'. tests/cases/compiler/privacyGloImportParseErrors.ts(69,37): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(69,37): error TS2307: Cannot find external module 'm1_M4_private'. +tests/cases/compiler/privacyGloImportParseErrors.ts(80,35): error TS4000: Import declaration 'm1_im2_public' is using private name 'm1_M2_private'. tests/cases/compiler/privacyGloImportParseErrors.ts(81,43): error TS1147: Import declarations in an internal module cannot reference an external module. tests/cases/compiler/privacyGloImportParseErrors.ts(81,43): error TS2307: Cannot find external module 'm1_M3_public'. tests/cases/compiler/privacyGloImportParseErrors.ts(82,43): error TS1147: Import declarations in an internal module cannot reference an external module. @@ -18,7 +20,7 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(146,25): error TS1147: Impor tests/cases/compiler/privacyGloImportParseErrors.ts(149,29): error TS1147: Import declarations in an internal module cannot reference an external module. -==== tests/cases/compiler/privacyGloImportParseErrors.ts (18 errors) ==== +==== tests/cases/compiler/privacyGloImportParseErrors.ts (20 errors) ==== module m1 { export module m1_M1_public { export class c1 { @@ -72,6 +74,8 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(149,29): error TS1147: Impor 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(); export var m1_im2_private_v3_public = m1_im2_private.f1; @@ -111,6 +115,8 @@ tests/cases/compiler/privacyGloImportParseErrors.ts(149,29): error TS1147: Impor 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"); ~~~~~~~~~~~~~~ !!! error TS1147: Import declarations in an internal module cannot reference an external module. diff --git a/tests/baselines/reference/widenedTypes.js b/tests/baselines/reference/widenedTypes.js index 92dae28b6e4..5a76ae72905 100644 --- a/tests/baselines/reference/widenedTypes.js +++ b/tests/baselines/reference/widenedTypes.js @@ -43,3 +43,17 @@ var ob = { x: "" }; // Highlights the difference between array literals and object literals var arr = [3, null]; // not assignable because null is not widened. BCT is {} var obj = { x: 3, y: null }; // assignable because null is widened, and therefore BCT is any + + +//// [widenedTypes.d.ts] +declare var t: number[]; +declare var x: typeof undefined; +declare var y: any; +declare var u: number[]; +declare var ob: { + x: typeof undefined; +}; +declare var arr: string[]; +declare var obj: { + [x: string]: string; +}; diff --git a/tests/baselines/reference/withExportDecl.js b/tests/baselines/reference/withExportDecl.js index 7fbaa603c31..ccd13123721 100644 --- a/tests/baselines/reference/withExportDecl.js +++ b/tests/baselines/reference/withExportDecl.js @@ -101,3 +101,31 @@ define(["require", "exports"], function (require, exports) { var eVar22; exports.eVar3 = 10, exports.eVar4, exports.eVar5; }); + + +//// [withExportDecl.d.ts] +export declare var exportedSimpleVar: any; +export declare var exportedVarWithInitialValue: number; +export declare var exportedWithComplicatedValue: { + x: number; + y: number; + desc: string; +}; +export declare var exportedDeclaredVar: number; +export declare var exportedArrayVar: { + x: number; + y: string; +}[]; +export declare function exportedFunction(): { + x: string; + y: string; + n: number; +}; +export declare module m2 { + var a: number; +} +export declare module m3 { + function foo(): string; +} +export declare var eVar1: any, eVar2: number; +export declare var eVar3: number, eVar4: any, eVar5: any; From e7f6693eda5580d2a335566e2cdc4c6af2ac299d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 14:46:50 -0800 Subject: [PATCH 21/33] Move code for emitting above helper functions. --- src/compiler/emitter.ts | 86 ++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 12b8d720ad6..c2f03cc8aa3 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1515,6 +1515,49 @@ module ts { var diagnostics: Diagnostic[] = []; var newLine = host.getNewLine(); + if (targetSourceFile === undefined) { + forEach(host.getSourceFiles(), sourceFile => { + if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); + emitFile(jsFilePath, sourceFile); + } + }); + + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + else { + // targetSourceFile is specified (e.g calling emitter from language service or calling getSemanticDiagnostic from language service) + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); + emitFile(jsFilePath, targetSourceFile); + } + else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + + // Sort and make the unique list of diagnostics + diagnostics = sortAndDeduplicateDiagnostics(diagnostics); + + // Update returnCode if there is any EmitterError + var hasEmitterError = forEach(diagnostics, diagnostic => diagnostic.category === DiagnosticCategory.Error); + + // Check and update returnCode for syntactic and semantic + var emitResultStatus: EmitReturnStatus; + if (hasEmitterError) { + emitResultStatus = EmitReturnStatus.EmitErrorsEncountered; + } else { + emitResultStatus = EmitReturnStatus.Succeeded; + } + + return { + emitResultStatus, + diagnostics, + sourceMaps: sourceMapDataList + }; + function emitJavaScript(jsFilePath: string, root?: SourceFile) { var writer = createTextWriter(newLine); var write = writer.write; @@ -4395,29 +4438,6 @@ module ts { writeFile(host, diagnostics, removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } - - if (targetSourceFile === undefined) { - forEach(host.getSourceFiles(), sourceFile => { - if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); - emitFile(jsFilePath, sourceFile); - } - }); - - if (compilerOptions.out) { - emitFile(compilerOptions.out); - } - } - else { - // targetSourceFile is specified (e.g calling emitter from language service or calling getSemanticDiagnostic from language service) - if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - else if (!isDeclarationFile(targetSourceFile) && compilerOptions.out) { - emitFile(compilerOptions.out); - } - } function emitFile(jsFilePath: string, sourceFile?: SourceFile) { emitJavaScript(jsFilePath, sourceFile); @@ -4426,25 +4446,5 @@ module ts { writeDeclarationFile(jsFilePath, sourceFile); } } - - // Sort and make the unique list of diagnostics - diagnostics = sortAndDeduplicateDiagnostics(diagnostics); - - // Update returnCode if there is any EmitterError - var hasEmitterError = forEach(diagnostics, diagnostic => diagnostic.category === DiagnosticCategory.Error); - - // Check and update returnCode for syntactic and semantic - var emitResultStatus: EmitReturnStatus; - if (hasEmitterError) { - emitResultStatus = EmitReturnStatus.EmitErrorsEncountered; - } else { - emitResultStatus = EmitReturnStatus.Succeeded; - } - - return { - emitResultStatus, - diagnostics, - sourceMaps: sourceMapDataList - }; } } From 9e4d5dacc5f8215abd06852cf42dd9737dc2e97c Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Thu, 5 Feb 2015 22:59:17 +0000 Subject: [PATCH 22/33] All options should be optional --- src/lib/intl.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/intl.d.ts b/src/lib/intl.d.ts index 73672bd8dea..dfa6f0990d4 100644 --- a/src/lib/intl.d.ts +++ b/src/lib/intl.d.ts @@ -82,7 +82,7 @@ declare module Intl { second?: string; timeZoneName?: string; formatMatcher?: string; - hour12: boolean; + hour12?: boolean; } interface ResolvedDateTimeFormatOptions { From 66a363f449dd565a43fb78363612ff007073ebc4 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 15:50:18 -0800 Subject: [PATCH 23/33] Simplify the API for emitting and reporting exit statuses to callers. --- src/compiler/emitter.ts | 16 +---- src/compiler/program.ts | 8 +-- src/compiler/tsc.ts | 55 ++++++++++------- src/compiler/types.ts | 30 ++++------ src/harness/fourslash.ts | 5 +- src/services/services.ts | 4 +- .../baselines/reference/APISample_compile.js | 25 ++++---- .../reference/APISample_compile.types | 58 ++++++++---------- tests/baselines/reference/APISample_linter.js | 15 ++--- .../reference/APISample_linter.types | 35 ++++------- .../reference/APISample_transform.js | 15 ++--- .../reference/APISample_transform.types | 35 ++++------- .../baselines/reference/APISample_watcher.js | 23 ++++--- .../reference/APISample_watcher.types | 60 ++++++++----------- ...etEmitOutputDeclarationMultiFiles.baseline | 4 +- ...etEmitOutputDeclarationSingleFile.baseline | 2 +- .../getEmitOutputExternalModule.baseline | 2 +- .../getEmitOutputExternalModule2.baseline | 2 +- .../reference/getEmitOutputMapRoots.baseline | 2 +- .../reference/getEmitOutputNoErrors.baseline | 2 +- .../getEmitOutputOnlyOneFile.baseline | 2 +- .../getEmitOutputSingleFile.baseline | 2 +- .../getEmitOutputSingleFile2.baseline | 2 +- .../reference/getEmitOutputSourceMap.baseline | 2 +- .../getEmitOutputSourceMap2.baseline | 4 +- .../getEmitOutputSourceRoot.baseline | 2 +- ...getEmitOutputSourceRootMultiFiles.baseline | 4 +- .../getEmitOutputWithDeclarationFile.baseline | 4 +- ...getEmitOutputWithDeclarationFile2.baseline | 6 +- ...getEmitOutputWithDeclarationFile3.baseline | 2 +- ...mitOutputWithEarlySyntacticErrors.baseline | 2 +- .../getEmitOutputWithEmitterErrors.baseline | 3 +- .../getEmitOutputWithEmitterErrors2.baseline | 3 +- .../getEmitOutputWithSemanticErrors.baseline | 2 +- .../getEmitOutputWithSemanticErrors2.baseline | 2 +- ...ithSemanticErrorsForMultipleFiles.baseline | 2 +- ...thSemanticErrorsForMultipleFiles2.baseline | 2 +- ...thSyntacticErrorsForMultipleFiles.baseline | 2 +- ...hSyntacticErrorsForMultipleFiles2.baseline | 2 +- .../getEmitOutputWithSyntaxErrors.baseline | 2 +- tests/cases/compiler/APISample_compile.ts | 5 +- tests/cases/compiler/APISample_watcher.ts | 4 +- 42 files changed, 199 insertions(+), 260 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index c2f03cc8aa3..3b3351ada69 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1508,7 +1508,8 @@ module ts { // @internal // 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, host: EmitHost, targetSourceFile: SourceFile): EmitResult { + export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile): EmitResult + { var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || ScriptTarget.ES3; var sourceMapDataList: SourceMapData[] = compilerOptions.sourceMap ? [] : undefined; @@ -1541,19 +1542,8 @@ module ts { // Sort and make the unique list of diagnostics diagnostics = sortAndDeduplicateDiagnostics(diagnostics); - // Update returnCode if there is any EmitterError - var hasEmitterError = forEach(diagnostics, diagnostic => diagnostic.category === DiagnosticCategory.Error); - - // Check and update returnCode for syntactic and semantic - var emitResultStatus: EmitReturnStatus; - if (hasEmitterError) { - emitResultStatus = EmitReturnStatus.EmitErrorsEncountered; - } else { - emitResultStatus = EmitReturnStatus.Succeeded; - } - return { - emitResultStatus, + emitSkipped: false, diagnostics, sourceMaps: sourceMapDataList }; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 1c919de9c69..e933c54bc1e 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -174,20 +174,20 @@ module ts { // If the noEmitOnError flag is set, then check if we have any errors so far. If so, // immediately bail out. if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) { - return { diagnostics: [], sourceMaps: undefined, emitResultStatus: EmitReturnStatus.DiagnosticsPresent_AllOutputsSkipped }; + return { diagnostics: [], sourceMaps: undefined, emitSkipped: true }; } var start = new Date().getTime(); - var result = emitFiles( + var emitResult = emitFiles( getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile), getEmitHost(writeFileCallback), sourceFile); emitTime += new Date().getTime() - start; - return result; + return emitResult; } - + function getSourceFile(fileName: string) { fileName = host.getCanonicalFileName(fileName); return hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 541a64b6473..4bcd0856ca8 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -165,7 +165,7 @@ module ts { if (commandLine.options.locale) { if (!isJSONSupported()) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--locale")); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } validateLocaleAndSetLanguage(commandLine.options.locale, commandLine.errors); } @@ -174,29 +174,29 @@ module ts { // setting up localization, report them and quit. if (commandLine.errors.length > 0) { reportDiagnostics(commandLine.errors); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } if (commandLine.options.version) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.Version_0, version)); - return sys.exit(EmitReturnStatus.Succeeded); + return sys.exit(ExitStatus.Success); } if (commandLine.options.help) { printVersion(); printHelp(); - return sys.exit(EmitReturnStatus.Succeeded); + return sys.exit(ExitStatus.Success); } if (commandLine.options.project) { if (!isJSONSupported()) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--project")); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } configFileName = normalizePath(combinePaths(commandLine.options.project, "tsconfig.json")); if (commandLine.fileNames.length !== 0) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line)); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } } else if (commandLine.fileNames.length === 0 && isJSONSupported()) { @@ -206,13 +206,13 @@ module ts { if (commandLine.fileNames.length === 0 && !configFileName) { printVersion(); printHelp(); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.Success); } if (commandLine.options.watch) { if (!sys.watchFile) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--watch")); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } if (configFileName) { configFileWatcher = sys.watchFile(configFileName, configFileChanged); @@ -229,12 +229,12 @@ module ts { var configObject = readConfigFile(configFileName); if (!configObject) { reportDiagnostic(createCompilerDiagnostic(Diagnostics.Unable_to_open_file_0, configFileName)); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } var configParseResult = parseConfigFile(configObject, getDirectoryPath(configFileName)); if (configParseResult.errors.length > 0) { reportDiagnostics(configParseResult.errors); - return sys.exit(EmitReturnStatus.CompilerOptionsErrors); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } rootFileNames = configParseResult.fileNames; compilerOptions = extend(commandLine.options, configParseResult.options); @@ -362,33 +362,46 @@ module ts { return { program, exitStatus }; - function compileProgram(): EmitReturnStatus { + function compileProgram(): ExitStatus { // First get any syntactic errors. - var errors = program.getSyntacticDiagnostics(); - reportDiagnostics(errors); + var diagnostics = program.getSyntacticDiagnostics(); + reportDiagnostics(diagnostics); // If we didn't have any syntactic errors, then also try getting the global and // semantic errors. - if (errors.length === 0) { - var errors = program.getGlobalDiagnostics(); - reportDiagnostics(errors); + if (diagnostics.length === 0) { + var diagnostics = program.getGlobalDiagnostics(); + reportDiagnostics(diagnostics); - if (errors.length === 0) { - var errors = program.getSemanticDiagnostics(); - reportDiagnostics(errors); + if (diagnostics.length === 0) { + var diagnostics = program.getSemanticDiagnostics(); + reportDiagnostics(diagnostics); } } // If the user doesn't want us to emit, then we're done at this point. if (compilerOptions.noEmit) { - return EmitReturnStatus.Succeeded; + return diagnostics.length + ? ExitStatus.DiagnosticsPresent_OutputsSkipped + : ExitStatus.Success; } // Otherwise, emit and report any errors we ran into. var emitOutput = program.emit(); reportDiagnostics(emitOutput.diagnostics); - return emitOutput.emitResultStatus; + // If the emitter didn't emit anything, then pass that value along. + if (emitOutput.emitSkipped) { + return ExitStatus.DiagnosticsPresent_OutputsSkipped; + } + + // The emitter emitted something, inform the caller if that happened in the presence + // of diagnostics or not. + if (diagnostics.length > 0 || emitOutput.diagnostics.length > 0) { + ExitStatus.DiagnosticsPresent_OutputsGenerated; + } + + return ExitStatus.Success; } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 7bb1ff1a738..23da074815a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -981,31 +981,21 @@ module ts { } // Return code used by getEmitOutput function to indicate status of the function - export enum EmitReturnStatus { - // All outputs generated if requested (.js, .map, .d.ts), no errors reported - Succeeded = 0, + export enum ExitStatus { + // Compiler ran successfully. Either this was a simple do-nothing compilation (for example, + // when -version or -help was provided, or this was a normal compilation, no diagnostics + // were produced, and all outputs were generated successfully. + Success = 0, - // No .js, .map or d.ts generated because of diagnostics and the presence of the - // -noEmitOnError optoin. - DiagnosticsPresent_AllOutputsSkipped = 1, + // Diagnostics were produced and because of them no code was generated. + DiagnosticsPresent_OutputsSkipped = 1, - // .js and .map generated. However, diagnostics were generated as well. - // No .d.ts was requested or generated. - DiagnosticsPresent_JavaScriptGenerated = 2, - - // .js, .map generated. .d.ts was requested but was not generated due to the - // presence of diagnostics. - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, - - // Emitter errors occurred during emitting process. - EmitErrorsEncountered = 4, - - // Errors occurred in parsing compiler options, nothing generated - CompilerOptionsErrors = 5, + // Diagnostics were produced and outputs were generated in spite of them. + DiagnosticsPresent_OutputsGenerated = 2, } export interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; // Array of sourceMapData if compiler emitted sourcemaps } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index a5a34aaa4c3..cd9d4288cdd 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1140,11 +1140,10 @@ module FourSlash { // Loop through all the emittedFiles and emit them one by one emitFiles.forEach(emitFile => { var emitOutput = this.languageService.getEmitOutput(emitFile.fileName); - var emitOutputStatus = emitOutput.emitOutputStatus; // Print emitOutputStatus in readable format - resultString += "EmitOutputStatus : " + ts.EmitReturnStatus[emitOutputStatus] + ts.sys.newLine; + resultString += "EmitSkipped: " + emitOutput.emitSkipped + ts.sys.newLine; - if (emitOutputStatus !== ts.EmitReturnStatus.Succeeded) { + if (emitOutput.emitSkipped) { resultString += "Diagnostics:" + ts.sys.newLine; var diagnostics = ts.getPreEmitDiagnostics(this.languageService.getProgram()); for (var i = 0, n = diagnostics.length; i < n; i++) { diff --git a/src/services/services.ts b/src/services/services.ts index 7e01f4798a5..cd69a4f2117 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1122,7 +1122,7 @@ module ts { export interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } export const enum OutputFileType { @@ -4664,7 +4664,7 @@ module ts { return { outputFiles, - emitOutputStatus: emitOutput.emitResultStatus + emitSkipped: emitOutput.emitSkipped }; } diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 1d893639576..26a59c433b9 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -25,8 +25,9 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); }); - console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); - process.exit(emitResult.emitResultStatus); + var exitCode = emitResult.emitSkipped ? 1 : 0; + console.log(`Process exiting with code '${exitCode}'.`); + process.exit(exitCode); } compile(process.argv.slice(2), { @@ -777,16 +778,13 @@ declare module "typescript" { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - DiagnosticsPresent_AllOutputsSkipped = 1, - DiagnosticsPresent_JavaScriptGenerated = 2, - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } @@ -1723,7 +1721,7 @@ declare module "typescript" { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, @@ -1926,8 +1924,9 @@ function compile(fileNames, options) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)); }); - console.log("Process exiting with code '" + emitResult.emitResultStatus + "'."); - process.exit(emitResult.emitResultStatus); + var exitCode = emitResult.emitSkipped ? 1 : 0; + console.log("Process exiting with code '" + exitCode + "'."); + process.exit(exitCode); } exports.compile = compile; compile(process.argv.slice(2), { diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index e5d69bbcfd2..43b79049e8b 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -104,23 +104,26 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void }); - console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); ->console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`) : any + var exitCode = emitResult.emitSkipped ? 1 : 0; +>exitCode : number +>emitResult.emitSkipped ? 1 : 0 : number +>emitResult.emitSkipped : boolean +>emitResult : ts.EmitResult +>emitSkipped : boolean + + console.log(`Process exiting with code '${exitCode}'.`); +>console.log(`Process exiting with code '${exitCode}'.`) : any >console.log : any >console : any >log : any ->emitResult.emitResultStatus : ts.EmitReturnStatus ->emitResult : ts.EmitResult ->emitResultStatus : ts.EmitReturnStatus +>exitCode : number - process.exit(emitResult.emitResultStatus); ->process.exit(emitResult.emitResultStatus) : any + process.exit(exitCode); +>process.exit(exitCode) : any >process.exit : any >process : any >exit : any ->emitResult.emitResultStatus : ts.EmitReturnStatus ->emitResult : ts.EmitResult ->emitResultStatus : ts.EmitReturnStatus +>exitCode : number } compile(process.argv.slice(2), { @@ -2349,33 +2352,23 @@ declare module "typescript" { >sourceMapDecodedMappings : SourceMapSpan[] >SourceMapSpan : SourceMapSpan } - enum EmitReturnStatus { ->EmitReturnStatus : EmitReturnStatus + enum ExitStatus { +>ExitStatus : ExitStatus - Succeeded = 0, ->Succeeded : EmitReturnStatus + Success = 0, +>Success : ExitStatus - DiagnosticsPresent_AllOutputsSkipped = 1, ->DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus + DiagnosticsPresent_OutputsSkipped = 1, +>DiagnosticsPresent_OutputsSkipped : ExitStatus - DiagnosticsPresent_JavaScriptGenerated = 2, ->DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, ->DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus - - EmitErrorsEncountered = 4, ->EmitErrorsEncountered : EmitReturnStatus - - CompilerOptionsErrors = 5, ->CompilerOptionsErrors : EmitReturnStatus + DiagnosticsPresent_OutputsGenerated = 2, +>DiagnosticsPresent_OutputsGenerated : ExitStatus } interface EmitResult { >EmitResult : EmitResult - emitResultStatus: EmitReturnStatus; ->emitResultStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean diagnostics: Diagnostic[]; >diagnostics : Diagnostic[] @@ -5496,9 +5489,8 @@ declare module "typescript" { >outputFiles : OutputFile[] >OutputFile : OutputFile - emitOutputStatus: EmitReturnStatus; ->emitOutputStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean } const enum OutputFileType { >OutputFileType : OutputFileType diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 6edb6399bf9..89e9aed992c 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -809,16 +809,13 @@ declare module "typescript" { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - DiagnosticsPresent_AllOutputsSkipped = 1, - DiagnosticsPresent_JavaScriptGenerated = 2, - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } @@ -1755,7 +1752,7 @@ declare module "typescript" { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 4ce2c4d92db..846781e64ad 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2496,33 +2496,23 @@ declare module "typescript" { >sourceMapDecodedMappings : SourceMapSpan[] >SourceMapSpan : SourceMapSpan } - enum EmitReturnStatus { ->EmitReturnStatus : EmitReturnStatus + enum ExitStatus { +>ExitStatus : ExitStatus - Succeeded = 0, ->Succeeded : EmitReturnStatus + Success = 0, +>Success : ExitStatus - DiagnosticsPresent_AllOutputsSkipped = 1, ->DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus + DiagnosticsPresent_OutputsSkipped = 1, +>DiagnosticsPresent_OutputsSkipped : ExitStatus - DiagnosticsPresent_JavaScriptGenerated = 2, ->DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, ->DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus - - EmitErrorsEncountered = 4, ->EmitErrorsEncountered : EmitReturnStatus - - CompilerOptionsErrors = 5, ->CompilerOptionsErrors : EmitReturnStatus + DiagnosticsPresent_OutputsGenerated = 2, +>DiagnosticsPresent_OutputsGenerated : ExitStatus } interface EmitResult { >EmitResult : EmitResult - emitResultStatus: EmitReturnStatus; ->emitResultStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean diagnostics: Diagnostic[]; >diagnostics : Diagnostic[] @@ -5643,9 +5633,8 @@ declare module "typescript" { >outputFiles : OutputFile[] >OutputFile : OutputFile - emitOutputStatus: EmitReturnStatus; ->emitOutputStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean } const enum OutputFileType { >OutputFileType : OutputFileType diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 023e3c5fa06..a4b102d8efb 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -810,16 +810,13 @@ declare module "typescript" { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - DiagnosticsPresent_AllOutputsSkipped = 1, - DiagnosticsPresent_JavaScriptGenerated = 2, - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } @@ -1756,7 +1753,7 @@ declare module "typescript" { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 445cd50a205..5f1859b13e7 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2448,33 +2448,23 @@ declare module "typescript" { >sourceMapDecodedMappings : SourceMapSpan[] >SourceMapSpan : SourceMapSpan } - enum EmitReturnStatus { ->EmitReturnStatus : EmitReturnStatus + enum ExitStatus { +>ExitStatus : ExitStatus - Succeeded = 0, ->Succeeded : EmitReturnStatus + Success = 0, +>Success : ExitStatus - DiagnosticsPresent_AllOutputsSkipped = 1, ->DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus + DiagnosticsPresent_OutputsSkipped = 1, +>DiagnosticsPresent_OutputsSkipped : ExitStatus - DiagnosticsPresent_JavaScriptGenerated = 2, ->DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, ->DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus - - EmitErrorsEncountered = 4, ->EmitErrorsEncountered : EmitReturnStatus - - CompilerOptionsErrors = 5, ->CompilerOptionsErrors : EmitReturnStatus + DiagnosticsPresent_OutputsGenerated = 2, +>DiagnosticsPresent_OutputsGenerated : ExitStatus } interface EmitResult { >EmitResult : EmitResult - emitResultStatus: EmitReturnStatus; ->emitResultStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean diagnostics: Diagnostic[]; >diagnostics : Diagnostic[] @@ -5595,9 +5585,8 @@ declare module "typescript" { >outputFiles : OutputFile[] >OutputFile : OutputFile - emitOutputStatus: EmitReturnStatus; ->emitOutputStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean } const enum OutputFileType { >OutputFileType : OutputFileType diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 9bdd3d71d07..4f3fb5cdc47 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -67,7 +67,7 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { function emitFile(fileName: string) { var output = services.getEmitOutput(fileName); - if (output.emitOutputStatus === ts.EmitReturnStatus.Succeeded) { + if (!output.emitSkipped) { console.log(`Emitting ${fileName}`); } else { @@ -88,7 +88,7 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { allDiagnostics.forEach(diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); + console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`); } else { console.log(` Error: ${diagnostic.messageText}`); @@ -847,16 +847,13 @@ declare module "typescript" { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - DiagnosticsPresent_AllOutputsSkipped = 1, - DiagnosticsPresent_JavaScriptGenerated = 2, - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } @@ -1793,7 +1790,7 @@ declare module "typescript" { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, @@ -2028,7 +2025,7 @@ function watch(rootFileNames, options) { }); function emitFile(fileName) { var output = services.getEmitOutput(fileName); - if (output.emitOutputStatus === 0 /* Succeeded */) { + if (!output.emitSkipped) { console.log("Emitting " + fileName); } else { @@ -2044,7 +2041,7 @@ function watch(rootFileNames, options) { allDiagnostics.forEach(function (diagnostic) { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(" Error " + diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + diagnostic.messageText); + console.log(" Error " + diagnostic.file.fileName + " (" + lineChar.line + "," + lineChar.character + "): " + ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")); } else { console.log(" Error: " + diagnostic.messageText); diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 1c4efc7b5db..e990ec362ea 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -233,16 +233,11 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >getEmitOutput : (fileName: string) => ts.EmitOutput >fileName : string - if (output.emitOutputStatus === ts.EmitReturnStatus.Succeeded) { ->output.emitOutputStatus === ts.EmitReturnStatus.Succeeded : boolean ->output.emitOutputStatus : ts.EmitReturnStatus + if (!output.emitSkipped) { +>!output.emitSkipped : boolean +>output.emitSkipped : boolean >output : ts.EmitOutput ->emitOutputStatus : ts.EmitReturnStatus ->ts.EmitReturnStatus.Succeeded : ts.EmitReturnStatus ->ts.EmitReturnStatus : typeof ts.EmitReturnStatus ->ts : typeof ts ->EmitReturnStatus : typeof ts.EmitReturnStatus ->Succeeded : ts.EmitReturnStatus +>emitSkipped : boolean console.log(`Emitting ${fileName}`); >console.log(`Emitting ${fileName}`) : any @@ -322,11 +317,11 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >fileName : string allDiagnostics.forEach(diagnostic => { ->allDiagnostics.forEach(diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); } else { console.log(` Error: ${diagnostic.messageText}`); } }) : void +>allDiagnostics.forEach(diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`); } else { console.log(` Error: ${diagnostic.messageText}`); } }) : void >allDiagnostics.forEach : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => void, thisArg?: any) => void >allDiagnostics : ts.Diagnostic[] >forEach : (callbackfn: (value: ts.Diagnostic, index: number, array: ts.Diagnostic[]) => void, thisArg?: any) => void ->diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); } else { console.log(` Error: ${diagnostic.messageText}`); } } : (diagnostic: ts.Diagnostic) => void +>diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`); } else { console.log(` Error: ${diagnostic.messageText}`); } } : (diagnostic: ts.Diagnostic) => void >diagnostic : ts.Diagnostic if (diagnostic.file) { @@ -346,8 +341,8 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >diagnostic : ts.Diagnostic >start : number - console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); ->console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`) : any + console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`); +>console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`) : any >console.log : any >console : any >log : any @@ -362,6 +357,10 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { >lineChar.character : number >lineChar : ts.LineAndCharacter >character : number +>ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n") : string +>ts.flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string +>ts : typeof ts +>flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string >diagnostic.messageText : string | ts.DiagnosticMessageChain >diagnostic : ts.Diagnostic >messageText : string | ts.DiagnosticMessageChain @@ -2622,33 +2621,23 @@ declare module "typescript" { >sourceMapDecodedMappings : SourceMapSpan[] >SourceMapSpan : SourceMapSpan } - enum EmitReturnStatus { ->EmitReturnStatus : EmitReturnStatus + enum ExitStatus { +>ExitStatus : ExitStatus - Succeeded = 0, ->Succeeded : EmitReturnStatus + Success = 0, +>Success : ExitStatus - DiagnosticsPresent_AllOutputsSkipped = 1, ->DiagnosticsPresent_AllOutputsSkipped : EmitReturnStatus + DiagnosticsPresent_OutputsSkipped = 1, +>DiagnosticsPresent_OutputsSkipped : ExitStatus - DiagnosticsPresent_JavaScriptGenerated = 2, ->DiagnosticsPresent_JavaScriptGenerated : EmitReturnStatus - - DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated = 3, ->DiagnosticsPresent_JavaScriptGenerated_DeclarationNotGenerated : EmitReturnStatus - - EmitErrorsEncountered = 4, ->EmitErrorsEncountered : EmitReturnStatus - - CompilerOptionsErrors = 5, ->CompilerOptionsErrors : EmitReturnStatus + DiagnosticsPresent_OutputsGenerated = 2, +>DiagnosticsPresent_OutputsGenerated : ExitStatus } interface EmitResult { >EmitResult : EmitResult - emitResultStatus: EmitReturnStatus; ->emitResultStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean diagnostics: Diagnostic[]; >diagnostics : Diagnostic[] @@ -5769,9 +5758,8 @@ declare module "typescript" { >outputFiles : OutputFile[] >OutputFile : OutputFile - emitOutputStatus: EmitReturnStatus; ->emitOutputStatus : EmitReturnStatus ->EmitReturnStatus : EmitReturnStatus + emitSkipped: boolean; +>emitSkipped : boolean } const enum OutputFileType { >OutputFileType : OutputFileType diff --git a/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline b/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline index a8b6f8a9cd4..5552851dec4 100644 --- a/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline +++ b/tests/baselines/reference/getEmitOutputDeclarationMultiFiles.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile1.js var x = 5; var Bar = (function () { @@ -13,7 +13,7 @@ declare class Bar { y: number; } -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js var x1 = "hello world"; var Foo = (function () { diff --git a/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline b/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline index 131b6cd98ed..4abc99b05c2 100644 --- a/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline +++ b/tests/baselines/reference/getEmitOutputDeclarationSingleFile.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : declSingleFile.js var x = 5; var Bar = (function () { diff --git a/tests/baselines/reference/getEmitOutputExternalModule.baseline b/tests/baselines/reference/getEmitOutputExternalModule.baseline index dcfd9bd89cc..ac2f7cb3dac 100644 --- a/tests/baselines/reference/getEmitOutputExternalModule.baseline +++ b/tests/baselines/reference/getEmitOutputExternalModule.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : declSingleFile.js var x = 5; var Bar = (function () { diff --git a/tests/baselines/reference/getEmitOutputExternalModule2.baseline b/tests/baselines/reference/getEmitOutputExternalModule2.baseline index 205b2f1b303..c32472d318f 100644 --- a/tests/baselines/reference/getEmitOutputExternalModule2.baseline +++ b/tests/baselines/reference/getEmitOutputExternalModule2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : declSingleFile.js var x = 5; var Bar = (function () { diff --git a/tests/baselines/reference/getEmitOutputMapRoots.baseline b/tests/baselines/reference/getEmitOutputMapRoots.baseline index 91cb853bdf0..16f39169e23 100644 --- a/tests/baselines/reference/getEmitOutputMapRoots.baseline +++ b/tests/baselines/reference/getEmitOutputMapRoots.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : declSingleFile.js.map {"version":3,"file":"declSingleFile.js","sourceRoot":"","sources":["../tests/cases/fourslash/inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : declSingleFile.js var x = 109; diff --git a/tests/baselines/reference/getEmitOutputNoErrors.baseline b/tests/baselines/reference/getEmitOutputNoErrors.baseline index 7fb0ca2eee5..a1efeecd321 100644 --- a/tests/baselines/reference/getEmitOutputNoErrors.baseline +++ b/tests/baselines/reference/getEmitOutputNoErrors.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js var x; var M = (function () { diff --git a/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline b/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline index 775cbf195c6..981b4710e41 100644 --- a/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline +++ b/tests/baselines/reference/getEmitOutputOnlyOneFile.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js var x; var Foo = (function () { diff --git a/tests/baselines/reference/getEmitOutputSingleFile.baseline b/tests/baselines/reference/getEmitOutputSingleFile.baseline index 81ceb3f4357..4a71299dcc0 100644 --- a/tests/baselines/reference/getEmitOutputSingleFile.baseline +++ b/tests/baselines/reference/getEmitOutputSingleFile.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : outputDir/singleFile.js var x; var Bar = (function () { diff --git a/tests/baselines/reference/getEmitOutputSingleFile2.baseline b/tests/baselines/reference/getEmitOutputSingleFile2.baseline index 0f5fad8505d..c9409c5ca8c 100644 --- a/tests/baselines/reference/getEmitOutputSingleFile2.baseline +++ b/tests/baselines/reference/getEmitOutputSingleFile2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile3.js exports.foo = 10; exports.bar = "hello world"; diff --git a/tests/baselines/reference/getEmitOutputSourceMap.baseline b/tests/baselines/reference/getEmitOutputSourceMap.baseline index 553936bd91b..39cff967d89 100644 --- a/tests/baselines/reference/getEmitOutputSourceMap.baseline +++ b/tests/baselines/reference/getEmitOutputSourceMap.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js.map {"version":3,"file":"inputFile.js","sourceRoot":"","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js var x = 109; diff --git a/tests/baselines/reference/getEmitOutputSourceMap2.baseline b/tests/baselines/reference/getEmitOutputSourceMap2.baseline index 838a9a985eb..713aa4f3c08 100644 --- a/tests/baselines/reference/getEmitOutputSourceMap2.baseline +++ b/tests/baselines/reference/getEmitOutputSourceMap2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : sample/outDir/inputFile1.js.map {"version":3,"file":"inputFile1.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : sample/outDir/inputFile1.js var x = 109; @@ -9,7 +9,7 @@ var M = (function () { return M; })(); //# sourceMappingURL=inputFile1.js.map -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : sample/outDir/inputFile2.js.map {"version":3,"file":"inputFile2.js","sourceRoot":"","sources":["../../tests/cases/fourslash/inputFile2.ts"],"names":[],"mappings":"AAAA,IAAI,KAAK,GAAG,aAAa,CAAC;AAC1B,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,CAAC;AACd,CAAC"}FileName : sample/outDir/inputFile2.js var intro = "hello world"; diff --git a/tests/baselines/reference/getEmitOutputSourceRoot.baseline b/tests/baselines/reference/getEmitOutputSourceRoot.baseline index 880ad48ded3..5424def98ee 100644 --- a/tests/baselines/reference/getEmitOutputSourceRoot.baseline +++ b/tests/baselines/reference/getEmitOutputSourceRoot.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js.map {"version":3,"file":"inputFile.js","sourceRoot":"sourceRootDir/","sources":["inputFile.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile.js var x = 109; diff --git a/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline b/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline index 20ed671e8cf..7948ad99673 100644 --- a/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline +++ b/tests/baselines/reference/getEmitOutputSourceRootMultiFiles.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile1.js.map {"version":3,"file":"inputFile1.js","sourceRoot":"sourceRootDir/","sources":["inputFile1.ts"],"names":["M","M.constructor"],"mappings":"AAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,IAAI,GAAG,GAAG,aAAa,CAAC;AACxB,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile1.js var x = 109; @@ -9,7 +9,7 @@ var M = (function () { return M; })(); //# sourceMappingURL=inputFile1.js.map -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js.map {"version":3,"file":"inputFile2.js","sourceRoot":"sourceRootDir/","sources":["inputFile2.ts"],"names":["C","C.constructor"],"mappings":"AAAA,IAAI,GAAG,GAAG,wBAAwB,CAAC;AACnC,IAAM,CAAC;IAAPA,SAAMA,CAACA;IAGPC,CAACA;IAADD,QAACA;AAADA,CAACA,AAHD,IAGC"}FileName : tests/cases/fourslash/inputFile2.js var bar = "hello world Typescript"; diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline index 0d9c3c16f55..4fda32ad7c4 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js var x1 = "hello world"; var Foo = (function () { diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline index 03b466d4dde..4582af47f5a 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile2.baseline @@ -1,6 +1,6 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js var Foo = (function () { function Foo() { @@ -9,7 +9,7 @@ var Foo = (function () { })(); exports.Foo = Foo; -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile3.js var x = "hello"; diff --git a/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline index 972d164af42..1ce3d9f33c3 100644 --- a/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline +++ b/tests/baselines/reference/getEmitOutputWithDeclarationFile3.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : declSingle.js var x = "hello"; var x1 = 1000; diff --git a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline index 5404e2e05e2..8dc9355bca2 100644 --- a/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEarlySyntacticErrors.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile1.js // File contains early errors. All outputs should be skipped. const uninitialized_const_error; diff --git a/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline b/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline index d5bf626085e..f854a619a47 100644 --- a/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithEmitterErrors.baseline @@ -1,5 +1,4 @@ -EmitOutputStatus : EmitErrorsEncountered -Diagnostics: +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js var M; (function (M) { diff --git a/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline b/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline index 98df927aa4b..463dfe6899a 100644 --- a/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline +++ b/tests/baselines/reference/getEmitOutputWithEmitterErrors2.baseline @@ -1,5 +1,4 @@ -EmitOutputStatus : EmitErrorsEncountered -Diagnostics: +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js define(["require", "exports"], function (require, exports) { var C = (function () { diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline index 6c263064ae3..b6249822131 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline index 78c279add04..396e220bdb6 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrors2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js var x = "hello world"; FileName : tests/cases/fourslash/inputFile.d.ts diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline index 2a0b26f47c8..7f012b6a546 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile1.js // File to emit, does not contain semantic errors // expected to be emitted correctelly regardless of the semantic errors in the other file diff --git a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline index 7a6d61855ae..6a58015c1b3 100644 --- a/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSemanticErrorsForMultipleFiles2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : out.js // File to emit, does not contain semantic errors, but --out is passed // expected to not generate declarations because of the semantic errors in the other file diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline index 224742eea3c..701b275eb31 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile1.js // File to emit, does not contain syntactic errors // expected to be emitted correctelly regardless of the syntactic errors in the other file diff --git a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline index 967f792fb06..b66f83dc6b6 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntacticErrorsForMultipleFiles2.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : out.js // File to emit, does not contain syntactic errors, but --out is passed // expected to not generate outputs because of the syntactic errors in the other file. diff --git a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline index b6b40c5352c..2c341821fb0 100644 --- a/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline +++ b/tests/baselines/reference/getEmitOutputWithSyntaxErrors.baseline @@ -1,4 +1,4 @@ -EmitOutputStatus : Succeeded +EmitSkipped: false FileName : tests/cases/fourslash/inputFile.js var x; diff --git a/tests/cases/compiler/APISample_compile.ts b/tests/cases/compiler/APISample_compile.ts index 25f9fe6e145..50ec02ab6f3 100644 --- a/tests/cases/compiler/APISample_compile.ts +++ b/tests/cases/compiler/APISample_compile.ts @@ -25,8 +25,9 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void console.log(`${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, os.EOL)}`); }); - console.log(`Process exiting with code '${emitResult.emitResultStatus}'.`); - process.exit(emitResult.emitResultStatus); + var exitCode = emitResult.emitSkipped ? 1 : 0; + console.log(`Process exiting with code '${exitCode}'.`); + process.exit(exitCode); } compile(process.argv.slice(2), { diff --git a/tests/cases/compiler/APISample_watcher.ts b/tests/cases/compiler/APISample_watcher.ts index f29e72604d5..212f83b3935 100644 --- a/tests/cases/compiler/APISample_watcher.ts +++ b/tests/cases/compiler/APISample_watcher.ts @@ -67,7 +67,7 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { function emitFile(fileName: string) { var output = services.getEmitOutput(fileName); - if (output.emitOutputStatus === ts.EmitReturnStatus.Succeeded) { + if (!output.emitSkipped) { console.log(`Emitting ${fileName}`); } else { @@ -88,7 +88,7 @@ function watch(rootFileNames: string[], options: ts.CompilerOptions) { allDiagnostics.forEach(diagnostic => { if (diagnostic.file) { var lineChar = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${diagnostic.messageText}`); + console.log(` Error ${diagnostic.file.fileName} (${lineChar.line},${lineChar.character}): ${ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`); } else { console.log(` Error: ${diagnostic.messageText}`); From 987dab9c9eb9583f3b85a066a6ebaa9388c73734 Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Thu, 5 Feb 2015 16:05:54 -0800 Subject: [PATCH 24/33] addressing CR comments --- src/services/services.ts | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 43f74bd323f..c29edf34be2 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -5453,7 +5453,6 @@ module ts { if (symbol) { var declarations = symbol.getDeclarations(); if (declarations && declarations.length > 0) { - // Disallow rename for elements that are defined in the standard TypeScript library. var defaultLibFile = getDefaultLibFileName(host.getCompilationSettings()); for (var i = 0; i < declarations.length; i++) { @@ -5461,13 +5460,19 @@ module ts { if (sourceFile && endsWith(sourceFile.fileName, defaultLibFile)) { return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library.key)); } - } + } var kind = getSymbolKind(symbol, typeInfoResolver, node); if (kind) { - return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, - getSymbolModifiers(symbol), - createTextSpan(node.getStart(), node.getWidth())); + return { + canRename: true, + localizedErrorMessage: undefined, + displayName: symbol.name, + fullDisplayName: typeInfoResolver.getFullyQualifiedName(symbol), + kind: kind, + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: createTextSpan(node.getStart(), node.getWidth()) + }; } } } @@ -5476,7 +5481,7 @@ module ts { return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element.key)); function endsWith(string: string, value: string): boolean { - return string.substring(string.length - value.length, string.length) === value; + return string.lastIndexOf(value) + value.length === string.length; } function getRenameInfoError(localizedErrorMessage: string): RenameInfo { @@ -5490,18 +5495,6 @@ module ts { triggerSpan: undefined }; } - - function getRenameInfo(displayName: string, fullDisplayName: string, kind: string, kindModifiers: string, triggerSpan: TextSpan): RenameInfo { - return { - canRename: true, - localizedErrorMessage: undefined, - displayName, - fullDisplayName, - kind, - kindModifiers, - triggerSpan - }; - } } return { From f9d3b489f2eb5488824f03c8199018c66d83dfff Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 17:11:06 -0800 Subject: [PATCH 25/33] Put curly on the right line. --- src/compiler/emitter.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 3b3351ada69..103519c87e3 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1508,8 +1508,7 @@ module ts { // @internal // 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, host: EmitHost, targetSourceFile: SourceFile): EmitResult - { + export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile): EmitResult { var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || ScriptTarget.ES3; var sourceMapDataList: SourceMapData[] = compilerOptions.sourceMap ? [] : undefined; From c77f7327622181553667ac3e36892317c1060587 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 17:24:46 -0800 Subject: [PATCH 26/33] CR feedback. --- src/compiler/checker.ts | 6 +++--- src/compiler/core.ts | 12 ++++++------ src/compiler/program.ts | 8 ++++---- src/compiler/types.ts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d1821d6067c..f8826da9614 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9598,7 +9598,7 @@ module ts { return diagnostics.getDiagnostics(); } - function getGlobalDiagnostics(): Diagnostic[]{ + function getGlobalDiagnostics(): Diagnostic[] { throwIfNonDiagnosticsProducing(); return diagnostics.getGlobalDiagnostics(); } @@ -9624,7 +9624,7 @@ module ts { return false; } - function getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]{ + function getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[] { var symbols: SymbolTable = {}; var memberFlags: NodeFlags = 0; function copySymbol(symbol: Symbol, meaning: SymbolFlags) { @@ -10010,7 +10010,7 @@ module ts { return getNamedMembers(propsByName); } - function getRootSymbols(symbol: Symbol): Symbol[]{ + function getRootSymbols(symbol: Symbol): Symbol[] { if (symbol.flags & SymbolFlags.UnionProperty) { var symbols: Symbol[] = []; var name = symbol.name; diff --git a/src/compiler/core.ts b/src/compiler/core.ts index b82ca2f07af..d527b62005e 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -342,16 +342,16 @@ module ts { return diagnostic.file ? diagnostic.file.fileName : undefined; } - export function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): number { + export function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison { return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareMessageText(d1.messageText, d2.messageText) || - 0; + Comparison.EqualTo; } - function compareMessageText(text1: string | DiagnosticMessageChain, text2: string | DiagnosticMessageChain): number { + function compareMessageText(text1: string | DiagnosticMessageChain, text2: string | DiagnosticMessageChain): Comparison { while (text1 && text2) { // We still have both chains. var string1 = typeof text1 === "string" ? text1 : text1.messageText; @@ -368,14 +368,14 @@ module ts { if (!text1 && !text2) { // if the chains are done, then these messages are the same. - return 0; + return Comparison.EqualTo; } // We still have one chain remaining. The shorter chain should come first. - return text1 ? 1 : -1; + return text1 ? Comparison.GreaterThan : Comparison.LessThan; } - export function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] { + export function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]{ return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e933c54bc1e..954c443a77c 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -165,7 +165,7 @@ module ts { return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ false)); } - function getDeclarationDiagnostics(targetSourceFile: SourceFile): Diagnostic[]{ + function getDeclarationDiagnostics(targetSourceFile: SourceFile): Diagnostic[] { var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(targetSourceFile); return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile); } @@ -206,11 +206,11 @@ module ts { return sortAndDeduplicateDiagnostics(allDiagnostics); } - function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ + function getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile); } - function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]{ + function getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[] { return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile); } @@ -229,7 +229,7 @@ module ts { return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics); } - function getGlobalDiagnostics(): Diagnostic[]{ + function getGlobalDiagnostics(): Diagnostic[] { var typeChecker = getDiagnosticsProducingTypeChecker(); var allDiagnostics: Diagnostic[] = []; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 23da074815a..fd675597ccd 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1688,7 +1688,7 @@ module ts { // @internal export interface DiagnosticCollection { // Adds a diagnostic to this diagnostic collection. - add(diagnostic?: Diagnostic): void; + add(diagnostic: Diagnostic): void; // Gets all the diagnostics that aren't associated with a file. getGlobalDiagnostics(): Diagnostic[]; @@ -1697,7 +1697,7 @@ module ts { // Otherwise, returns all the diagnostics (global and file associated) in this colletion. getDiagnostics(fileName?: string): Diagnostic[]; - // Gets a count of how many times this collectoin has been modified. This value changes + // Gets a count of how many times this collection has been modified. This value changes // each time 'add' is called (regardless of whether or not an equivalent diagnostic was // already in the collection). As such, it can be used as a simple way to tell if any // operation caused diagnostics to be returned by storing and comparing the return value From 6ed9741a7a2d9c34e27fcb9992aef50cf0130275 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 18:11:21 -0800 Subject: [PATCH 27/33] Extract common function. --- src/compiler/utilities.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ce8b5547f00..5a50e2799dc 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1109,11 +1109,15 @@ module ts { } var allDiagnostics: Diagnostic[] = []; - forEach(nonFileDiagnostics, d => { allDiagnostics.push(d) }); + function pushDiagnostic(d: Diagnostic) { + allDiagnostics.push(d); + } + + forEach(nonFileDiagnostics, pushDiagnostic); for (var key in fileDiagnostics) { if (hasProperty(fileDiagnostics, key)) { - forEach(fileDiagnostics[key], d => { allDiagnostics.push(d) }); + forEach(fileDiagnostics[key], pushDiagnostic); } } From 5c0b38b2032c8316ae1201ca72656809d656824e Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 18:26:56 -0800 Subject: [PATCH 28/33] Remove getEnumMemberValue, it is now subsumed into getConstantValue. --- src/compiler/checker.ts | 9 ++++++--- src/compiler/emitter.ts | 6 +++--- src/compiler/types.ts | 6 ++---- src/services/services.ts | 2 +- .../baselines/reference/APISample_compile.js | 5 ++--- .../reference/APISample_compile.types | 20 +++++++++---------- tests/baselines/reference/APISample_linter.js | 5 ++--- .../reference/APISample_linter.types | 20 +++++++++---------- .../reference/APISample_transform.js | 5 ++--- .../reference/APISample_transform.types | 20 +++++++++---------- .../baselines/reference/APISample_watcher.js | 5 ++--- .../reference/APISample_watcher.types | 20 +++++++++---------- 12 files changed, 56 insertions(+), 67 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f8826da9614..7c43b8bb233 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -50,7 +50,7 @@ module ts { getContextualType, getFullyQualifiedName, getResolvedSignature, - getEnumMemberValue, + getConstantValue, isValidPropertyAccess, getSignatureFromDeclaration, isImplementationOfOverload, @@ -10171,7 +10171,11 @@ module ts { return getNodeLinks(node).enumMemberValue; } - function getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number { + function getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number { + if (node.kind === SyntaxKind.EnumMember) { + return getEnumMemberValue(node); + } + var symbol = getNodeLinks(node).resolvedSymbol; if (symbol && (symbol.flags & SymbolFlags.EnumMember)) { var declaration = symbol.valueDeclaration; @@ -10210,7 +10214,6 @@ module ts { getExportAssignmentName, isReferencedImportDeclaration, getNodeCheckFlags, - getEnumMemberValue, isTopLevelValueImportWithEntityName, isDeclarationVisible, isImplementationOfOverload, diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 103519c87e3..95e46112d57 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -825,7 +825,7 @@ module ts { function emitEnumMemberDeclaration(node: EnumMember) { emitJsDocComments(node); writeTextOfNode(currentSourceFile, node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); + var enumMemberValue = resolver.getConstantValue(node); if (enumMemberValue !== undefined) { write(" = "); write(enumMemberValue.toString()); @@ -1507,7 +1507,7 @@ module ts { } // @internal - // targetSourceFile is when users only want one file in entire project to be emitted. This is used in compilerOnSave feature + // targetSourceFile is when users only want one file in entire project to be emitted. This is used in compileOnSave feature export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile): EmitResult { var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || ScriptTarget.ES3; @@ -3809,7 +3809,7 @@ module ts { function writeEnumMemberDeclarationValue(member: EnumMember) { if (!member.initializer || isConst(member.parent)) { - var value = resolver.getEnumMemberValue(member); + var value = resolver.getConstantValue(member); if (value !== undefined) { write(value.toString()); return; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index fd675597ccd..1c79ef169e9 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1032,8 +1032,7 @@ module ts { isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - // Returns the constant value of this enum member, or 'undefined' if the enum member has a computed value. - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; @@ -1130,7 +1129,6 @@ module ts { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; @@ -1138,7 +1136,7 @@ module ts { isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): SymbolAccessiblityResult; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; // Returns the constant value this property access resolves to, or 'undefined' for a non-constant - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } diff --git a/src/services/services.ts b/src/services/services.ts index a39f59155f7..fad7632843a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3061,7 +3061,7 @@ module ts { addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; if (declaration.kind === SyntaxKind.EnumMember) { - var constantValue = typeResolver.getEnumMemberValue(declaration); + var constantValue = typeResolver.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(spacePart()); displayParts.push(operatorPart(SyntaxKind.EqualsToken)); diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 23106996f12..6840f079972 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -817,7 +817,7 @@ declare module "typescript" { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -883,14 +883,13 @@ declare module "typescript" { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 18ca83b2114..d70172377ca 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -2546,10 +2546,12 @@ declare module "typescript" { >symbol : Symbol >Symbol : Symbol - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember >EnumMember : EnumMember +>PropertyAccessExpression : PropertyAccessExpression +>ElementAccessExpression : ElementAccessExpression isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; >isValidPropertyAccess : (node: QualifiedName | PropertyAccessExpression, propertyName: string) => boolean @@ -2836,11 +2838,6 @@ declare module "typescript" { >Node : Node >NodeCheckFlags : NodeCheckFlags - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember ->EnumMember : EnumMember - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -2892,9 +2889,10 @@ declare module "typescript" { >Node : Node >SymbolVisibilityResult : SymbolVisibilityResult - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; ->getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression) => number ->node : PropertyAccessExpression | ElementAccessExpression + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember +>EnumMember : EnumMember >PropertyAccessExpression : PropertyAccessExpression >ElementAccessExpression : ElementAccessExpression diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 8f0dde9a9fa..c8bec722309 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -848,7 +848,7 @@ declare module "typescript" { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -914,14 +914,13 @@ declare module "typescript" { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index a0c2bc590ed..26254c69d54 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2690,10 +2690,12 @@ declare module "typescript" { >symbol : Symbol >Symbol : Symbol - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember >EnumMember : EnumMember +>PropertyAccessExpression : PropertyAccessExpression +>ElementAccessExpression : ElementAccessExpression isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; >isValidPropertyAccess : (node: QualifiedName | PropertyAccessExpression, propertyName: string) => boolean @@ -2980,11 +2982,6 @@ declare module "typescript" { >Node : Node >NodeCheckFlags : NodeCheckFlags - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember ->EnumMember : EnumMember - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -3036,9 +3033,10 @@ declare module "typescript" { >Node : Node >SymbolVisibilityResult : SymbolVisibilityResult - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; ->getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression) => number ->node : PropertyAccessExpression | ElementAccessExpression + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember +>EnumMember : EnumMember >PropertyAccessExpression : PropertyAccessExpression >ElementAccessExpression : ElementAccessExpression diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 542c79cb011..ad66d289eb7 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -849,7 +849,7 @@ declare module "typescript" { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -915,14 +915,13 @@ declare module "typescript" { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 85fdfbe9c9d..c6d74cc811d 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2642,10 +2642,12 @@ declare module "typescript" { >symbol : Symbol >Symbol : Symbol - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember >EnumMember : EnumMember +>PropertyAccessExpression : PropertyAccessExpression +>ElementAccessExpression : ElementAccessExpression isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; >isValidPropertyAccess : (node: QualifiedName | PropertyAccessExpression, propertyName: string) => boolean @@ -2932,11 +2934,6 @@ declare module "typescript" { >Node : Node >NodeCheckFlags : NodeCheckFlags - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember ->EnumMember : EnumMember - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -2988,9 +2985,10 @@ declare module "typescript" { >Node : Node >SymbolVisibilityResult : SymbolVisibilityResult - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; ->getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression) => number ->node : PropertyAccessExpression | ElementAccessExpression + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember +>EnumMember : EnumMember >PropertyAccessExpression : PropertyAccessExpression >ElementAccessExpression : ElementAccessExpression diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index e932573e415..2add8dfd45e 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -886,7 +886,7 @@ declare module "typescript" { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -952,14 +952,13 @@ declare module "typescript" { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 12776adac5f..3af8537fdb7 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2815,10 +2815,12 @@ declare module "typescript" { >symbol : Symbol >Symbol : Symbol - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember >EnumMember : EnumMember +>PropertyAccessExpression : PropertyAccessExpression +>ElementAccessExpression : ElementAccessExpression isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; >isValidPropertyAccess : (node: QualifiedName | PropertyAccessExpression, propertyName: string) => boolean @@ -3105,11 +3107,6 @@ declare module "typescript" { >Node : Node >NodeCheckFlags : NodeCheckFlags - getEnumMemberValue(node: EnumMember): number; ->getEnumMemberValue : (node: EnumMember) => number ->node : EnumMember ->EnumMember : EnumMember - isDeclarationVisible(node: Declaration): boolean; >isDeclarationVisible : (node: Declaration) => boolean >node : Declaration @@ -3161,9 +3158,10 @@ declare module "typescript" { >Node : Node >SymbolVisibilityResult : SymbolVisibilityResult - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; ->getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression) => number ->node : PropertyAccessExpression | ElementAccessExpression + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; +>getConstantValue : (node: PropertyAccessExpression | ElementAccessExpression | EnumMember) => number +>node : PropertyAccessExpression | ElementAccessExpression | EnumMember +>EnumMember : EnumMember >PropertyAccessExpression : PropertyAccessExpression >ElementAccessExpression : ElementAccessExpression From d20d20aa9c9b9ba4d7e4c6ff75c5351015c12969 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 5 Feb 2015 18:43:02 -0800 Subject: [PATCH 29/33] Remove "debugger;" calls. --- src/harness/compilerRunner.ts | 1 - src/harness/harness.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 250cd54e764..e4979f7a3c4 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -149,7 +149,6 @@ class CompilerBaselineRunner extends RunnerBase { // check errors it('Correct errors for ' + fileName, () => { - debugger; if (this.errors) { Harness.Baseline.runBaseline('Correct errors for ' + fileName, justName.replace(/\.ts$/, '.errors.txt'), (): string => { if (result.errors.length === 0) return null; diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 866652e2e26..8002b019551 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -923,7 +923,6 @@ module Harness { // Current directory is needed for rwcRunner to be able to use currentDirectory defined in json file currentDirectory?: string) { - debugger; options = options || { noResolve: false }; options.target = options.target || ts.ScriptTarget.ES3; options.module = options.module || ts.ModuleKind.None; @@ -1083,7 +1082,6 @@ module Harness { (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), options.target, useCaseSensitiveFileNames, currentDirectory)); - debugger; var emitResult = program.emit(); var errors: HarnessDiagnostic[] = []; From 68fd9f8d4085f1782c074ffd76d361ce9c0a8355 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 6 Feb 2015 14:20:29 -0800 Subject: [PATCH 30/33] Shim API changes to enable existing installations of VS to use the latest master builds --- src/services/services.ts | 2 +- src/services/shims.ts | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index fad7632843a..fcb5c696a38 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -10,7 +10,7 @@ module ts { - export var servicesVersion = "0.5" + export var servicesVersion = "0.4" export interface Node { getSourceFile(): SourceFile; diff --git a/src/services/shims.ts b/src/services/shims.ts index 5b5216813fe..107432af1f1 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -204,6 +204,8 @@ module ts { } export class LanguageServiceShimHostAdapter implements LanguageServiceHost { + private files: string[]; + constructor(private shimHost: LanguageServiceShimHost) { } @@ -230,10 +232,15 @@ module ts { public getScriptFileNames(): string[] { var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); + return this.files = JSON.parse(encoded); } public getScriptSnapshot(fileName: string): IScriptSnapshot { + // Shim the API changes for 1.5 release. This should be removed once + // TypeScript 1.5 has shipped. + if (this.files && this.files.indexOf(fileName) < 0) { + return undefined; + } var scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); } @@ -266,7 +273,10 @@ module ts { } public getDefaultLibFileName(options: CompilerOptions): string { - return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); + // Shim the API changes for 1.5 release. This should be removed once + // TypeScript 1.5 has shipped. + return ""; + //return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); } } @@ -662,6 +672,7 @@ module ts { "getEmitOutput('" + fileName + "')", () => { var output = this.languageService.getEmitOutput(fileName); + (output).emitOutputStatus = output.emitSkipped ? 1 : 0; return output; }); } From 0f3f2bcb566f5353da313c8c641dd2b2ce99e91e Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 6 Feb 2015 14:22:32 -0800 Subject: [PATCH 31/33] add comment --- src/services/shims.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/services/shims.ts b/src/services/shims.ts index 107432af1f1..759c1078d90 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -672,6 +672,8 @@ module ts { "getEmitOutput('" + fileName + "')", () => { var output = this.languageService.getEmitOutput(fileName); + // Shim the API changes for 1.5 release. This should be removed once + // TypeScript 1.5 has shipped. (output).emitOutputStatus = output.emitSkipped ? 1 : 0; return output; }); From 02c1b8978bb3c8f0b681976921562326c10f72b0 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 6 Feb 2015 14:54:19 -0800 Subject: [PATCH 32/33] Check source file invariants after creating/updating them in our tests. --- src/harness/harness.ts | 16 +++++++++++----- src/harness/harnessLanguageService.ts | 8 +++++--- src/harness/projectsRunner.ts | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 8002b019551..5fbf7d976ff 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -796,9 +796,15 @@ module Harness { } } + export function createSourceFileAndAssertInvariants(fileName: string, sourceText: string, languageVersion: ts.ScriptTarget) { + var result = ts.createSourceFile(fileName, sourceText, languageVersion, /*setParentNodes:*/ true); + Utils.assertInvariants(result, /*parent:*/ undefined); + return result; + } + export var defaultLibFileName = 'lib.d.ts'; - export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); - export var defaultES6LibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); + export var defaultLibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); + export var defaultES6LibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest); // Cache these between executions so we don't have to re-parse them for every test @@ -828,7 +834,7 @@ module Harness { function register(file: { unitName: string; content: string; }) { if (file.content !== undefined) { var fileName = ts.normalizeSlashes(file.unitName); - filemap[getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, file.content, scriptTarget); + filemap[getCanonicalFileName(fileName)] = createSourceFileAndAssertInvariants(fileName, file.content, scriptTarget); } }; inputFiles.forEach(register); @@ -845,7 +851,7 @@ module Harness { } else if (fn === fourslashFileName) { var tsFn = 'tests/cases/fourslash/' + fourslashFileName; - fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), scriptTarget); + fourslashSourceFile = fourslashSourceFile || createSourceFileAndAssertInvariants(tsFn, Harness.IO.readFile(tsFn), scriptTarget); return fourslashSourceFile; } else { @@ -1069,7 +1075,7 @@ module Harness { var register = (file: { unitName: string; content: string; }) => { if (file.content !== undefined) { var fileName = ts.normalizeSlashes(file.unitName); - filemap[getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, file.content, options.target); + filemap[getCanonicalFileName(fileName)] = createSourceFileAndAssertInvariants(fileName, file.content, options.target); } }; inputFiles.forEach(register); diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 547f8ccce48..bf9c75a7167 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -102,7 +102,7 @@ module Harness.LanguageService { compilationSettings: ts.CompilerOptions, scriptSnapshot: ts.IScriptSnapshot, version: string): ts.SourceFile { - var sourceFile = ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target); + var sourceFile = Compiler.createSourceFileAndAssertInvariants(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), compilationSettings.target); sourceFile.version = version; return sourceFile; } @@ -115,7 +115,9 @@ module Harness.LanguageService { version: string, textChangeRange: ts.TextChangeRange ): ts.SourceFile { - return ts.updateLanguageServiceSourceFile(document, scriptSnapshot, version, textChangeRange); + var result = ts.updateLanguageServiceSourceFile(document, scriptSnapshot, version, textChangeRange); + Utils.assertInvariants(result, /*parent:*/ undefined); + return result; } public releaseDocument(fileName: string, compilationSettings: ts.CompilerOptions): void { @@ -269,7 +271,7 @@ module Harness.LanguageService { /** Parse file given its source text */ public parseSourceText(fileName: string, sourceText: ts.IScriptSnapshot): ts.SourceFile { - var result = ts.createSourceFile(fileName, sourceText.getText(0, sourceText.getLength()), ts.ScriptTarget.Latest); + var result = Compiler.createSourceFileAndAssertInvariants(fileName, sourceText.getText(0, sourceText.getLength()), ts.ScriptTarget.Latest); result.version = "1"; return result; } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 0fde9a9d77c..3291128a7a5 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -172,7 +172,7 @@ class ProjectRunner extends RunnerBase { else { var text = getSourceFileText(fileName); if (text !== undefined) { - sourceFile = ts.createSourceFile(fileName, text, languageVersion); + sourceFile = Harness.Compiler.createSourceFileAndAssertInvariants(fileName, text, languageVersion); } } From 340828e445268ba3cf0a6faddad935986fee09a8 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 6 Feb 2015 16:37:41 -0800 Subject: [PATCH 33/33] Update LKG --- bin/lib.d.ts | 2 +- bin/lib.dom.d.ts | 2 +- bin/lib.es6.d.ts | 2 +- bin/lib.webworker.d.ts | 2 +- bin/tsc.js | 1784 ++-- bin/typescript.d.ts | 214 +- bin/typescriptServices.d.ts | 214 +- bin/typescriptServices.js | 12466 +++++++++++++------------ bin/typescriptServices_internal.d.ts | 18 +- bin/typescript_internal.d.ts | 18 +- 10 files changed, 7578 insertions(+), 7144 deletions(-) diff --git a/bin/lib.d.ts b/bin/lib.d.ts index f2635cc65fa..02c45824aa8 100644 --- a/bin/lib.d.ts +++ b/bin/lib.d.ts @@ -1908,7 +1908,7 @@ declare module Intl { second?: string; timeZoneName?: string; formatMatcher?: string; - hour12: boolean; + hour12?: boolean; } interface ResolvedDateTimeFormatOptions { diff --git a/bin/lib.dom.d.ts b/bin/lib.dom.d.ts index 1fedb4e266f..16f12be029a 100644 --- a/bin/lib.dom.d.ts +++ b/bin/lib.dom.d.ts @@ -758,7 +758,7 @@ declare module Intl { second?: string; timeZoneName?: string; formatMatcher?: string; - hour12: boolean; + hour12?: boolean; } interface ResolvedDateTimeFormatOptions { diff --git a/bin/lib.es6.d.ts b/bin/lib.es6.d.ts index c8c00f5712c..a66c28662fd 100644 --- a/bin/lib.es6.d.ts +++ b/bin/lib.es6.d.ts @@ -4884,7 +4884,7 @@ declare module Intl { second?: string; timeZoneName?: string; formatMatcher?: string; - hour12: boolean; + hour12?: boolean; } interface ResolvedDateTimeFormatOptions { diff --git a/bin/lib.webworker.d.ts b/bin/lib.webworker.d.ts index eefa7a42014..fb993074398 100644 --- a/bin/lib.webworker.d.ts +++ b/bin/lib.webworker.d.ts @@ -758,7 +758,7 @@ declare module Intl { second?: string; timeZoneName?: string; formatMatcher?: string; - hour12: boolean; + hour12?: boolean; } interface ResolvedDateTimeFormatOptions { diff --git a/bin/tsc.js b/bin/tsc.js index ab5386e2b40..35f23f04758 100644 --- a/bin/tsc.js +++ b/bin/tsc.js @@ -15,15 +15,12 @@ and limitations under the License. var ts; (function (ts) { - (function (EmitReturnStatus) { - EmitReturnStatus[EmitReturnStatus["Succeeded"] = 0] = "Succeeded"; - EmitReturnStatus[EmitReturnStatus["AllOutputGenerationSkipped"] = 1] = "AllOutputGenerationSkipped"; - EmitReturnStatus[EmitReturnStatus["JSGeneratedWithSemanticErrors"] = 2] = "JSGeneratedWithSemanticErrors"; - EmitReturnStatus[EmitReturnStatus["DeclarationGenerationSkipped"] = 3] = "DeclarationGenerationSkipped"; - EmitReturnStatus[EmitReturnStatus["EmitErrorsEncountered"] = 4] = "EmitErrorsEncountered"; - EmitReturnStatus[EmitReturnStatus["CompilerOptionsErrors"] = 5] = "CompilerOptionsErrors"; - })(ts.EmitReturnStatus || (ts.EmitReturnStatus = {})); - var EmitReturnStatus = ts.EmitReturnStatus; + (function (ExitStatus) { + ExitStatus[ExitStatus["Success"] = 0] = "Success"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; + })(ts.ExitStatus || (ts.ExitStatus = {})); + var ExitStatus = ts.ExitStatus; (function (DiagnosticCategory) { DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; @@ -130,6 +127,12 @@ var ts; return result; } ts.sum = sum; + function addRange(to, from) { + for (var i = 0, n = from.length; i < n; i++) { + to.push(from[i]); + } + } + ts.addRange = addRange; function lastOrUndefined(array) { if (array.length === 0) { return undefined; @@ -261,8 +264,7 @@ var ts; length: length, messageText: text, category: message.category, - code: message.code, - isEarly: message.isEarly + code: message.code }; } ts.createFileDiagnostic = createFileDiagnostic; @@ -277,8 +279,7 @@ var ts; length: undefined, messageText: text, category: message.category, - code: message.code, - isEarly: message.isEarly + code: message.code }; } ts.createCompilerDiagnostic = createCompilerDiagnostic; @@ -301,34 +302,6 @@ var ts; return headChain; } ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains; - function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) { - Debug.assert(start >= 0, "start must be non-negative, is " + start); - Debug.assert(length >= 0, "length must be non-negative, is " + length); - var code = diagnosticChain.code; - var category = diagnosticChain.category; - var messageText = ""; - var indent = 0; - while (diagnosticChain) { - if (indent) { - messageText += newLine; - for (var i = 0; i < indent; i++) { - messageText += " "; - } - } - messageText += diagnosticChain.messageText; - indent++; - diagnosticChain = diagnosticChain.next; - } - return { - file: file, - start: start, - length: length, - code: code, - category: category, - messageText: messageText - }; - } - ts.flattenDiagnosticChain = flattenDiagnosticChain; function compareValues(a, b) { if (a === b) return 0 /* EqualTo */; @@ -339,13 +312,33 @@ var ts; return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; } ts.compareValues = compareValues; - function getDiagnosticFilename(diagnostic) { - return diagnostic.file ? diagnostic.file.filename : undefined; + function getDiagnosticFileName(diagnostic) { + return diagnostic.file ? diagnostic.file.fileName : undefined; } function compareDiagnostics(d1, d2) { - return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0; + return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareMessageText(d1.messageText, d2.messageText) || 0 /* EqualTo */; } ts.compareDiagnostics = compareDiagnostics; + function compareMessageText(text1, text2) { + while (text1 && text2) { + var string1 = typeof text1 === "string" ? text1 : text1.messageText; + var string2 = typeof text2 === "string" ? text2 : text2.messageText; + var res = compareValues(string1, string2); + if (res) { + return res; + } + text1 = typeof text1 === "string" ? undefined : text1.next; + text2 = typeof text2 === "string" ? undefined : text2.next; + } + if (!text1 && !text2) { + return 0 /* EqualTo */; + } + return text1 ? 1 /* GreaterThan */ : -1 /* LessThan */; + } + function sortAndDeduplicateDiagnostics(diagnostics) { + return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); + } + ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; function deduplicateSortedDiagnostics(diagnostics) { if (diagnostics.length < 2) { return diagnostics; @@ -437,8 +430,8 @@ var ts; return normalizedPathComponents(path, rootLength); } ts.getNormalizedPathComponents = getNormalizedPathComponents; - function getNormalizedAbsolutePath(filename, currentDirectory) { - return getNormalizedPathFromPathComponents(getNormalizedPathComponents(filename, currentDirectory)); + function getNormalizedAbsolutePath(fileName, currentDirectory) { + return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); } ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; function getNormalizedPathFromPathComponents(pathComponents) { @@ -506,11 +499,11 @@ var ts; return absolutePath; } ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; - function getBaseFilename(path) { + function getBaseFileName(path) { var i = path.lastIndexOf(ts.directorySeparator); return i < 0 ? path : path.substring(i + 1); } - ts.getBaseFilename = getBaseFilename; + ts.getBaseFileName = getBaseFileName; function combinePaths(path1, path2) { if (!(path1 && path1.length)) return path2; @@ -570,6 +563,10 @@ var ts; } } ts.escapeString = escapeString; + function getDefaultLibFileName(options) { + return options.target === 2 /* ES6 */ ? "lib.es6.d.ts" : "lib.d.ts"; + } + ts.getDefaultLibFileName = getDefaultLibFileName; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -875,87 +872,87 @@ var ts; ts.Diagnostics = { 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.", isEarly: true }, + _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.", isEarly: true }, + 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." }, - Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation.", isEarly: true }, - A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list.", isEarly: true }, - Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer.", isEarly: true }, - A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter.", isEarly: true }, - An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier.", isEarly: true }, - An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer.", isEarly: true }, - An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation.", isEarly: true }, - An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation.", isEarly: true }, - An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'.", isEarly: true }, + Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, + A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer." }, + An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, + An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, + An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." }, An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." }, A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." }, A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." }, - Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen.", isEarly: true }, - _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier.", isEarly: true }, - _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen.", isEarly: true }, - _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element.", isEarly: true }, + Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, + _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, + _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, + _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." }, super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." }, - Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names.", isEarly: true }, - Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts.", isEarly: true }, - A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context.", isEarly: true }, - Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts.", isEarly: true }, - _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element.", isEarly: true }, - A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration.", isEarly: true }, + Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, + Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element." }, + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration." }, A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, - A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional.", isEarly: true }, - A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter.", isEarly: true }, - A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter.", isEarly: true }, - A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter.", isEarly: true }, - A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters.", isEarly: true }, - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher.", isEarly: true }, - Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer.", isEarly: true }, - An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module.", isEarly: true }, - Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers.", isEarly: true }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter." }, + A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, + A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, + A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, + Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer." }, + An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, + Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration.", isEarly: true }, + A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher.", isEarly: true }, - An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context.", isEarly: true }, - _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration.", isEarly: true }, - _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter.", isEarly: true }, - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement.", isEarly: true }, - Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration.", isEarly: true }, - Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration.", isEarly: true }, - An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters.", isEarly: true }, - A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation.", isEarly: true }, - An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter.", isEarly: true }, - _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty.", isEarly: true }, - Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty.", isEarly: true }, - Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty.", isEarly: true }, - Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode.", isEarly: true }, - with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode.", isEarly: true }, - delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode.", isEarly: true }, - A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement.", isEarly: true }, - A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement.", isEarly: true }, - Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary.", isEarly: true }, - A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body.", isEarly: true }, - Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected.", isEarly: true }, - Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected.", isEarly: true }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional.", isEarly: true }, - A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement.", isEarly: true }, - Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'", isEarly: true }, - A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement.", isEarly: true }, - A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement.", isEarly: true }, - An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode.", isEarly: true }, - An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name.", isEarly: true }, - An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name.", isEarly: true }, - An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers.", isEarly: true }, - Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode.", isEarly: true }, - A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1 /* Error */, key: "A tuple type element list cannot be empty.", isEarly: true }, - Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty.", isEarly: true }, + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty." }, + Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, + with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, + delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, + Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, + A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, + Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected." }, + Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected." }, + A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, + Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, + An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, + Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode." }, + A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1 /* Error */, key: "A tuple type element list cannot be empty." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." }, Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." }, Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." }, @@ -967,53 +964,53 @@ var ts; Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." }, Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." }, Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." }, - Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected.", isEarly: true }, + Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected." }, Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." }, Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." }, Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." }, Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." }, Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." }, - String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected.", isEarly: true }, - Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here.", isEarly: true }, + String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here." }, or_expected: { code: 1144, category: 1 /* Error */, key: "'{' or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members.", isEarly: true }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module.", isEarly: true }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, 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.", isEarly: true }, + File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "File name '{0}' differs from already included file name '{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." }, var_let_or_const_expected: { code: 1152, category: 1 /* Error */, key: "'var', 'let' or 'const' expected." }, - let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1 /* Error */, key: "'let' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1 /* Error */, key: "'const' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_must_be_initialized: { code: 1155, category: 1 /* Error */, key: "'const' declarations must be initialized", isEarly: true }, - const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1 /* Error */, key: "'const' declarations can only be declared inside a block.", isEarly: true }, - let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1 /* Error */, key: "'let' declarations can only be declared inside a block.", isEarly: true }, - 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.", isEarly: true }, + let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1 /* Error */, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1 /* Error */, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_must_be_initialized: { code: 1155, category: 1 /* Error */, key: "'const' declarations must be initialized" }, + const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1 /* Error */, key: "'const' declarations can only be declared inside a block." }, + let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1 /* Error */, key: "'let' declarations can only be declared inside a block." }, + 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." }, - An_object_member_cannot_be_declared_optional: { code: 1162, category: 1 /* Error */, key: "An object member cannot be declared optional.", isEarly: true }, - yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: 1 /* Error */, key: "'yield' expression must be contained_within a generator declaration.", isEarly: true }, - Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: 1 /* Error */, key: "Computed property names are not allowed in enums.", isEarly: true }, - Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: 1 /* Error */, key: "Computed property names are not allowed in an ambient context.", isEarly: true }, - Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: 1 /* Error */, key: "Computed property names are not allowed in class property declarations.", isEarly: true }, - Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: 1 /* Error */, key: "Computed property names are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: 1 /* Error */, key: "Computed property names are not allowed in method overloads.", isEarly: true }, - Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: 1 /* Error */, key: "Computed property names are not allowed in interfaces.", isEarly: true }, - Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: 1 /* Error */, key: "Computed property names are not allowed in type literals.", isEarly: true }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: 1 /* Error */, key: "An object member cannot be declared optional." }, + yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: 1 /* Error */, key: "'yield' expression must be contained_within a generator declaration." }, + Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: 1 /* Error */, key: "Computed property names are not allowed in enums." }, + Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: 1 /* Error */, key: "Computed property names are not allowed in an ambient context." }, + Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: 1 /* Error */, key: "Computed property names are not allowed in class property declarations." }, + Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: 1 /* Error */, key: "Computed property names are only available when targeting ECMAScript 6 and higher." }, + Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: 1 /* Error */, key: "Computed property names are not allowed in method overloads." }, + Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: 1 /* Error */, key: "Computed property names are not allowed in interfaces." }, + Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: 1 /* Error */, key: "Computed property names are not allowed in type literals." }, A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: 1 /* Error */, key: "A comma expression is not allowed in a computed property name." }, - extends_clause_already_seen: { code: 1172, category: 1 /* Error */, key: "'extends' clause already seen.", isEarly: true }, - extends_clause_must_precede_implements_clause: { code: 1173, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause.", isEarly: true }, - Classes_can_only_extend_a_single_class: { code: 1174, category: 1 /* Error */, key: "Classes can only extend a single class.", isEarly: true }, - implements_clause_already_seen: { code: 1175, category: 1 /* Error */, key: "'implements' clause already seen.", isEarly: true }, - Interface_declaration_cannot_have_implements_clause: { code: 1176, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause.", isEarly: true }, + extends_clause_already_seen: { code: 1172, category: 1 /* Error */, key: "'extends' clause already seen." }, + extends_clause_must_precede_implements_clause: { code: 1173, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause." }, + Classes_can_only_extend_a_single_class: { code: 1174, category: 1 /* Error */, key: "Classes can only extend a single class." }, + implements_clause_already_seen: { code: 1175, category: 1 /* Error */, key: "'implements' clause already seen." }, + Interface_declaration_cannot_have_implements_clause: { code: 1176, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause." }, Binary_digit_expected: { code: 1177, category: 1 /* Error */, key: "Binary digit expected." }, Octal_digit_expected: { code: 1178, category: 1 /* Error */, key: "Octal digit expected." }, Unexpected_token_expected: { code: 1179, category: 1 /* Error */, key: "Unexpected token. '{' expected." }, Property_destructuring_pattern_expected: { code: 1180, category: 1 /* Error */, key: "Property destructuring pattern expected." }, Array_element_destructuring_pattern_expected: { code: 1181, category: 1 /* Error */, key: "Array element destructuring pattern expected." }, - A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: 1 /* Error */, key: "A destructuring declaration must have an initializer.", isEarly: true }, - Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: 1 /* Error */, key: "Destructuring declarations are not allowed in ambient contexts.", isEarly: true }, - An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: 1 /* Error */, key: "An implementation cannot be declared in ambient contexts.", isEarly: true }, + A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: 1 /* Error */, key: "A destructuring declaration must have an initializer." }, + Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: 1 /* Error */, key: "Destructuring declarations are not allowed in ambient contexts." }, + An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: 1 /* Error */, key: "An implementation cannot be declared in ambient contexts." }, Modifiers_cannot_appear_here: { code: 1184, category: 1 /* Error */, key: "Modifiers cannot appear here." }, Merge_conflict_marker_encountered: { code: 1185, category: 1 /* Error */, key: "Merge conflict marker encountered." }, A_rest_element_cannot_have_an_initializer: { code: 1186, category: 1 /* Error */, key: "A rest element cannot have an initializer." }, @@ -1155,10 +1152,10 @@ var ts; 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." }, - Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1 /* Error */, key: "Block-scoped variable '{0}' used before its declaration.", isEarly: true }, - The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1 /* Error */, key: "The operand of an increment or decrement operator cannot be a constant.", isEarly: true }, - Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1 /* Error */, key: "Left-hand side of assignment expression cannot be a constant.", isEarly: true }, - Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1 /* Error */, key: "Cannot redeclare block-scoped variable '{0}'.", isEarly: true }, + Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1 /* Error */, key: "Block-scoped variable '{0}' used before its declaration." }, + The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1 /* Error */, key: "The operand of an increment or decrement operator cannot be a constant." }, + Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1 /* Error */, key: "Left-hand side of assignment expression cannot be a constant." }, + Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1 /* Error */, key: "Cannot redeclare block-scoped variable '{0}'." }, An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: 1 /* Error */, key: "An enum member cannot have a numeric name." }, The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: 1 /* Error */, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1 /* Error */, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, @@ -1244,12 +1241,12 @@ var ts; Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: 1 /* 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: 1 /* Error */, key: "Enum declarations must all be const or non-const." }, - In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: 1 /* Error */, key: "In 'const' enum declarations member initializer must be constant expression.", isEarly: true }, + In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: 1 /* Error */, key: "In 'const' enum declarations member initializer must be constant expression." }, const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 4084, category: 1 /* Error */, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, - A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: 1 /* Error */, key: "A const enum member can only be accessed using a string literal.", isEarly: true }, + A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: 1 /* Error */, key: "A const enum member can only be accessed using a string literal." }, const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 4086, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to a non-finite value." }, const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 4087, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, - Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: 1 /* Error */, key: "Property '{0}' does not exist on 'const' enum '{1}'.", isEarly: true }, + Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: 1 /* Error */, key: "Property '{0}' does not exist on 'const' enum '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, @@ -1304,6 +1301,7 @@ var ts; File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." }, File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: 2 /* Message */, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." }, + Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: 2 /* Message */, key: "Do not emit declarations for code that has an '@internal' annotation." }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, @@ -1321,8 +1319,10 @@ var ts; _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: 1 /* Error */, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: 1 /* Error */, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, You_cannot_rename_this_element: { code: 8000, category: 1 /* Error */, key: "You cannot rename this element." }, - yield_expressions_are_not_currently_supported: { code: 9000, category: 1 /* Error */, key: "'yield' expressions are not currently supported.", isEarly: true }, - Generators_are_not_currently_supported: { code: 9001, category: 1 /* Error */, key: "Generators are not currently supported.", isEarly: true } + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: 1 /* Error */, key: "You cannot rename elements that are defined in the standard TypeScript library." }, + yield_expressions_are_not_currently_supported: { code: 9000, category: 1 /* Error */, key: "'yield' expressions are not currently supported." }, + Generators_are_not_currently_supported: { code: 9001, category: 1 /* Error */, key: "Generators are not currently supported." }, + The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression: { code: 9002, category: 1 /* Error */, key: "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression." } }; })(ts || (ts = {})); var ts; @@ -1508,12 +1508,20 @@ var ts; return result; } ts.computeLineStarts = computeLineStarts; - function getPositionFromLineAndCharacter(lineStarts, line, character) { + function getPositionFromLineAndCharacter(sourceFile, line, character) { + return computePositionFromLineAndCharacter(getLineStarts(sourceFile), line, character); + } + ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; + function computePositionFromLineAndCharacter(lineStarts, line, character) { ts.Debug.assert(line > 0 && line <= lineStarts.length); return lineStarts[line - 1] + character - 1; } - ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; - function getLineAndCharacterOfPosition(lineStarts, position) { + ts.computePositionFromLineAndCharacter = computePositionFromLineAndCharacter; + function getLineStarts(sourceFile) { + return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); + } + ts.getLineStarts = getLineStarts; + function computeLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position); if (lineNumber < 0) { lineNumber = (~lineNumber) - 1; @@ -1523,12 +1531,11 @@ var ts; character: position - lineStarts[lineNumber] + 1 }; } - ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; - function positionToLineAndCharacter(text, pos) { - var lineStarts = computeLineStarts(text); - return getLineAndCharacterOfPosition(lineStarts, pos); + ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition; + function getLineAndCharacterOfPosition(sourceFile, position) { + return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); } - ts.positionToLineAndCharacter = positionToLineAndCharacter; + ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; @@ -2515,8 +2522,8 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function nodePosToString(node) { var file = getSourceFileOfNode(node); - var loc = file.getLineAndCharacterFromPosition(node.pos); - return file.filename + "(" + loc.line + "," + loc.character + ")"; + var loc = ts.getLineAndCharacterOfPosition(file, node.pos); + return file.fileName + "(" + loc.line + "," + loc.character + ")"; } ts.nodePosToString = nodePosToString; function getStartPosOfNode(node) { @@ -2580,12 +2587,19 @@ var ts; return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); } ts.createDiagnosticForNode = createDiagnosticForNode; - function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) { + function createDiagnosticForNodeFromMessageChain(node, messageChain) { node = getErrorSpanForNode(node); var file = getSourceFileOfNode(node); var start = ts.skipTrivia(file.text, node.pos); var length = node.end - start; - return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine); + return { + file: file, + start: start, + length: length, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain.next ? messageChain : messageChain.messageText + }; } ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; function getErrorSpanForNode(node) { @@ -3055,7 +3069,7 @@ var ts; ts.getHeritageClause = getHeritageClause; function tryResolveScriptReference(host, sourceFile, reference) { if (!host.getCompilerOptions().noResolve) { - var referenceFileName = ts.isRootedDiskPath(reference.filename) ? reference.filename : ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename); + var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName); referenceFileName = ts.getNormalizedAbsolutePath(referenceFileName, host.getCurrentDirectory()); return host.getSourceFile(referenceFileName); } @@ -3110,7 +3124,7 @@ var ts; fileReference: { pos: start, end: end, - filename: matchResult[3] + fileName: matchResult[3] }, isNoDefaultLib: false }; @@ -3148,21 +3162,6 @@ var ts; return false; } ts.isModifier = isModifier; - function createEmitHostFromProgram(program) { - var compilerHost = program.getCompilerHost(); - return { - getCanonicalFileName: compilerHost.getCanonicalFileName, - getCommonSourceDirectory: program.getCommonSourceDirectory, - getCompilerOptions: program.getCompilerOptions, - getCurrentDirectory: compilerHost.getCurrentDirectory, - getNewLine: compilerHost.getNewLine, - getSourceFile: program.getSourceFile, - getSourceFiles: program.getSourceFiles, - isEmitBlocked: program.isEmitBlocked, - writeFile: compilerHost.writeFile - }; - } - ts.createEmitHostFromProgram = createEmitHostFromProgram; function textSpanEnd(span) { return span.start + span.length; } @@ -3272,10 +3271,76 @@ var ts; return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN); } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; + function createDiagnosticCollection() { + var nonFileDiagnostics = []; + var fileDiagnostics = {}; + var diagnosticsModified = false; + var modificationCount = 0; + return { + add: add, + getGlobalDiagnostics: getGlobalDiagnostics, + getDiagnostics: getDiagnostics, + getModificationCount: getModificationCount + }; + function getModificationCount() { + return modificationCount; + } + function add(diagnostic) { + var diagnostics; + if (diagnostic.file) { + diagnostics = fileDiagnostics[diagnostic.file.fileName]; + if (!diagnostics) { + diagnostics = []; + fileDiagnostics[diagnostic.file.fileName] = diagnostics; + } + } + else { + diagnostics = nonFileDiagnostics; + } + diagnostics.push(diagnostic); + diagnosticsModified = true; + modificationCount++; + } + function getGlobalDiagnostics() { + sortAndDeduplicate(); + return nonFileDiagnostics; + } + function getDiagnostics(fileName) { + sortAndDeduplicate(); + if (fileName) { + return fileDiagnostics[fileName] || []; + } + var allDiagnostics = []; + function pushDiagnostic(d) { + allDiagnostics.push(d); + } + ts.forEach(nonFileDiagnostics, pushDiagnostic); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + ts.forEach(fileDiagnostics[key], pushDiagnostic); + } + } + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function sortAndDeduplicate() { + if (!diagnosticsModified) { + return; + } + diagnosticsModified = false; + nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]); + } + } + } + } + ts.createDiagnosticCollection = createDiagnosticCollection; })(ts || (ts = {})); var ts; (function (ts) { var nodeConstructors = new Array(209 /* Count */); + ts.parseTime = 0; function getNodeConstructor(kind) { return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)); } @@ -3512,6 +3577,155 @@ var ts; } forEachChild(sourceFile, walk); } + function moveElementEntirelyPastChangeRange(element, delta) { + if (element.length) { + visitArray(element); + } + else { + visitNode(element); + } + function visitNode(node) { + node._children = undefined; + node.pos += delta; + node.end += delta; + forEachChild(node, visitNode, visitArray); + } + function visitArray(array) { + array.pos += delta; + array.end += delta; + for (var i = 0, n = array.length; i < n; i++) { + visitNode(array[i]); + } + } + } + function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); + ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); + element.pos = Math.min(element.pos, changeRangeNewEnd); + if (element.end >= changeRangeOldEnd) { + element.end += delta; + } + else { + element.end = Math.min(element.end, changeRangeNewEnd); + } + ts.Debug.assert(element.pos <= element.end); + if (element.parent) { + ts.Debug.assert(element.pos >= element.parent.pos); + ts.Debug.assert(element.end <= element.parent.end); + } + } + function updateTokenPositionsAndMarkElements(node, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + visitNode(node); + function visitNode(child) { + if (child.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(child, delta); + return; + } + var fullEnd = child.end; + if (fullEnd >= changeStart) { + child.intersectsChange = true; + adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + forEachChild(child, visitNode, visitArray); + return; + } + } + function visitArray(array) { + if (array.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(array, delta); + } + else { + var fullEnd = array.end; + if (fullEnd >= changeStart) { + array.intersectsChange = true; + adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + for (var i = 0, n = array.length; i < n; i++) { + visitNode(array[i]); + } + } + } + } + } + function extendToAffectedRange(sourceFile, changeRange) { + var maxLookahead = 1; + var start = changeRange.span.start; + for (var i = 0; start > 0 && i <= maxLookahead; i++) { + var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); + var position = nearestNode.pos; + start = Math.max(0, position - 1); + } + var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); + var finalLength = changeRange.newLength + (changeRange.span.start - start); + return ts.createTextChangeRange(finalSpan, finalLength); + } + function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) { + var bestResult = sourceFile; + var lastNodeEntirelyBeforePosition; + forEachChild(sourceFile, visit); + if (lastNodeEntirelyBeforePosition) { + var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition); + if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { + bestResult = lastChildOfLastEntireNodeBeforePosition; + } + } + return bestResult; + function getLastChild(node) { + while (true) { + var lastChild = getLastChildWorker(node); + if (lastChild) { + node = lastChild; + } + else { + return node; + } + } + } + function getLastChildWorker(node) { + var last = undefined; + forEachChild(node, function (child) { + if (ts.nodeIsPresent(child)) { + last = child; + } + }); + return last; + } + function visit(child) { + if (ts.nodeIsMissing(child)) { + return; + } + if (child.pos <= position) { + if (child.pos >= bestResult.pos) { + bestResult = child; + } + if (position < child.end) { + forEachChild(child, visit); + return true; + } + else { + ts.Debug.assert(child.end <= position); + lastNodeEntirelyBeforePosition = child; + } + } + else { + ts.Debug.assert(child.pos > position); + return true; + } + } + } + function updateSourceFile(sourceFile, newText, textChangeRange) { + if (ts.textChangeRangeIsUnchanged(textChangeRange)) { + return sourceFile; + } + if (sourceFile.statements.length === 0) { + return parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true); + } + var syntaxCursor = createSyntaxCursor(sourceFile); + var changeRange = extendToAffectedRange(sourceFile, textChangeRange); + var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; + updateTokenPositionsAndMarkElements(sourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta); + var result = parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true); + return result; + } + ts.updateSourceFile = updateSourceFile; function isEvalOrArgumentsIdentifier(node) { return node.kind === 64 /* Identifier */ && (node.text === "eval" || node.text === "arguments"); } @@ -3579,207 +3793,47 @@ var ts; } } } - function createSourceFile(filename, sourceText, languageVersion, setParentNodes) { + function createSourceFile(fileName, sourceText, languageVersion, setParentNodes) { if (setParentNodes === void 0) { setParentNodes = false; } - var parsingContext; - var identifiers; + var start = new Date().getTime(); + var result = parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes); + ts.parseTime += new Date().getTime() - start; + return result; + } + ts.createSourceFile = createSourceFile; + function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes) { + if (setParentNodes === void 0) { setParentNodes = false; } + var parsingContext = 0; + var identifiers = {}; var identifierCount = 0; var nodeCount = 0; - var lineStarts; - var syntacticDiagnostics; var scanner; var token; - var syntaxCursor; - var contextFlags; - var parseErrorBeforeNextFinishedNode; - var sourceFile; - return parseSourceFile(sourceText, setParentNodes); - function parseSourceFile(text, setParentNodes) { - sourceText = text; - parsingContext = 0; - identifiers = {}; - lineStarts = undefined; - syntacticDiagnostics = undefined; - contextFlags = 0; - parseErrorBeforeNextFinishedNode = false; - sourceFile = createNode(207 /* SourceFile */, 0); - sourceFile.referenceDiagnostics = []; - sourceFile.parseDiagnostics = []; - sourceFile.semanticDiagnostics = []; - scanner = ts.createScanner(languageVersion, true, sourceText, scanError); - token = nextToken(); - sourceFile.flags = ts.fileExtensionIs(filename, ".d.ts") ? 1024 /* DeclarationFile */ : 0; - sourceFile.end = sourceText.length; - sourceFile.filename = ts.normalizePath(filename); - sourceFile.text = sourceText; - sourceFile.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; - sourceFile.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; - sourceFile.getLineStarts = getLineStarts; - sourceFile.getSyntacticDiagnostics = getSyntacticDiagnostics; - sourceFile.update = update; - processReferenceComments(sourceFile); - sourceFile.statements = parseList(0 /* SourceElements */, true, parseSourceElement); - ts.Debug.assert(token === 1 /* EndOfFileToken */); - sourceFile.endOfFileToken = parseTokenNode(); - setExternalModuleIndicator(sourceFile); - sourceFile.nodeCount = nodeCount; - sourceFile.identifierCount = identifierCount; - sourceFile.languageVersion = languageVersion; - sourceFile.identifiers = identifiers; - if (setParentNodes) { - fixupParentReferences(sourceFile); - } - return sourceFile; - } - function update(newText, textChangeRange) { - if (ts.textChangeRangeIsUnchanged(textChangeRange)) { - return sourceFile; - } - if (sourceFile.statements.length === 0) { - return parseSourceFile(newText, true); - } - syntaxCursor = createSyntaxCursor(sourceFile); - var changeRange = extendToAffectedRange(textChangeRange); - var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; - updateTokenPositionsAndMarkElements(sourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta); - var result = parseSourceFile(newText, true); - syntaxCursor = undefined; - return result; - } - function updateTokenPositionsAndMarkElements(node, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { - visitNode(node); - function visitNode(child) { - if (child.pos > changeRangeOldEnd) { - moveElementEntirelyPastChangeRange(child, delta); - return; - } - var fullEnd = child.end; - if (fullEnd >= changeStart) { - child.intersectsChange = true; - adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - forEachChild(child, visitNode, visitArray); - return; - } - } - function visitArray(array) { - if (array.pos > changeRangeOldEnd) { - moveElementEntirelyPastChangeRange(array, delta); - } - else { - var fullEnd = array.end; - if (fullEnd >= changeStart) { - array.intersectsChange = true; - adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - for (var i = 0, n = array.length; i < n; i++) { - visitNode(array[i]); - } - } - } - } - } - function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { - ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); - ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); - element.pos = Math.min(element.pos, changeRangeNewEnd); - if (element.end >= changeRangeOldEnd) { - element.end += delta; - } - else { - element.end = Math.min(element.end, changeRangeNewEnd); - } - ts.Debug.assert(element.pos <= element.end); - if (element.parent) { - ts.Debug.assert(element.pos >= element.parent.pos); - ts.Debug.assert(element.end <= element.parent.end); - } - } - function moveElementEntirelyPastChangeRange(element, delta) { - if (element.length) { - visitArray(element); - } - else { - visitNode(element); - } - function visitNode(node) { - node._children = undefined; - node.pos += delta; - node.end += delta; - forEachChild(node, visitNode, visitArray); - } - function visitArray(array) { - array.pos += delta; - array.end += delta; - for (var i = 0, n = array.length; i < n; i++) { - visitNode(array[i]); - } - } - } - function extendToAffectedRange(changeRange) { - var maxLookahead = 1; - var start = changeRange.span.start; - for (var i = 0; start > 0 && i <= maxLookahead; i++) { - var nearestNode = findNearestNodeStartingBeforeOrAtPosition(start); - var position = nearestNode.pos; - start = Math.max(0, position - 1); - } - var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); - var finalLength = changeRange.newLength + (changeRange.span.start - start); - return ts.createTextChangeRange(finalSpan, finalLength); - } - function findNearestNodeStartingBeforeOrAtPosition(position) { - var bestResult = sourceFile; - var lastNodeEntirelyBeforePosition; - forEachChild(sourceFile, visit); - if (lastNodeEntirelyBeforePosition) { - var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition); - if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { - bestResult = lastChildOfLastEntireNodeBeforePosition; - } - } - return bestResult; - function getLastChild(node) { - while (true) { - var lastChild = getLastChildWorker(node); - if (lastChild) { - node = lastChild; - } - else { - return node; - } - } - } - function getLastChildWorker(node) { - var last = undefined; - forEachChild(node, function (child) { - if (ts.nodeIsPresent(child)) { - last = child; - } - }); - return last; - } - function visit(child) { - if (ts.nodeIsMissing(child)) { - return; - } - if (child.pos <= position) { - if (child.pos >= bestResult.pos) { - bestResult = child; - } - if (position < child.end) { - forEachChild(child, visit); - return true; - } - else { - ts.Debug.assert(child.end <= position); - lastNodeEntirelyBeforePosition = child; - } - } - else { - ts.Debug.assert(child.pos > position); - return true; - } - } + var sourceFile = createNode(207 /* SourceFile */, 0); + sourceFile.pos = 0; + sourceFile.end = sourceText.length; + sourceFile.text = sourceText; + sourceFile.parseDiagnostics = []; + sourceFile.bindDiagnostics = []; + sourceFile.languageVersion = languageVersion; + sourceFile.fileName = ts.normalizePath(fileName); + sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 1024 /* DeclarationFile */ : 0; + var contextFlags = 0; + var parseErrorBeforeNextFinishedNode = false; + scanner = ts.createScanner(languageVersion, true, sourceText, scanError); + token = nextToken(); + processReferenceComments(sourceFile); + sourceFile.statements = parseList(0 /* SourceElements */, true, parseSourceElement); + ts.Debug.assert(token === 1 /* EndOfFileToken */); + sourceFile.endOfFileToken = parseTokenNode(); + setExternalModuleIndicator(sourceFile); + sourceFile.nodeCount = nodeCount; + sourceFile.identifierCount = identifierCount; + sourceFile.identifiers = identifiers; + if (setParentNodes) { + fixupParentReferences(sourceFile); } + return sourceFile; function setContextFlag(val, flag) { if (val) { contextFlags |= flag; @@ -3848,15 +3902,6 @@ var ts; function inDisallowInContext() { return (contextFlags & 2 /* DisallowIn */) !== 0; } - function getLineStarts() { - return lineStarts || (lineStarts = ts.computeLineStarts(sourceText)); - } - function getLineAndCharacterFromSourcePosition(position) { - return ts.getLineAndCharacterOfPosition(getLineStarts(), position); - } - function getPositionFromSourceLineAndCharacter(line, character) { - return ts.getPositionFromLineAndCharacter(getLineStarts(), line, character); - } function parseErrorAtCurrentToken(message, arg0) { var start = scanner.getTokenPos(); var length = scanner.getTextPos() - start; @@ -6292,7 +6337,7 @@ var ts; return isDeclarationStart() ? parseDeclaration() : parseStatement(); } function processReferenceComments(sourceFile) { - var triviaScanner = ts.createScanner(languageVersion, false, sourceText); + var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, sourceText); var referencedFiles = []; var amdDependencies = []; var amdModuleName; @@ -6315,7 +6360,7 @@ var ts; referencedFiles.push(fileReference); } if (diagnosticMessage) { - sourceFile.referenceDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); + sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); } } else { @@ -6323,7 +6368,7 @@ var ts; var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment); if (amdModuleNameMatchResult) { if (amdModuleName) { - sourceFile.referenceDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); + sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); } amdModuleName = amdModuleNameMatchResult[2]; } @@ -6341,15 +6386,7 @@ var ts; function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 /* Export */ || node.kind === 197 /* ImportDeclaration */ && node.moduleReference.kind === 199 /* ExternalModuleReference */ || node.kind === 198 /* ExportAssignment */ ? node : undefined; }); } - function getSyntacticDiagnostics() { - if (syntacticDiagnostics === undefined) { - syntacticDiagnostics = sourceFile.referenceDiagnostics.concat(sourceFile.parseDiagnostics); - } - ts.Debug.assert(syntacticDiagnostics !== undefined); - return syntacticDiagnostics; - } } - ts.createSourceFile = createSourceFile; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { @@ -6386,6 +6423,7 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { + ts.bindTime = 0; function getModuleInstanceState(node) { if (node.kind === 192 /* InterfaceDeclaration */ || node.kind === 193 /* TypeAliasDeclaration */) { return 0 /* NonInstantiated */; @@ -6425,6 +6463,12 @@ var ts; } ts.hasDynamicName = hasDynamicName; function bindSourceFile(file) { + var start = new Date().getTime(); + bindSourceFileWorker(file); + ts.bindTime += new Date().getTime() - start; + } + ts.bindSourceFile = bindSourceFile; + function bindSourceFileWorker(file) { var parent; var container; var blockScopeContainer; @@ -6489,9 +6533,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.semanticDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -6506,7 +6550,7 @@ var ts; if (node.name) { node.name.parent = node; } - file.semanticDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); } symbol.exports[prototypeSymbol.name] = prototypeSymbol; prototypeSymbol.parent = symbol; @@ -6770,7 +6814,7 @@ var ts; break; case 207 /* SourceFile */: if (ts.isExternalModule(node)) { - bindAnonymousDeclaration(node, 512 /* ValueModule */, '"' + ts.removeFileExtension(node.filename) + '"', true); + bindAnonymousDeclaration(node, 512 /* ValueModule */, '"' + ts.removeFileExtension(node.fileName) + '"', true); break; } case 170 /* Block */: @@ -6808,13 +6852,13 @@ var ts; } } } - ts.bindSourceFile = bindSourceFile; })(ts || (ts = {})); var ts; (function (ts) { var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + ts.checkTime = 0; function createTypeChecker(host, produceDiagnostics) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); @@ -6853,12 +6897,12 @@ var ts; getContextualType: getContextualType, getFullyQualifiedName: getFullyQualifiedName, getResolvedSignature: getResolvedSignature, - getEnumMemberValue: getEnumMemberValue, + getConstantValue: getConstantValue, isValidPropertyAccess: isValidPropertyAccess, getSignatureFromDeclaration: getSignatureFromDeclaration, isImplementationOfOverload: isImplementationOfOverload, getAliasedSymbol: resolveImport, - getEmitResolver: function () { return emitResolver; } + getEmitResolver: getEmitResolver }; var undefinedSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "undefined"); var argumentsSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "arguments"); @@ -6898,8 +6942,7 @@ var ts; var symbolLinks = []; var nodeLinks = []; var potentialThisCollisions = []; - var diagnostics = []; - var diagnosticsModified = false; + var diagnostics = ts.createDiagnosticCollection(); var primitiveTypeInfo = { "string": { type: stringType, @@ -6914,13 +6957,13 @@ var ts; flags: 8 /* Boolean */ } }; - function addDiagnostic(diagnostic) { - diagnostics.push(diagnostic); - diagnosticsModified = true; + function getEmitResolver(sourceFile) { + getDiagnostics(sourceFile); + return emitResolver; } function error(location, message, arg0, arg1, arg2) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); - addDiagnostic(diagnostic); + diagnostics.add(diagnostic); } function createSymbol(flags, name) { return new Symbol(flags, name); @@ -7272,7 +7315,7 @@ var ts; return; } var moduleReferenceLiteral = moduleReferenceExpression; - var searchPath = ts.getDirectoryPath(getSourceFile(location).filename); + var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName); var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text); if (!moduleName) return; @@ -7284,8 +7327,8 @@ var ts; } } while (true) { - var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); - var sourceFile = host.getSourceFile(filename + ".ts") || host.getSourceFile(filename + ".d.ts"); + var fileName = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + var sourceFile = host.getSourceFile(fileName + ".ts") || host.getSourceFile(fileName + ".d.ts"); if (sourceFile || isRelative) break; var parentPath = ts.getDirectoryPath(searchPath); @@ -7297,7 +7340,7 @@ var ts; if (sourceFile.symbol) { return getResolvedExportSymbol(sourceFile.symbol); } - error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename); + error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.fileName); return; } error(moduleReferenceLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName); @@ -7669,7 +7712,7 @@ var ts; } writer.writeSymbol(symbol.name, symbol); } - function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags) { + function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { var parentSymbol; function appendParentTypeArgumentsAndSymbolName(symbol) { if (parentSymbol) { @@ -7709,7 +7752,9 @@ var ts; } } } - if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + var isTypeParameter = symbol.flags & 262144 /* TypeParameter */; + var typeFormatFlag = 128 /* UseFullyQualifiedType */ & typeFlags; + if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) { walkSymbol(symbol, meaning); return; } @@ -7726,7 +7771,7 @@ var ts; writeTypeReference(type, flags); } else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { - buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056 /* Type */); + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056 /* Type */, 0 /* None */, flags); } else if (type.flags & 8192 /* Tuple */) { writeTupleType(type); @@ -7789,15 +7834,15 @@ var ts; } function writeAnonymousType(type, flags) { if (type.symbol && type.symbol.flags & (32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { - writeTypeofSymbol(type); + writeTypeofSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type); + writeTypeofSymbol(type, flags); } else if (typeStack && ts.contains(typeStack, type)) { var typeAlias = getTypeAliasForTypeLiteral(type); if (typeAlias) { - buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056 /* Type */); + buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056 /* Type */, 0 /* None */, flags); } else { writeKeyword(writer, 110 /* AnyKeyword */); @@ -7821,10 +7866,10 @@ var ts; } } } - function writeTypeofSymbol(type) { + function writeTypeofSymbol(type, typeFormatFlags) { writeKeyword(writer, 96 /* TypeOfKeyword */); writeSpace(writer); - buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */); + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */, 0 /* None */, typeFormatFlags); } function getIndexerParameterName(type, indexKind, fallbackName) { var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind); @@ -9677,7 +9722,7 @@ var ts; if (containingMessageChain) { errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); } - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); } return result !== 0 /* False */; function reportError(message, arg0, arg1, arg2) { @@ -9760,7 +9805,13 @@ var ts; } if (reportErrors) { headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1; - reportError(headMessage, typeToString(source), typeToString(target)); + var sourceType = typeToString(source); + var targetType = typeToString(target); + if (sourceType === targetType) { + sourceType = typeToString(source, undefined, 128 /* UseFullyQualifiedType */); + targetType = typeToString(target, undefined, 128 /* UseFullyQualifiedType */); + } + reportError(headMessage, sourceType, targetType); } return 0 /* False */; } @@ -10453,6 +10504,9 @@ var ts; return true; } function inferFromTypes(source, target) { + if (source === anyFunctionType) { + return; + } if (target.flags & 512 /* TypeParameter */) { var typeParameters = context.typeParameters; for (var i = 0; i < typeParameters.length; i++) { @@ -10878,6 +10932,9 @@ var ts; } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); + if (symbol === argumentsSymbol && ts.getContainingFunction(node).kind === 157 /* ArrowFunction */) { + error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression); + } if (symbol.flags & 8388608 /* Import */) { var symbolLinks = getSymbolLinks(symbol); if (!symbolLinks.referenced) { @@ -10914,7 +10971,7 @@ var ts; var needToCaptureLexicalThis = false; if (container.kind === 157 /* ArrowFunction */) { container = ts.getThisContainer(container, false); - needToCaptureLexicalThis = true; + needToCaptureLexicalThis = (languageVersion < 2 /* ES6 */); } switch (container.kind) { case 195 /* ModuleDeclaration */: @@ -11477,9 +11534,9 @@ var ts; return false; } else { - var diagnosticsCount = diagnostics.length; + var modificationCount = diagnostics.getModificationCount(); checkClassPropertyAccess(node, left, type, prop); - return diagnostics.length === diagnosticsCount; + return diagnostics.getModificationCount() === modificationCount; } } } @@ -11621,19 +11678,18 @@ var ts; function inferTypeArguments(signature, args, excludeArgument) { var typeParameters = signature.typeParameters; var context = createInferenceContext(typeParameters, false); - var mapper = createInferenceMapper(context); + var inferenceMapper = createInferenceMapper(context); for (var i = 0; i < args.length; i++) { if (args[i].kind === 168 /* OmittedExpression */) { continue; } - if (!excludeArgument || excludeArgument[i] === undefined) { - var parameterType = getTypeAtPosition(signature, i); - if (i === 0 && args[i].parent.kind === 153 /* TaggedTemplateExpression */) { - inferTypes(context, globalTemplateStringsArrayType, parameterType); - continue; - } - inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); + var parameterType = getTypeAtPosition(signature, i); + if (i === 0 && args[i].parent.kind === 153 /* TaggedTemplateExpression */) { + inferTypes(context, globalTemplateStringsArrayType, parameterType); + continue; } + var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper; + inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); } if (excludeArgument) { for (var i = 0; i < args.length; i++) { @@ -11642,7 +11698,7 @@ var ts; } if (excludeArgument[i] === false) { var parameterType = getTypeAtPosition(signature, i); - inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); + inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, inferenceMapper), parameterType); } } } @@ -12024,6 +12080,9 @@ var ts; } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); + if (!func.body) { + return unknownType; + } if (func.body.kind !== 170 /* Block */) { var type = checkExpressionCached(func.body, contextualMapper); } @@ -12089,7 +12148,7 @@ var ts; if (!hasGrammarError && node.kind === 156 /* FunctionExpression */) { checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node); } - if (contextualMapper === identityMapper) { + if (contextualMapper === identityMapper && isContextSensitive(node)) { return anyFunctionType; } var links = getNodeLinks(node); @@ -12602,7 +12661,7 @@ var ts; case 154 /* TypeAssertionExpression */: return checkTypeAssertion(node); case 155 /* ParenthesizedExpression */: - return checkExpression(node.expression); + return checkExpression(node.expression, contextualMapper); case 156 /* FunctionExpression */: case 157 /* ArrowFunction */: return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); @@ -13777,7 +13836,7 @@ var ts; var typeName2 = typeToString(base); var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); } } } @@ -14297,6 +14356,11 @@ var ts; } } function checkSourceFile(node) { + var start = new Date().getTime(); + checkSourceFileWorker(node); + ts.checkTime += new Date().getTime() - start; + } + function checkSourceFileWorker(node) { var links = getNodeLinks(node); if (!(links.flags & 1 /* TypeChecked */)) { checkGrammarSourceFile(node); @@ -14321,27 +14385,18 @@ var ts; links.flags |= 1 /* TypeChecked */; } } - function getSortedDiagnostics() { - ts.Debug.assert(produceDiagnostics, "diagnostics are available only in the full typecheck mode"); - if (diagnosticsModified) { - diagnostics.sort(ts.compareDiagnostics); - diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); - diagnosticsModified = false; - } - return diagnostics; - } function getDiagnostics(sourceFile) { throwIfNonDiagnosticsProducing(); if (sourceFile) { checkSourceFile(sourceFile); - return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; }); + return diagnostics.getDiagnostics(sourceFile.fileName); } ts.forEach(host.getSourceFiles(), checkSourceFile); - return getSortedDiagnostics(); + return diagnostics.getDiagnostics(); } function getGlobalDiagnostics() { throwIfNonDiagnosticsProducing(); - return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); + return diagnostics.getGlobalDiagnostics(); } function throwIfNonDiagnosticsProducing() { if (!produceDiagnostics) { @@ -14751,9 +14806,6 @@ var ts; } return isImportResolvedToValue(getSymbolOfNode(node)); } - function hasSemanticErrors(sourceFile) { - return getDiagnostics(sourceFile).length > 0 || getGlobalDiagnostics().length > 0; - } function isImportResolvedToValue(symbol) { var target = resolveImport(symbol); return target !== unknownSymbol && target.flags & 107455 /* Value */ && !isConstEnumOrConstEnumOnlyModule(target); @@ -14787,6 +14839,9 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { + if (node.kind === 206 /* EnumMember */) { + return getEnumMemberValue(node); + } var symbol = getNodeLinks(node).resolvedSymbol; if (symbol && (symbol.flags & 8 /* EnumMember */)) { var declaration = symbol.valueDeclaration; @@ -14816,9 +14871,7 @@ var ts; getExportAssignmentName: getExportAssignmentName, isReferencedImportDeclaration: isReferencedImportDeclaration, getNodeCheckFlags: getNodeCheckFlags, - getEnumMemberValue: getEnumMemberValue, isTopLevelValueImportWithEntityName: isTopLevelValueImportWithEntityName, - hasSemanticErrors: hasSemanticErrors, isDeclarationVisible: isDeclarationVisible, isImplementationOfOverload: isImplementationOfOverload, writeTypeOfDeclaration: writeTypeOfDeclaration, @@ -14832,7 +14885,6 @@ var ts; function initializeTypeChecker() { ts.forEach(host.getSourceFiles(), function (file) { ts.bindSourceFile(file); - ts.forEach(file.semanticDiagnostics, addDiagnostic); }); ts.forEach(host.getSourceFiles(), function (file) { if (!ts.isExternalModule(file)) { @@ -15495,13 +15547,13 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var scanner = ts.createScanner(languageVersion, true, sourceFile.text); var start = scanToken(scanner, node.pos); - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); return true; } } function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) { if (!hasParseDiagnostics(sourceFile)) { - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); return true; } } @@ -15510,7 +15562,7 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var span = ts.getErrorSpanForNode(node); var start = span.end > span.pos ? ts.skipTrivia(sourceFile.text, span.pos) : span.pos; - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); return true; } } @@ -15603,7 +15655,7 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var scanner = ts.createScanner(languageVersion, true, sourceFile.text); scanToken(scanner, node.pos); - diagnostics.push(ts.createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); return true; } } @@ -15627,7 +15679,7 @@ var ts; } function shouldEmitToOwnFile(sourceFile, compilerOptions) { if (!ts.isDeclarationFile(sourceFile)) { - if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) { return true; } return false; @@ -15699,7 +15751,7 @@ var ts; }; } function getLineOfLocalPosition(currentSourceFile, pos) { - return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + return ts.getLineAndCharacterOfPosition(currentSourceFile, 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)) { @@ -15727,14 +15779,14 @@ var ts; } function writeCommentRange(currentSourceFile, writer, comment, newLine) { if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { - var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); - var lastLine = currentSourceFile.getLineStarts().length; + var firstCommentLineAndCharacter = ts.getLineAndCharacterOfPosition(currentSourceFile, comment.pos); + var lastLine = ts.getLineStarts(currentSourceFile).length; var firstCommentLineIndent; for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { - var nextLineStart = currentLine === lastLine ? (comment.end + 1) : currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + var nextLineStart = currentLine === lastLine ? (comment.end + 1) : ts.getPositionFromLineAndCharacter(currentSourceFile, currentLine + 1, 1); if (pos !== comment.pos) { if (firstCommentLineIndent === undefined) { - firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + firstCommentLineIndent = calculateIndent(ts.getPositionFromLineAndCharacter(currentSourceFile, firstCommentLineAndCharacter.line, 1), comment.pos); } var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); @@ -15829,7 +15881,7 @@ var ts; }; } function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { - var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.filename, host.getCurrentDirectory()); + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); return ts.combinePaths(newDirPath, sourceFilePath); } @@ -15839,13 +15891,13 @@ var ts; var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir)); } else { - var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename); + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName); } return emitOutputFilePathWithoutExtension + extension; } - function writeFile(host, diagnostics, filename, data, writeByteOrderMark) { - host.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { - diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + function writeFile(host, diagnostics, fileName, data, writeByteOrderMark) { + host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); }); } function emitDeclarations(host, resolver, diagnostics, jsFilePath, root) { @@ -15863,7 +15915,61 @@ var ts; var reportedDeclarationError = false; var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { } : writeJsDocComments; + var emit = compilerOptions.stripInternal ? stripInternal : emitNode; var aliasDeclarationEmitInfo = []; + var referencePathsOutput = ""; + if (root) { + if (!compilerOptions.noResolve) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = ts.tryResolveScriptReference(host, root, fileReference); + if (referencedFile && ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference)) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + } + emitSourceFile(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + if (!compilerOptions.noResolve) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference); + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile))) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + } + emitSourceFile(sourceFile); + } + }); + } + return { + reportedDeclarationError: reportedDeclarationError, + aliasDeclarationEmitInfo: aliasDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + referencePathsOutput: referencePathsOutput + }; + function hasInternalAnnotation(range) { + var text = currentSourceFile.text; + var comment = text.substring(range.pos, range.end); + return comment.indexOf("@internal") >= 0; + } + function stripInternal(node) { + if (node) { + var leadingCommentRanges = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos); + if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) { + return; + } + emitNode(node); + } + } function createAndSetNewTextWriterWithSymbolWriter() { var writer = createTextWriter(newLine); writer.trackSymbol = trackSymbol; @@ -15944,7 +16050,7 @@ var ts; } function emitLines(nodes) { for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); + emit(nodes[i]); } } function emitSeparatedList(nodes, separator, eachNodeEmitFn) { @@ -16193,7 +16299,7 @@ var ts; function emitEnumMemberDeclaration(node) { emitJsDocComments(node); writeTextOfNode(currentSourceFile, node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); + var enumMemberValue = resolver.getConstantValue(node); if (enumMemberValue !== undefined) { write(" = "); write(enumMemberValue.toString()); @@ -16441,7 +16547,7 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 130 /* GetAccessor */ ? accessor.type : accessor.parameters[0].type; + return accessor.kind === 130 /* GetAccessor */ ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type : undefined; } } function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { @@ -16675,50 +16781,11 @@ var ts; return emitSourceFile(node); } } - var referencePathsOutput = ""; function writeReferencePath(referencedFile) { - var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, host, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; + var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.fileName : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, host, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); referencePathsOutput += "/// " + newLine; } - if (root) { - if (!compilerOptions.noResolve) { - var addedGlobalFileReference = false; - ts.forEach(root.referencedFiles, function (fileReference) { - var referencedFile = ts.tryResolveScriptReference(host, 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(host.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - if (!compilerOptions.noResolve) { - ts.forEach(sourceFile.referencedFiles, function (fileReference) { - var referencedFile = ts.tryResolveScriptReference(host, 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(), - referencePathsOutput: referencePathsOutput - }; } function getDeclarationDiagnostics(host, resolver, targetSourceFile) { var diagnostics = []; @@ -16733,6 +16800,32 @@ var ts; var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; var diagnostics = []; var newLine = host.getNewLine(); + if (targetSourceFile === undefined) { + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); + emitFile(jsFilePath, sourceFile); + } + }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + else { + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); + emitFile(jsFilePath, targetSourceFile); + } + else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics); + return { + emitSkipped: false, + diagnostics: diagnostics, + sourceMaps: sourceMapDataList + }; function emitJavaScript(jsFilePath, root) { var writer = createTextWriter(newLine); var write = writer.write; @@ -16769,6 +16862,22 @@ var ts; var scopeEmitEnd = function () { }; var sourceMapData; + if (compilerOptions.sourceMap) { + initializeEmitterWithSourceMaps(); + } + if (root) { + emit(root); + } + else { + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + emit(sourceFile); + } + }); + } + writeLine(); + writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); + return; function initializeEmitterWithSourceMaps() { var sourceMapDir; var sourceMapSourceIndex = -1; @@ -16838,7 +16947,7 @@ var ts; } } function recordSourceMapSpan(pos) { - var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); + var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, pos); var emittedLine = writer.getLine(); var emittedColumn = writer.getColumn(); if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { @@ -16873,9 +16982,9 @@ var ts; } function recordNewSourceFileStart(node) { var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; - sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, host.getCurrentDirectory(), host.getCanonicalFileName, true)); + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; - sourceMapData.inputSourceFileNames.push(node.filename); + sourceMapData.inputSourceFileNames.push(node.fileName); } function recordScopeNameOfNode(node, scopeName) { function recordScopeNameIndex(scopeNameIndex) { @@ -16953,7 +17062,7 @@ var ts; sourceMapDataList.push(sourceMapData); writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark); } - var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath)); + var sourceMapJsFile = ts.getBaseFileName(ts.normalizeSlashes(jsFilePath)); sourceMapData = { sourceMapFilePath: jsFilePath + ".map", jsSourceMappingURL: sourceMapJsFile + ".map", @@ -17146,7 +17255,6 @@ var ts; ts.forEachChild(node, emit); return; } - ts.Debug.assert(node.parent.kind !== 153 /* TaggedTemplateExpression */); var emitOuterParens = ts.isExpression(node.parent) && templateNeedsParens(node, node.parent); if (emitOuterParens) { write("("); @@ -17180,16 +17288,14 @@ var ts; case 151 /* CallExpression */: case 152 /* NewExpression */: return parent.expression === template; + case 153 /* TaggedTemplateExpression */: case 155 /* ParenthesizedExpression */: return false; - case 153 /* 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(languageVersion < 2 /* ES6 */); switch (expression.kind) { case 163 /* BinaryExpression */: switch (expression.operator) { @@ -17434,8 +17540,11 @@ var ts; function tryEmitConstantValue(node) { var constantValue = resolver.getConstantValue(node); if (constantValue !== undefined) { - var propertyName = node.kind === 149 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); - write(constantValue.toString() + " /* " + propertyName + " */"); + write(constantValue.toString()); + if (!compilerOptions.removeComments) { + var propertyName = node.kind === 149 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + write(" /* " + propertyName + " */"); + } return true; } return false; @@ -17497,7 +17606,6 @@ var ts; } } function emitTaggedTemplateExpression(node) { - ts.Debug.assert(languageVersion >= 2 /* ES6 */, "Trying to emit a tagged template in pre-ES6 mode."); emit(node.tag); write(" "); emit(node.template); @@ -18107,6 +18215,9 @@ var ts; emit(node.name); emitSignatureAndBody(node); } + function shouldEmitAsArrowFunction(node) { + return node.kind === 157 /* ArrowFunction */ && languageVersion >= 2 /* ES6 */; + } function emitFunctionDeclaration(node) { if (ts.nodeIsMissing(node.body)) { return emitPinnedOrTripleSlashComments(node); @@ -18114,7 +18225,9 @@ var ts; if (node.kind !== 128 /* MethodDeclaration */ && node.kind !== 127 /* MethodSignature */) { emitLeadingComments(node); } - write("function "); + if (!shouldEmitAsArrowFunction(node)) { + write("function "); + } if (node.kind === 190 /* FunctionDeclaration */ || (node.kind === 156 /* FunctionExpression */ && node.name)) { emit(node.name); } @@ -18142,6 +18255,13 @@ var ts; write(")"); decreaseIndent(); } + function emitSignatureParametersForArrow(node) { + if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) { + emit(node.parameters[0]); + return; + } + emitSignatureParameters(node); + } function emitSignatureAndBody(node) { var saveTempCount = tempCount; var saveTempVariables = tempVariables; @@ -18149,58 +18269,70 @@ var ts; tempCount = 0; tempVariables = undefined; tempParameters = undefined; - emitSignatureParameters(node); - write(" {"); - scopeEmitStart(node); - increaseIndent(); - emitDetachedComments(node.body.kind === 170 /* Block */ ? node.body.statements : node.body); - var startIndex = 0; - if (node.body.kind === 170 /* Block */) { - startIndex = emitDirectivePrologues(node.body.statements, true); - } - var outPos = writer.getTextPos(); - emitCaptureThisForNodeIfNecessary(node); - emitDefaultValueAssignments(node); - emitRestParameter(node); - if (node.body.kind !== 170 /* Block */ && outPos === writer.getTextPos()) { - decreaseIndent(); - write(" "); - emitStart(node.body); - write("return "); - emitNode(node.body, true); - emitEnd(node.body); - write(";"); - emitTempDeclarations(false); - write(" "); - emitStart(node.body); - write("}"); - emitEnd(node.body); + if (shouldEmitAsArrowFunction(node)) { + emitSignatureParametersForArrow(node); + write(" =>"); } else { - if (node.body.kind === 170 /* Block */) { - emitLinesStartingAt(node.body.statements, startIndex); - } - else { - writeLine(); - emitLeadingComments(node.body); - write("return "); - emit(node.body, true); - write(";"); - emitTrailingComments(node.body); - } - emitTempDeclarations(true); + emitSignatureParameters(node); + } + write(" {"); + scopeEmitStart(node); + if (!node.body) { writeLine(); + write("}"); + } + else { + increaseIndent(); + emitDetachedComments(node.body.kind === 170 /* Block */ ? node.body.statements : node.body); + var startIndex = 0; if (node.body.kind === 170 /* Block */) { - emitLeadingCommentsOfPosition(node.body.statements.end); - decreaseIndent(); - emitToken(15 /* CloseBraceToken */, node.body.statements.end); + startIndex = emitDirectivePrologues(node.body.statements, true); } - else { + var outPos = writer.getTextPos(); + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + if (node.body.kind !== 170 /* Block */ && outPos === writer.getTextPos()) { decreaseIndent(); + write(" "); + emitStart(node.body); + write("return "); + emitNode(node.body, true); + emitEnd(node.body); + write(";"); + emitTempDeclarations(false); + write(" "); emitStart(node.body); write("}"); emitEnd(node.body); } + else { + if (node.body.kind === 170 /* Block */) { + emitLinesStartingAt(node.body.statements, startIndex); + } + else { + writeLine(); + emitLeadingComments(node.body); + write("return "); + emit(node.body, true); + write(";"); + emitTrailingComments(node.body); + } + emitTempDeclarations(true); + writeLine(); + if (node.body.kind === 170 /* Block */) { + emitLeadingCommentsOfPosition(node.body.statements.end); + decreaseIndent(); + emitToken(15 /* CloseBraceToken */, node.body.statements.end); + } + else { + decreaseIndent(); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + } } scopeEmitEnd(); if (node.flags & 1 /* Export */) { @@ -18536,17 +18668,27 @@ var ts; write("["); emitExpressionForPropertyName(node.name); write("] = "); - if (node.initializer && !ts.isConst(enumParent)) { - emit(node.initializer); - } - else { - write(resolver.getEnumMemberValue(node).toString()); - } + writeEnumMemberDeclarationValue(node); write("] = "); emitExpressionForPropertyName(node.name); emitEnd(node); write(";"); } + function writeEnumMemberDeclarationValue(member) { + if (!member.initializer || ts.isConst(member.parent)) { + var value = resolver.getConstantValue(member); + if (value !== undefined) { + write(value.toString()); + return; + } + } + if (member.initializer) { + emit(member.initializer); + } + else { + write("undefined"); + } + } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { if (moduleDeclaration.body.kind === 195 /* ModuleDeclaration */) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); @@ -19052,21 +19194,6 @@ var ts; emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments); emitComments(currentSourceFile, writer, pinnedComments, true, newLine, writeComment); } - if (compilerOptions.sourceMap) { - initializeEmitterWithSourceMaps(); - } - if (root) { - emit(root); - } - else { - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - emit(sourceFile); - } - }); - } - writeLine(); - writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); } function writeDeclarationFile(jsFilePath, sourceFile) { var emitDeclarationResult = emitDeclarations(host, resolver, diagnostics, jsFilePath, sourceFile); @@ -19084,75 +19211,18 @@ var ts; writeFile(host, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } - var hasSemanticErrors = false; - var isEmitBlocked = false; - if (targetSourceFile === undefined) { - hasSemanticErrors = resolver.hasSemanticErrors(); - isEmitBlocked = host.isEmitBlocked(); - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); - emitFile(jsFilePath, sourceFile); - } - }); - if (compilerOptions.out) { - emitFile(compilerOptions.out); - } - } - else { - if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { - hasSemanticErrors = resolver.hasSemanticErrors(targetSourceFile); - isEmitBlocked = host.isEmitBlocked(targetSourceFile); - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (!shouldEmitToOwnFile(sourceFile, compilerOptions)) { - hasSemanticErrors = hasSemanticErrors || resolver.hasSemanticErrors(sourceFile); - isEmitBlocked = isEmitBlocked || host.isEmitBlocked(sourceFile); - } - }); - emitFile(compilerOptions.out); - } - } function emitFile(jsFilePath, sourceFile) { - if (!isEmitBlocked) { - emitJavaScript(jsFilePath, sourceFile); - if (!hasSemanticErrors && compilerOptions.declaration) { - writeDeclarationFile(jsFilePath, sourceFile); - } + emitJavaScript(jsFilePath, sourceFile); + if (compilerOptions.declaration) { + writeDeclarationFile(jsFilePath, sourceFile); } } - diagnostics.sort(ts.compareDiagnostics); - diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); - var hasEmitterError = ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1 /* Error */; }); - var emitResultStatus; - if (isEmitBlocked) { - emitResultStatus = 1 /* AllOutputGenerationSkipped */; - } - else if (hasEmitterError) { - emitResultStatus = 4 /* EmitErrorsEncountered */; - } - else if (hasSemanticErrors && compilerOptions.declaration) { - emitResultStatus = 3 /* DeclarationGenerationSkipped */; - } - else if (hasSemanticErrors && !compilerOptions.declaration) { - emitResultStatus = 2 /* JSGeneratedWithSemanticErrors */; - } - else { - emitResultStatus = 0 /* Succeeded */; - } - return { - emitResultStatus: emitResultStatus, - diagnostics: diagnostics, - sourceMaps: sourceMapDataList - }; } ts.emitFiles = emitFiles; })(ts || (ts = {})); var ts; (function (ts) { + ts.emitTime = 0; function createCompilerHost(options) { var currentDirectory; var existingDirectories = {}; @@ -19160,9 +19230,9 @@ var ts; return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } var unsupportedFileEncodingErrorCode = -2147024809; - function getSourceFile(filename, languageVersion, onError) { + function getSourceFile(fileName, languageVersion, onError) { try { - var text = ts.sys.readFile(filename, options.charset); + var text = ts.sys.readFile(fileName, options.charset); } catch (e) { if (onError) { @@ -19170,7 +19240,7 @@ var ts; } text = ""; } - return text !== undefined ? ts.createSourceFile(filename, text, languageVersion) : undefined; + return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined; } function writeFile(fileName, data, writeByteOrderMark, onError) { function directoryExists(directoryPath) { @@ -19202,7 +19272,7 @@ var ts; } return { getSourceFile: getSourceFile, - getDefaultLibFilename: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), options.target === 2 /* ES6 */ ? "lib.es6.d.ts" : "lib.d.ts"); }, + getDefaultLibFileName: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), ts.getDefaultLibFileName(options)); }, writeFile: writeFile, getCurrentDirectory: function () { return currentDirectory || (currentDirectory = ts.sys.getCurrentDirectory()); }, useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; }, @@ -19211,142 +19281,202 @@ var ts; }; } ts.createCompilerHost = createCompilerHost; + function getPreEmitDiagnostics(program) { + var diagnostics = program.getSyntacticDiagnostics().concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(diagnostics); + } + ts.getPreEmitDiagnostics = getPreEmitDiagnostics; + function flattenDiagnosticMessageText(messageText, newLine) { + if (typeof messageText === "string") { + return messageText; + } + else { + var diagnosticChain = messageText; + var result = ""; + var indent = 0; + while (diagnosticChain) { + if (indent) { + result += newLine; + for (var i = 0; i < indent; i++) { + result += " "; + } + } + result += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + return result; + } + } + ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText; function createProgram(rootNames, options, host) { var program; var files = []; var filesByName = {}; - var errors = []; + var diagnostics = ts.createDiagnosticCollection(); var seenNoDefaultLib = options.noLib; var commonSourceDirectory; + host = host || createCompilerHost(options); ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); if (!seenNoDefaultLib) { - processRootFile(host.getDefaultLibFilename(options), true); + processRootFile(host.getDefaultLibFileName(options), true); } verifyCompilerOptions(); - errors.sort(ts.compareDiagnostics); var diagnosticsProducingTypeChecker; var noDiagnosticsTypeChecker; - var emitHost; program = { getSourceFile: getSourceFile, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, - getCompilerHost: function () { return host; }, - getDiagnostics: getDiagnostics, + getSyntacticDiagnostics: getSyntacticDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, + getSemanticDiagnostics: getSemanticDiagnostics, getDeclarationDiagnostics: getDeclarationDiagnostics, getTypeChecker: getTypeChecker, + getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: function () { return commonSourceDirectory; }, - emitFiles: invokeEmitter, - isEmitBlocked: isEmitBlocked, - getCurrentDirectory: host.getCurrentDirectory + emit: emit, + getCurrentDirectory: host.getCurrentDirectory, + getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); }, + getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); }, + getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, + getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); } }; return program; - function getEmitHost() { - return emitHost || (emitHost = ts.createEmitHostFromProgram(program)); - } - function hasEarlyErrors(sourceFile) { - return ts.forEach(getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile), function (d) { return d.isEarly; }); - } - function isEmitBlocked(sourceFile) { - return getDiagnostics(sourceFile).length !== 0 || hasEarlyErrors(sourceFile) || (options.noEmitOnError && getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0); + function getEmitHost(writeFileCallback) { + return { + getCanonicalFileName: host.getCanonicalFileName, + getCommonSourceDirectory: program.getCommonSourceDirectory, + getCompilerOptions: program.getCompilerOptions, + getCurrentDirectory: host.getCurrentDirectory, + getNewLine: host.getNewLine, + getSourceFile: program.getSourceFile, + getSourceFiles: program.getSourceFiles, + writeFile: writeFileCallback || host.writeFile + }; } function getDiagnosticsProducingTypeChecker() { return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true)); } - function getTypeChecker(produceDiagnostics) { - if (produceDiagnostics) { - return getDiagnosticsProducingTypeChecker(); - } - else { - return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, produceDiagnostics)); - } + function getTypeChecker() { + return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false)); } function getDeclarationDiagnostics(targetSourceFile) { - var typeChecker = getDiagnosticsProducingTypeChecker(); - typeChecker.getDiagnostics(targetSourceFile); - var resolver = typeChecker.getEmitResolver(); + var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(targetSourceFile); return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile); } - function invokeEmitter(targetSourceFile) { - var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(); - return ts.emitFiles(resolver, getEmitHost(), targetSourceFile); + function emit(sourceFile, writeFileCallback) { + if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) { + return { diagnostics: [], sourceMaps: undefined, emitSkipped: true }; + } + var start = new Date().getTime(); + var emitResult = ts.emitFiles(getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile), getEmitHost(writeFileCallback), sourceFile); + ts.emitTime += new Date().getTime() - start; + return emitResult; } - function getSourceFile(filename) { - filename = host.getCanonicalFileName(filename); - return ts.hasProperty(filesByName, filename) ? filesByName[filename] : undefined; + function getSourceFile(fileName) { + fileName = host.getCanonicalFileName(fileName); + return ts.hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; } - function getDiagnostics(sourceFile) { - return sourceFile ? ts.filter(errors, function (e) { return e.file === sourceFile; }) : errors; + function getDiagnosticsHelper(sourceFile, getDiagnostics) { + if (sourceFile) { + return getDiagnostics(sourceFile); + } + var allDiagnostics = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + ts.addRange(allDiagnostics, getDiagnostics(sourceFile)); + }); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function getSyntacticDiagnostics(sourceFile) { + return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile); + } + function getSemanticDiagnostics(sourceFile) { + return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile); + } + function getSyntacticDiagnosticsForFile(sourceFile) { + return sourceFile.parseDiagnostics; + } + function getSemanticDiagnosticsForFile(sourceFile) { + var typeChecker = getDiagnosticsProducingTypeChecker(); + ts.Debug.assert(!!sourceFile.bindDiagnostics); + var bindDiagnostics = sourceFile.bindDiagnostics; + var checkDiagnostics = typeChecker.getDiagnostics(sourceFile); + var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics); } function getGlobalDiagnostics() { - return ts.filter(errors, function (e) { return !e.file; }); + var typeChecker = getDiagnosticsProducingTypeChecker(); + var allDiagnostics = []; + ts.addRange(allDiagnostics, typeChecker.getGlobalDiagnostics()); + ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); } - function hasExtension(filename) { - return ts.getBaseFilename(filename).indexOf(".") >= 0; + function hasExtension(fileName) { + return ts.getBaseFileName(fileName).indexOf(".") >= 0; } - function processRootFile(filename, isDefaultLib) { - processSourceFile(ts.normalizePath(filename), isDefaultLib); + function processRootFile(fileName, isDefaultLib) { + processSourceFile(ts.normalizePath(fileName), isDefaultLib); } - function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) { + function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) { if (refEnd !== undefined && refPos !== undefined) { var start = refPos; var length = refEnd - refPos; } var diagnostic; - if (hasExtension(filename)) { - if (!options.allowNonTsExtensions && !ts.fileExtensionIs(filename, ".ts")) { + if (hasExtension(fileName)) { + if (!options.allowNonTsExtensions && !ts.fileExtensionIs(host.getCanonicalFileName(fileName), ".ts")) { diagnostic = ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts; } - else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + 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)) { + else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) { diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself; } } else { - if (options.allowNonTsExtensions && !findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + if (options.allowNonTsExtensions && !findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; } - else if (!findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) { + else if (!findSourceFile(fileName + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(fileName + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; - filename += ".ts"; + fileName += ".ts"; } } if (diagnostic) { if (refFile) { - errors.push(ts.createFileDiagnostic(refFile, start, length, diagnostic, filename)); + diagnostics.add(ts.createFileDiagnostic(refFile, start, length, diagnostic, fileName)); } else { - errors.push(ts.createCompilerDiagnostic(diagnostic, filename)); + diagnostics.add(ts.createCompilerDiagnostic(diagnostic, fileName)); } } } - function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) { - var canonicalName = host.getCanonicalFileName(filename); + function findSourceFile(fileName, isDefaultLib, refFile, refStart, refLength) { + var canonicalName = host.getCanonicalFileName(fileName); if (ts.hasProperty(filesByName, canonicalName)) { - return getSourceFileFromCache(filename, canonicalName, false); + return getSourceFileFromCache(fileName, canonicalName, false); } else { - var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(filename, host.getCurrentDirectory()); + var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath); if (ts.hasProperty(filesByName, canonicalAbsolutePath)) { return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, true); } - var file = filesByName[canonicalName] = host.getSourceFile(filename, options.target, function (hostErrorMessage) { + var file = filesByName[canonicalName] = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { if (refFile) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } else { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } }); if (file) { seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; filesByName[canonicalAbsolutePath] = file; if (!options.noResolve) { - var basePath = ts.getDirectoryPath(filename); + var basePath = ts.getDirectoryPath(fileName); processReferencedFiles(file, basePath); processImportedModules(file, basePath); } @@ -19356,18 +19486,15 @@ var ts; else { files.push(file); } - ts.forEach(file.getSyntacticDiagnostics(), function (e) { - errors.push(e); - }); } } return file; - function getSourceFileFromCache(filename, canonicalName, useAbsolutePath) { + function getSourceFileFromCache(fileName, canonicalName, useAbsolutePath) { var file = filesByName[canonicalName]; if (file && host.useCaseSensitiveFileNames()) { - var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.filename, host.getCurrentDirectory()) : file.filename; + var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName; if (canonicalName !== sourceFileName) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, sourceFileName)); + diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); } } return file; @@ -19375,8 +19502,8 @@ var ts; } function processReferencedFiles(file, basePath) { ts.forEach(file.referencedFiles, function (ref) { - var referencedFilename = ts.isRootedDiskPath(ref.filename) ? ref.filename : ts.combinePaths(basePath, ref.filename); - processSourceFile(ts.normalizePath(referencedFilename), 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) { @@ -19415,17 +19542,17 @@ var ts; }); } }); - function findModuleSourceFile(filename, nameLiteral) { - return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); + function findModuleSourceFile(fileName, nameLiteral) { + return findSourceFile(fileName, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); } } function verifyCompilerOptions() { if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { if (options.mapRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); } if (options.sourceRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); } return; } @@ -19434,19 +19561,19 @@ var ts; var externalModuleErrorSpan = ts.getErrorSpanForNode(firstExternalModule.externalModuleIndicator); var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); var errorLength = externalModuleErrorSpan.end - errorStart; - errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); + diagnostics.add(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); } if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) { var commonPathComponents; ts.forEach(files, function (sourceFile) { - if (!(sourceFile.flags & 1024 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { - var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory()); + if (!(sourceFile.flags & 1024 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) { + var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.fileName, host.getCurrentDirectory()); sourcePathComponents.pop(); if (commonPathComponents) { for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathComponents.length); i++) { if (commonPathComponents[i] !== sourcePathComponents[i]) { if (i === 0) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); return; } commonPathComponents.length = i; @@ -19469,10 +19596,10 @@ var ts; } if (options.noEmit) { if (options.out || options.outDir) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); } if (options.declaration) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); } } } @@ -19611,6 +19738,12 @@ var ts; type: "boolean", description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures }, + { + name: "stripInternal", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation, + experimental: true + }, { name: "target", shortName: "t", @@ -19634,7 +19767,7 @@ var ts; ]; function parseCommandLine(commandLine) { var options = {}; - var filenames = []; + var fileNames = []; var errors = []; var shortOptionNames = {}; var optionNameMap = {}; @@ -19647,7 +19780,7 @@ var ts; parseStrings(commandLine); return { options: options, - filenames: filenames, + fileNames: fileNames, errors: errors }; function parseStrings(args) { @@ -19693,14 +19826,14 @@ var ts; } } else { - filenames.push(s); + fileNames.push(s); } } } - function parseResponseFile(filename) { - var text = ts.sys.readFile(filename); + function parseResponseFile(fileName) { + var text = ts.sys.readFile(fileName); if (!text) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, filename)); + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName)); return; } var args = []; @@ -19720,7 +19853,7 @@ var ts; pos++; } else { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, filename)); + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName)); } } else { @@ -19733,9 +19866,9 @@ var ts; } } ts.parseCommandLine = parseCommandLine; - function readConfigFile(filename) { + function readConfigFile(fileName) { try { - var text = ts.sys.readFile(filename); + var text = ts.sys.readFile(fileName); return /\S/.test(text) ? JSON.parse(text) : {}; } catch (e) { @@ -19746,7 +19879,7 @@ var ts; var errors = []; return { options: getCompilerOptions(), - filenames: getFiles(), + fileNames: getFiles(), errors: errors }; function getCompilerOptions() { @@ -19858,7 +19991,7 @@ var ts; function countLines(program) { var count = 0; ts.forEach(program.getSourceFiles(), function (file) { - count += file.getLineAndCharacterFromPosition(file.end).line; + count += ts.getLineAndCharacterOfPosition(file, file.end).line; }); return count; } @@ -19873,11 +20006,11 @@ var ts; function reportDiagnostic(diagnostic) { var output = ""; if (diagnostic.file) { - var loc = diagnostic.file.getLineAndCharacterFromPosition(diagnostic.start); - output += diagnostic.file.filename + "(" + loc.line + "," + loc.character + "): "; + var loc = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start); + output += diagnostic.file.fileName + "(" + loc.line + "," + loc.character + "): "; } var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase(); - output += category + " TS" + diagnostic.code + ": " + diagnostic.messageText + ts.sys.newLine; + output += category + " TS" + diagnostic.code + ": " + ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) + ts.sys.newLine; ts.sys.write(output); } function reportDiagnostics(diagnostics) { @@ -19911,26 +20044,26 @@ var ts; } function findConfigFile() { var searchPath = ts.normalizePath(ts.sys.getCurrentDirectory()); - var filename = "tsconfig.json"; + var fileName = "tsconfig.json"; while (true) { - if (ts.sys.fileExists(filename)) { - return filename; + if (ts.sys.fileExists(fileName)) { + return fileName; } var parentPath = ts.getDirectoryPath(searchPath); if (parentPath === searchPath) { break; } searchPath = parentPath; - filename = "../" + filename; + fileName = "../" + fileName; } return undefined; } function executeCommandLine(args) { var commandLine = ts.parseCommandLine(args); - var configFilename; + var configFileName; var configFileWatcher; var cachedProgram; - var rootFilenames; + var rootFileNames; var compilerOptions; var compilerHost; var hostGetSourceFile; @@ -19938,93 +20071,93 @@ var ts; if (commandLine.options.locale) { if (!isJSONSupported()) { reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--locale")); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } validateLocaleAndSetLanguage(commandLine.options.locale, commandLine.errors); } if (commandLine.errors.length > 0) { reportDiagnostics(commandLine.errors); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } if (commandLine.options.version) { reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Version_0, version)); - return ts.sys.exit(0 /* Succeeded */); + return ts.sys.exit(0 /* Success */); } if (commandLine.options.help) { printVersion(); printHelp(); - return ts.sys.exit(0 /* Succeeded */); + return ts.sys.exit(0 /* Success */); } if (commandLine.options.project) { if (!isJSONSupported()) { reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--project")); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } - configFilename = ts.normalizePath(ts.combinePaths(commandLine.options.project, "tsconfig.json")); - if (commandLine.filenames.length !== 0) { + configFileName = ts.normalizePath(ts.combinePaths(commandLine.options.project, "tsconfig.json")); + if (commandLine.fileNames.length !== 0) { reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line)); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } } - else if (commandLine.filenames.length === 0 && isJSONSupported()) { - configFilename = findConfigFile(); + else if (commandLine.fileNames.length === 0 && isJSONSupported()) { + configFileName = findConfigFile(); } - if (commandLine.filenames.length === 0 && !configFilename) { + if (commandLine.fileNames.length === 0 && !configFileName) { printVersion(); printHelp(); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(0 /* Success */); } if (commandLine.options.watch) { if (!ts.sys.watchFile) { reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch")); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } - if (configFilename) { - configFileWatcher = ts.sys.watchFile(configFilename, configFileChanged); + if (configFileName) { + configFileWatcher = ts.sys.watchFile(configFileName, configFileChanged); } } performCompilation(); function performCompilation() { if (!cachedProgram) { - if (configFilename) { - var configObject = ts.readConfigFile(configFilename); + if (configFileName) { + var configObject = ts.readConfigFile(configFileName); if (!configObject) { - reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, configFilename)); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, configFileName)); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } - var configParseResult = ts.parseConfigFile(configObject, ts.getDirectoryPath(configFilename)); + var configParseResult = ts.parseConfigFile(configObject, ts.getDirectoryPath(configFileName)); if (configParseResult.errors.length > 0) { reportDiagnostics(configParseResult.errors); - return ts.sys.exit(5 /* CompilerOptionsErrors */); + return ts.sys.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } - rootFilenames = configParseResult.filenames; + rootFileNames = configParseResult.fileNames; compilerOptions = ts.extend(commandLine.options, configParseResult.options); } else { - rootFilenames = commandLine.filenames; + rootFileNames = commandLine.fileNames; compilerOptions = commandLine.options; } compilerHost = ts.createCompilerHost(compilerOptions); hostGetSourceFile = compilerHost.getSourceFile; compilerHost.getSourceFile = getSourceFile; } - var compileResult = compile(rootFilenames, compilerOptions, compilerHost); + var compileResult = compile(rootFileNames, compilerOptions, compilerHost); if (!commandLine.options.watch) { return ts.sys.exit(compileResult.exitStatus); } setCachedProgram(compileResult.program); reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Compilation_complete_Watching_for_file_changes)); } - function getSourceFile(filename, languageVersion, onError) { + function getSourceFile(fileName, languageVersion, onError) { if (cachedProgram) { - var sourceFile = cachedProgram.getSourceFile(filename); + var sourceFile = cachedProgram.getSourceFile(fileName); if (sourceFile && sourceFile.fileWatcher) { return sourceFile; } } - var sourceFile = hostGetSourceFile(filename, languageVersion, onError); + var sourceFile = hostGetSourceFile(fileName, languageVersion, onError); if (sourceFile && commandLine.options.watch) { - sourceFile.fileWatcher = ts.sys.watchFile(sourceFile.filename, function () { return sourceFileChanged(sourceFile); }); + sourceFile.fileWatcher = ts.sys.watchFile(sourceFile.fileName, function () { return sourceFileChanged(sourceFile); }); } return sourceFile; } @@ -20063,61 +20196,62 @@ var ts; } } ts.executeCommandLine = executeCommandLine; - function compile(filenames, compilerOptions, compilerHost) { - var parseStart = new Date().getTime(); - var program = ts.createProgram(filenames, compilerOptions, compilerHost); - var bindStart = new Date().getTime(); - var errors = program.getDiagnostics(); - var exitStatus; - if (errors.length) { - var checkStart = bindStart; - var emitStart = bindStart; - var reportStart = bindStart; - exitStatus = 1 /* AllOutputGenerationSkipped */; - } - else { - var checker = program.getTypeChecker(true); - var checkStart = new Date().getTime(); - errors = checker.getDiagnostics(); - if (program.isEmitBlocked()) { - exitStatus = 1 /* AllOutputGenerationSkipped */; - } - else if (compilerOptions.noEmit) { - exitStatus = 0 /* Succeeded */; - } - else { - var emitStart = new Date().getTime(); - var emitOutput = program.emitFiles(); - var emitErrors = emitOutput.diagnostics; - exitStatus = emitOutput.emitResultStatus; - var reportStart = new Date().getTime(); - errors = ts.concatenate(errors, emitErrors); - } - } - reportDiagnostics(errors); + function compile(fileNames, compilerOptions, compilerHost) { + ts.parseTime = 0; + ts.bindTime = 0; + ts.checkTime = 0; + ts.emitTime = 0; + var start = new Date().getTime(); + var program = ts.createProgram(fileNames, compilerOptions, compilerHost); + var exitStatus = compileProgram(); + var end = start - new Date().getTime(); if (compilerOptions.listFiles) { ts.forEach(program.getSourceFiles(), function (file) { - ts.sys.write(file.filename + ts.sys.newLine); + ts.sys.write(file.fileName + ts.sys.newLine); }); } if (compilerOptions.diagnostics) { var memoryUsed = ts.sys.getMemoryUsage ? ts.sys.getMemoryUsage() : -1; reportCountStatistic("Files", program.getSourceFiles().length); reportCountStatistic("Lines", countLines(program)); - reportCountStatistic("Nodes", checker ? checker.getNodeCount() : 0); - reportCountStatistic("Identifiers", checker ? checker.getIdentifierCount() : 0); - reportCountStatistic("Symbols", checker ? checker.getSymbolCount() : 0); - reportCountStatistic("Types", checker ? checker.getTypeCount() : 0); + reportCountStatistic("Nodes", program.getNodeCount()); + reportCountStatistic("Identifiers", program.getIdentifierCount()); + reportCountStatistic("Symbols", program.getSymbolCount()); + reportCountStatistic("Types", program.getTypeCount()); if (memoryUsed >= 0) { reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K"); } - reportTimeStatistic("Parse time", bindStart - parseStart); - reportTimeStatistic("Bind time", checkStart - bindStart); - reportTimeStatistic("Check time", emitStart - checkStart); - reportTimeStatistic("Emit time", reportStart - emitStart); - reportTimeStatistic("Total time", reportStart - parseStart); + reportTimeStatistic("Parse time", ts.parseTime); + reportTimeStatistic("Bind time", ts.bindTime); + reportTimeStatistic("Check time", ts.checkTime); + reportTimeStatistic("Emit time", ts.emitTime); + reportTimeStatistic("Total time", start - end); } return { program: program, exitStatus: exitStatus }; + function compileProgram() { + var diagnostics = program.getSyntacticDiagnostics(); + reportDiagnostics(diagnostics); + if (diagnostics.length === 0) { + var diagnostics = program.getGlobalDiagnostics(); + reportDiagnostics(diagnostics); + if (diagnostics.length === 0) { + var diagnostics = program.getSemanticDiagnostics(); + reportDiagnostics(diagnostics); + } + } + if (compilerOptions.noEmit) { + return diagnostics.length ? 1 /* DiagnosticsPresent_OutputsSkipped */ : 0 /* Success */; + } + var emitOutput = program.emit(); + reportDiagnostics(emitOutput.diagnostics); + if (emitOutput.emitSkipped) { + return 1 /* DiagnosticsPresent_OutputsSkipped */; + } + if (diagnostics.length > 0 || emitOutput.diagnostics.length > 0) { + 2 /* DiagnosticsPresent_OutputsGenerated */; + } + return 0 /* Success */; + } } function printVersion() { ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, version) + ts.sys.newLine); @@ -20137,7 +20271,7 @@ var ts; output += padding + "tsc @args.txt" + ts.sys.newLine; output += ts.sys.newLine; output += getDiagnosticText(ts.Diagnostics.Options_Colon) + ts.sys.newLine; - var optsList = ts.optionDeclarations.slice(); + var optsList = ts.filter(ts.optionDeclarations.slice(), function (v) { return !v.experimental; }); optsList.sort(function (a, b) { return ts.compareValues(a.name.toLowerCase(), b.name.toLowerCase()); }); var marginLength = 0; var usageColumn = []; diff --git a/bin/typescript.d.ts b/bin/typescript.d.ts index 11f29d7624e..e54b125f73d 100644 --- a/bin/typescript.d.ts +++ b/bin/typescript.d.ts @@ -676,7 +676,7 @@ declare module "typescript" { exportName: Identifier; } interface FileReference extends TextRange { - filename: string; + fileName: string; } interface CommentRange extends TextRange { hasTrailingNewLine?: boolean; @@ -684,42 +684,43 @@ declare module "typescript" { interface SourceFile extends Declaration { statements: NodeArray; endOfFileToken: Node; - filename: string; + fileName: string; text: string; - getLineAndCharacterFromPosition(position: number): LineAndCharacter; - getPositionFromLineAndCharacter(line: number, character: number): number; - getLineStarts(): number[]; - update(newText: string, textChangeRange: TextChangeRange): SourceFile; amdDependencies: string[]; amdModuleName: string; referencedFiles: FileReference[]; - referenceDiagnostics: Diagnostic[]; - parseDiagnostics: Diagnostic[]; - getSyntacticDiagnostics(): Diagnostic[]; - semanticDiagnostics: Diagnostic[]; hasNoDefaultLib: boolean; externalModuleIndicator: Node; - nodeCount: number; - identifierCount: number; - symbolCount: number; languageVersion: ScriptTarget; identifiers: Map; } interface ScriptReferenceHost { getCompilerOptions(): CompilerOptions; - getSourceFile(filename: string): SourceFile; + getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from the compiler host will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -740,33 +741,22 @@ declare module "typescript" { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; - getSourceFile(filename: string): SourceFile; + getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; - getNodeCount(): number; - getIdentifierCount(): number; - getSymbolCount(): number; - getTypeCount(): number; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -790,7 +780,7 @@ declare module "typescript" { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -828,6 +818,7 @@ declare module "typescript" { WriteOwnNameForAnyLike = 16, WriteTypeArgumentsOfSignature = 32, InElementType = 64, + UseFullyQualifiedType = 128, } const enum SymbolFormatFlags { None = 0, @@ -855,15 +846,13 @@ declare module "typescript" { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; - hasSemanticErrors(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { @@ -1099,7 +1088,6 @@ declare module "typescript" { key: string; category: DiagnosticCategory; code: number; - isEarly?: boolean; } interface DiagnosticMessageChain { messageText: string; @@ -1111,13 +1099,9 @@ declare module "typescript" { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; - /** - * Early error - any error (can be produced at parsing\binding\typechecking step) that blocks emit - */ - isEarly?: boolean; } enum DiagnosticCategory { Warning = 0, @@ -1154,6 +1138,7 @@ declare module "typescript" { target?: ScriptTarget; version?: boolean; watch?: boolean; + stripInternal?: boolean; [option: string]: string | number | boolean; } const enum ModuleKind { @@ -1173,7 +1158,7 @@ declare module "typescript" { } interface ParsedCommandLine { options: CompilerOptions; - filenames: string[]; + fileNames: string[]; errors: Diagnostic[]; } interface CommandLineOption { @@ -1184,6 +1169,7 @@ declare module "typescript" { description?: DiagnosticMessage; paramType?: DiagnosticMessage; error?: DiagnosticMessage; + experimental?: boolean; } const enum CharacterCodes { nullCharacter = 0, @@ -1314,10 +1300,10 @@ declare module "typescript" { isCancellationRequested(): boolean; } interface CompilerHost { - getSourceFile(filename: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; - getDefaultLibFilename(options: CompilerOptions): string; + getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(filename: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; @@ -1358,15 +1344,14 @@ declare module "typescript" { } function tokenToString(t: SyntaxKind): string; function computeLineStarts(text: string): number[]; - function getPositionFromLineAndCharacter(lineStarts: number[], line: number, character: number): number; - function getLineAndCharacterOfPosition(lineStarts: number[], position: number): { - line: number; - character: number; - }; - function positionToLineAndCharacter(text: string, pos: number): { + function getPositionFromLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number; + function computePositionFromLineAndCharacter(lineStarts: number[], line: number, character: number): number; + function getLineStarts(sourceFile: SourceFile): number[]; + function computeLineAndCharacterOfPosition(lineStarts: number[], position: number): { line: number; character: number; }; + function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; function isWhiteSpace(ch: number): boolean; function isLineBreak(ch: number): boolean; function isOctalDigit(ch: number): boolean; @@ -1382,8 +1367,9 @@ declare module "typescript" { function createNode(kind: SyntaxKind): Node; function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; + function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; - function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; + function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; function isLeftHandSideExpression(expr: Expression): boolean; function isAssignmentOperator(token: SyntaxKind): boolean; } @@ -1392,7 +1378,9 @@ declare module "typescript" { } declare module "typescript" { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module "typescript" { var servicesVersion: string; @@ -1437,11 +1425,14 @@ declare module "typescript" { getDocumentationComment(): SymbolDisplayPart[]; } interface SourceFile { - isOpen: boolean; version: string; scriptSnapshot: IScriptSnapshot; nameTable: Map; getNamedDeclarations(): Declaration[]; + getLineAndCharacterFromPosition(pos: number): LineAndCharacter; + getLineStarts(): number[]; + getPositionFromLineAndCharacter(line: number, character: number): number; + update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** * Represents an immutable snapshot of a script at a specified time.Once acquired, the @@ -1453,12 +1444,6 @@ declare module "typescript" { getText(start: number, end: number): string; /** Gets the length of this script snapshot. */ getLength(): number; - /** - * This call returns the array containing the start position of every line. - * i.e."[0, 10, 55]". TODO: consider making this optional. The language service could - * always determine this (albeit in a more expensive manner). - */ - getLineStartPositions(): number[]; /** * Gets the TextChangeRange that describe how the text changed between this text and * an older version. This information is used by the incremental parser to determine @@ -1476,22 +1461,19 @@ declare module "typescript" { importedFiles: FileReference[]; isLibFile: boolean; } - interface Logger { - log(s: string): void; - trace(s: string): void; - error(s: string): void; - } - interface LanguageServiceHost extends Logger { + interface LanguageServiceHost { getCompilationSettings(): CompilerOptions; getNewLine?(): string; getScriptFileNames(): string[]; getScriptVersion(fileName: string): string; - getScriptIsOpen(fileName: string): boolean; getScriptSnapshot(fileName: string): IScriptSnapshot; getLocalizedDiagnosticMessages?(): any; getCancellationToken?(): CancellationToken; getCurrentDirectory(): string; - getDefaultLibFilename(options: CompilerOptions): string; + getDefaultLibFileName(options: CompilerOptions): string; + log?(s: string): void; + trace?(s: string): void; + error?(s: string): void; } interface LanguageService { cleanupSemanticCache(): void; @@ -1521,7 +1503,8 @@ declare module "typescript" { getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; getEmitOutput(fileName: string): EmitOutput; - getSourceFile(filename: string): SourceFile; + getProgram(): Program; + getSourceFile(fileName: string): SourceFile; dispose(): void; } interface ClassifiedSpan { @@ -1671,6 +1654,7 @@ declare module "typescript" { } interface CompletionInfo { isMemberCompletion: boolean; + isNewIdentifierLocation: boolean; entries: CompletionEntry[]; } interface CompletionEntry { @@ -1700,7 +1684,7 @@ declare module "typescript" { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, @@ -1740,10 +1724,68 @@ declare module "typescript" { interface Classifier { getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): ClassificationResult; } + /** + * The document registry represents a store of SourceFile objects that can be shared between + * multiple LanguageService instances. A LanguageService instance holds on the SourceFile (AST) + * of files in the context. + * SourceFile objects account for most of the memory usage by the language service. Sharing + * the same DocumentRegistry instance between different instances of LanguageService allow + * for more efficient memory utilization since all projects will share at least the library + * file (lib.d.ts). + * + * A more advanced use of the document registry is to serialize sourceFile objects to disk + * and re-hydrate them when needed. + * + * To create a default DocumentRegistry, use createDocumentRegistry to create one, and pass it + * to all subsequent createLanguageService calls. + */ interface DocumentRegistry { - acquireDocument(filename: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean): SourceFile; - updateDocument(sourceFile: SourceFile, filename: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TextChangeRange): SourceFile; - releaseDocument(filename: string, compilationSettings: CompilerOptions): void; + /** + * Request a stored SourceFile with a given fileName and compilationSettings. + * The first call to acquire will call createLanguageServiceSourceFile to generate + * the SourceFile if was not found in the registry. + * + * @param fileName The name of the file requested + * @param compilationSettings Some compilation settings like target affects the + * shape of a the resulting SourceFile. This allows the DocumentRegistry to store + * multiple copies of the same file for different compilation settings. + * @parm scriptSnapshot Text of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm version Current version of the file. Only used if the file was not found + * in the registry and a new one was created. + */ + acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string): SourceFile; + /** + * Request an updated version of an already existing SourceFile with a given fileName + * and compilationSettings. The update will intern call updateLanguageServiceSourceFile + * to get an updated SourceFile. + * + * Note: It is not allowed to call update on a SourceFile that was not acquired from this + * registry originally. + * + * @param sourceFile The original sourceFile object to update + * @param fileName The name of the file requested + * @param compilationSettings Some compilation settings like target affects the + * shape of a the resulting SourceFile. This allows the DocumentRegistry to store + * multiple copies of the same file for different compilation settings. + * @parm scriptSnapshot Text of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm version Current version of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm textChangeRange Change ranges since the last snapshot. Only used if the file + * was not found in the registry and a new one was created. + */ + updateDocument(sourceFile: SourceFile, fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange): SourceFile; + /** + * Informs the DocumentRegistry that a file is not needed any longer. + * + * Note: It is not allowed to call release on a SourceFile that was not acquired from + * this registry originally. + * + * @param fileName The name of the file to be released + * @param compilationSettings The compilation settings used to acquire the file + */ + releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; } class ScriptElementKind { static unknown: string; @@ -1814,11 +1856,17 @@ declare module "typescript" { isCancellationRequested(): boolean; throwIfCancellationRequested(): void; } - function createLanguageServiceSourceFile(filename: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, isOpen: boolean, setNodeParents: boolean): SourceFile; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean): SourceFile; var disableIncrementalParsing: boolean; - function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TextChangeRange): SourceFile; + function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange): SourceFile; function createDocumentRegistry(): DocumentRegistry; function preProcessFile(sourceText: string, readImportFiles?: boolean): PreProcessedFileInfo; - function createLanguageService(host: LanguageServiceHost, documentRegistry: DocumentRegistry): LanguageService; - function createClassifier(host: Logger): Classifier; + function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry): LanguageService; + function createClassifier(): Classifier; + /** + * Get the path of the default library file (lib.d.ts) as distributed with the typescript + * node package. + * The functionality is not supported if the ts module is consumed outside of a node module. + */ + function getDefaultLibFilePath(options: CompilerOptions): string; } diff --git a/bin/typescriptServices.d.ts b/bin/typescriptServices.d.ts index d4fa86da1b5..74624dbca81 100644 --- a/bin/typescriptServices.d.ts +++ b/bin/typescriptServices.d.ts @@ -676,7 +676,7 @@ declare module ts { exportName: Identifier; } interface FileReference extends TextRange { - filename: string; + fileName: string; } interface CommentRange extends TextRange { hasTrailingNewLine?: boolean; @@ -684,42 +684,43 @@ declare module ts { interface SourceFile extends Declaration { statements: NodeArray; endOfFileToken: Node; - filename: string; + fileName: string; text: string; - getLineAndCharacterFromPosition(position: number): LineAndCharacter; - getPositionFromLineAndCharacter(line: number, character: number): number; - getLineStarts(): number[]; - update(newText: string, textChangeRange: TextChangeRange): SourceFile; amdDependencies: string[]; amdModuleName: string; referencedFiles: FileReference[]; - referenceDiagnostics: Diagnostic[]; - parseDiagnostics: Diagnostic[]; - getSyntacticDiagnostics(): Diagnostic[]; - semanticDiagnostics: Diagnostic[]; hasNoDefaultLib: boolean; externalModuleIndicator: Node; - nodeCount: number; - identifierCount: number; - symbolCount: number; languageVersion: ScriptTarget; identifiers: Map; } interface ScriptReferenceHost { getCompilerOptions(): CompilerOptions; - getSourceFile(filename: string): SourceFile; + getSourceFile(fileName: string): SourceFile; getCurrentDirectory(): string; } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + } interface Program extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - getCompilerHost(): CompilerHost; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + /** + * Emits the javascript and declaration files. If targetSourceFile is not specified, then + * the javascript and declaration files will be produced for all the files in this program. + * If targetSourceFile is specified, then only the javascript and declaration for that + * specific file will be generated. + * + * If writeFile is not specified then the writeFile callback from the compiler host will be + * used for writing the javascript and declaration files. Otherwise, the writeFile parameter + * will be invoked when writing the javascript and declaration files. + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback): EmitResult; + getSyntacticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; getGlobalDiagnostics(): Diagnostic[]; - getDeclarationDiagnostics(sourceFile: SourceFile): Diagnostic[]; - getTypeChecker(produceDiagnostics: boolean): TypeChecker; + getSemanticDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile): Diagnostic[]; + getTypeChecker(): TypeChecker; getCommonSourceDirectory(): string; - emitFiles(targetSourceFile?: SourceFile): EmitResult; - isEmitBlocked(sourceFile?: SourceFile): boolean; } interface SourceMapSpan { emittedLine: number; @@ -740,33 +741,22 @@ declare module ts { sourceMapMappings: string; sourceMapDecodedMappings: SourceMapSpan[]; } - enum EmitReturnStatus { - Succeeded = 0, - AllOutputGenerationSkipped = 1, - JSGeneratedWithSemanticErrors = 2, - DeclarationGenerationSkipped = 3, - EmitErrorsEncountered = 4, - CompilerOptionsErrors = 5, + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, } interface EmitResult { - emitResultStatus: EmitReturnStatus; + emitSkipped: boolean; diagnostics: Diagnostic[]; sourceMaps: SourceMapData[]; } interface TypeCheckerHost { getCompilerOptions(): CompilerOptions; - getCompilerHost(): CompilerHost; getSourceFiles(): SourceFile[]; - getSourceFile(filename: string): SourceFile; + getSourceFile(fileName: string): SourceFile; } interface TypeChecker { - getEmitResolver(): EmitResolver; - getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; - getGlobalDiagnostics(): Diagnostic[]; - getNodeCount(): number; - getIdentifierCount(): number; - getSymbolCount(): number; - getTypeCount(): number; getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; @@ -790,7 +780,7 @@ declare module ts { isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; isUndefinedSymbol(symbol: Symbol): boolean; isArgumentsSymbol(symbol: Symbol): boolean; - getEnumMemberValue(node: EnumMember): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; } @@ -828,6 +818,7 @@ declare module ts { WriteOwnNameForAnyLike = 16, WriteTypeArgumentsOfSignature = 32, InElementType = 64, + UseFullyQualifiedType = 128, } const enum SymbolFormatFlags { None = 0, @@ -855,15 +846,13 @@ declare module ts { isReferencedImportDeclaration(node: ImportDeclaration): boolean; isTopLevelValueImportWithEntityName(node: ImportDeclaration): boolean; getNodeCheckFlags(node: Node): NodeCheckFlags; - getEnumMemberValue(node: EnumMember): number; - hasSemanticErrors(sourceFile?: SourceFile): boolean; isDeclarationVisible(node: Declaration): boolean; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, 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; isEntityNameVisible(entityName: EntityName, enclosingDeclaration: Node): SymbolVisibilityResult; - getConstantValue(node: PropertyAccessExpression | ElementAccessExpression): number; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isUnknownIdentifier(location: Node, name: string): boolean; } const enum SymbolFlags { @@ -1099,7 +1088,6 @@ declare module ts { key: string; category: DiagnosticCategory; code: number; - isEarly?: boolean; } interface DiagnosticMessageChain { messageText: string; @@ -1111,13 +1099,9 @@ declare module ts { file: SourceFile; start: number; length: number; - messageText: string; + messageText: string | DiagnosticMessageChain; category: DiagnosticCategory; code: number; - /** - * Early error - any error (can be produced at parsing\binding\typechecking step) that blocks emit - */ - isEarly?: boolean; } enum DiagnosticCategory { Warning = 0, @@ -1154,6 +1138,7 @@ declare module ts { target?: ScriptTarget; version?: boolean; watch?: boolean; + stripInternal?: boolean; [option: string]: string | number | boolean; } const enum ModuleKind { @@ -1173,7 +1158,7 @@ declare module ts { } interface ParsedCommandLine { options: CompilerOptions; - filenames: string[]; + fileNames: string[]; errors: Diagnostic[]; } interface CommandLineOption { @@ -1184,6 +1169,7 @@ declare module ts { description?: DiagnosticMessage; paramType?: DiagnosticMessage; error?: DiagnosticMessage; + experimental?: boolean; } const enum CharacterCodes { nullCharacter = 0, @@ -1314,10 +1300,10 @@ declare module ts { isCancellationRequested(): boolean; } interface CompilerHost { - getSourceFile(filename: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; - getDefaultLibFilename(options: CompilerOptions): string; + getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getDefaultLibFileName(options: CompilerOptions): string; getCancellationToken?(): CancellationToken; - writeFile(filename: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; getCurrentDirectory(): string; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; @@ -1358,15 +1344,14 @@ declare module ts { } function tokenToString(t: SyntaxKind): string; function computeLineStarts(text: string): number[]; - function getPositionFromLineAndCharacter(lineStarts: number[], line: number, character: number): number; - function getLineAndCharacterOfPosition(lineStarts: number[], position: number): { - line: number; - character: number; - }; - function positionToLineAndCharacter(text: string, pos: number): { + function getPositionFromLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number; + function computePositionFromLineAndCharacter(lineStarts: number[], line: number, character: number): number; + function getLineStarts(sourceFile: SourceFile): number[]; + function computeLineAndCharacterOfPosition(lineStarts: number[], position: number): { line: number; character: number; }; + function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; function isWhiteSpace(ch: number): boolean; function isLineBreak(ch: number): boolean; function isOctalDigit(ch: number): boolean; @@ -1382,8 +1367,9 @@ declare module ts { function createNode(kind: SyntaxKind): Node; function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; function modifierToFlag(token: SyntaxKind): NodeFlags; + function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange): SourceFile; function isEvalOrArgumentsIdentifier(node: Node): boolean; - function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; + function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean): SourceFile; function isLeftHandSideExpression(expr: Expression): boolean; function isAssignmentOperator(token: SyntaxKind): boolean; } @@ -1392,7 +1378,9 @@ declare module ts { } declare module ts { function createCompilerHost(options: CompilerOptions): CompilerHost; - function createProgram(rootNames: string[], options: CompilerOptions, host: CompilerHost): Program; + function getPreEmitDiagnostics(program: Program): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost): Program; } declare module ts { var servicesVersion: string; @@ -1437,11 +1425,14 @@ declare module ts { getDocumentationComment(): SymbolDisplayPart[]; } interface SourceFile { - isOpen: boolean; version: string; scriptSnapshot: IScriptSnapshot; nameTable: Map; getNamedDeclarations(): Declaration[]; + getLineAndCharacterFromPosition(pos: number): LineAndCharacter; + getLineStarts(): number[]; + getPositionFromLineAndCharacter(line: number, character: number): number; + update(newText: string, textChangeRange: TextChangeRange): SourceFile; } /** * Represents an immutable snapshot of a script at a specified time.Once acquired, the @@ -1453,12 +1444,6 @@ declare module ts { getText(start: number, end: number): string; /** Gets the length of this script snapshot. */ getLength(): number; - /** - * This call returns the array containing the start position of every line. - * i.e."[0, 10, 55]". TODO: consider making this optional. The language service could - * always determine this (albeit in a more expensive manner). - */ - getLineStartPositions(): number[]; /** * Gets the TextChangeRange that describe how the text changed between this text and * an older version. This information is used by the incremental parser to determine @@ -1476,22 +1461,19 @@ declare module ts { importedFiles: FileReference[]; isLibFile: boolean; } - interface Logger { - log(s: string): void; - trace(s: string): void; - error(s: string): void; - } - interface LanguageServiceHost extends Logger { + interface LanguageServiceHost { getCompilationSettings(): CompilerOptions; getNewLine?(): string; getScriptFileNames(): string[]; getScriptVersion(fileName: string): string; - getScriptIsOpen(fileName: string): boolean; getScriptSnapshot(fileName: string): IScriptSnapshot; getLocalizedDiagnosticMessages?(): any; getCancellationToken?(): CancellationToken; getCurrentDirectory(): string; - getDefaultLibFilename(options: CompilerOptions): string; + getDefaultLibFileName(options: CompilerOptions): string; + log?(s: string): void; + trace?(s: string): void; + error?(s: string): void; } interface LanguageService { cleanupSemanticCache(): void; @@ -1521,7 +1503,8 @@ declare module ts { getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; getEmitOutput(fileName: string): EmitOutput; - getSourceFile(filename: string): SourceFile; + getProgram(): Program; + getSourceFile(fileName: string): SourceFile; dispose(): void; } interface ClassifiedSpan { @@ -1671,6 +1654,7 @@ declare module ts { } interface CompletionInfo { isMemberCompletion: boolean; + isNewIdentifierLocation: boolean; entries: CompletionEntry[]; } interface CompletionEntry { @@ -1700,7 +1684,7 @@ declare module ts { } interface EmitOutput { outputFiles: OutputFile[]; - emitOutputStatus: EmitReturnStatus; + emitSkipped: boolean; } const enum OutputFileType { JavaScript = 0, @@ -1740,10 +1724,68 @@ declare module ts { interface Classifier { getClassificationsForLine(text: string, lexState: EndOfLineState, classifyKeywordsInGenerics?: boolean): ClassificationResult; } + /** + * The document registry represents a store of SourceFile objects that can be shared between + * multiple LanguageService instances. A LanguageService instance holds on the SourceFile (AST) + * of files in the context. + * SourceFile objects account for most of the memory usage by the language service. Sharing + * the same DocumentRegistry instance between different instances of LanguageService allow + * for more efficient memory utilization since all projects will share at least the library + * file (lib.d.ts). + * + * A more advanced use of the document registry is to serialize sourceFile objects to disk + * and re-hydrate them when needed. + * + * To create a default DocumentRegistry, use createDocumentRegistry to create one, and pass it + * to all subsequent createLanguageService calls. + */ interface DocumentRegistry { - acquireDocument(filename: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean): SourceFile; - updateDocument(sourceFile: SourceFile, filename: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TextChangeRange): SourceFile; - releaseDocument(filename: string, compilationSettings: CompilerOptions): void; + /** + * Request a stored SourceFile with a given fileName and compilationSettings. + * The first call to acquire will call createLanguageServiceSourceFile to generate + * the SourceFile if was not found in the registry. + * + * @param fileName The name of the file requested + * @param compilationSettings Some compilation settings like target affects the + * shape of a the resulting SourceFile. This allows the DocumentRegistry to store + * multiple copies of the same file for different compilation settings. + * @parm scriptSnapshot Text of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm version Current version of the file. Only used if the file was not found + * in the registry and a new one was created. + */ + acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string): SourceFile; + /** + * Request an updated version of an already existing SourceFile with a given fileName + * and compilationSettings. The update will intern call updateLanguageServiceSourceFile + * to get an updated SourceFile. + * + * Note: It is not allowed to call update on a SourceFile that was not acquired from this + * registry originally. + * + * @param sourceFile The original sourceFile object to update + * @param fileName The name of the file requested + * @param compilationSettings Some compilation settings like target affects the + * shape of a the resulting SourceFile. This allows the DocumentRegistry to store + * multiple copies of the same file for different compilation settings. + * @parm scriptSnapshot Text of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm version Current version of the file. Only used if the file was not found + * in the registry and a new one was created. + * @parm textChangeRange Change ranges since the last snapshot. Only used if the file + * was not found in the registry and a new one was created. + */ + updateDocument(sourceFile: SourceFile, fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange): SourceFile; + /** + * Informs the DocumentRegistry that a file is not needed any longer. + * + * Note: It is not allowed to call release on a SourceFile that was not acquired from + * this registry originally. + * + * @param fileName The name of the file to be released + * @param compilationSettings The compilation settings used to acquire the file + */ + releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; } class ScriptElementKind { static unknown: string; @@ -1814,11 +1856,17 @@ declare module ts { isCancellationRequested(): boolean; throwIfCancellationRequested(): void; } - function createLanguageServiceSourceFile(filename: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, isOpen: boolean, setNodeParents: boolean): SourceFile; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean): SourceFile; var disableIncrementalParsing: boolean; - function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, isOpen: boolean, textChangeRange: TextChangeRange): SourceFile; + function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange): SourceFile; function createDocumentRegistry(): DocumentRegistry; function preProcessFile(sourceText: string, readImportFiles?: boolean): PreProcessedFileInfo; - function createLanguageService(host: LanguageServiceHost, documentRegistry: DocumentRegistry): LanguageService; - function createClassifier(host: Logger): Classifier; + function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry): LanguageService; + function createClassifier(): Classifier; + /** + * Get the path of the default library file (lib.d.ts) as distributed with the typescript + * node package. + * The functionality is not supported if the ts module is consumed outside of a node module. + */ + function getDefaultLibFilePath(options: CompilerOptions): string; } diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js index 0ea95acc9f6..9f532c9ae51 100644 --- a/bin/typescriptServices.js +++ b/bin/typescriptServices.js @@ -286,15 +286,12 @@ var ts; RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported"; })(ts.RelationComparisonResult || (ts.RelationComparisonResult = {})); var RelationComparisonResult = ts.RelationComparisonResult; - (function (EmitReturnStatus) { - EmitReturnStatus[EmitReturnStatus["Succeeded"] = 0] = "Succeeded"; - EmitReturnStatus[EmitReturnStatus["AllOutputGenerationSkipped"] = 1] = "AllOutputGenerationSkipped"; - EmitReturnStatus[EmitReturnStatus["JSGeneratedWithSemanticErrors"] = 2] = "JSGeneratedWithSemanticErrors"; - EmitReturnStatus[EmitReturnStatus["DeclarationGenerationSkipped"] = 3] = "DeclarationGenerationSkipped"; - EmitReturnStatus[EmitReturnStatus["EmitErrorsEncountered"] = 4] = "EmitErrorsEncountered"; - EmitReturnStatus[EmitReturnStatus["CompilerOptionsErrors"] = 5] = "CompilerOptionsErrors"; - })(ts.EmitReturnStatus || (ts.EmitReturnStatus = {})); - var EmitReturnStatus = ts.EmitReturnStatus; + (function (ExitStatus) { + ExitStatus[ExitStatus["Success"] = 0] = "Success"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; + })(ts.ExitStatus || (ts.ExitStatus = {})); + var ExitStatus = ts.ExitStatus; (function (TypeFormatFlags) { TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None"; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 1] = "WriteArrayAsGenericType"; @@ -304,6 +301,7 @@ var ts; TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 16] = "WriteOwnNameForAnyLike"; TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; TypeFormatFlags[TypeFormatFlags["InElementType"] = 64] = "InElementType"; + TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 128] = "UseFullyQualifiedType"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; (function (SymbolFormatFlags) { @@ -691,6 +689,12 @@ var ts; return result; } ts.sum = sum; + function addRange(to, from) { + for (var i = 0, n = from.length; i < n; i++) { + to.push(from[i]); + } + } + ts.addRange = addRange; function lastOrUndefined(array) { if (array.length === 0) { return undefined; @@ -822,8 +826,7 @@ var ts; length: length, messageText: text, category: message.category, - code: message.code, - isEarly: message.isEarly + code: message.code }; } ts.createFileDiagnostic = createFileDiagnostic; @@ -838,8 +841,7 @@ var ts; length: undefined, messageText: text, category: message.category, - code: message.code, - isEarly: message.isEarly + code: message.code }; } ts.createCompilerDiagnostic = createCompilerDiagnostic; @@ -862,51 +864,43 @@ var ts; return headChain; } ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains; - function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) { - Debug.assert(start >= 0, "start must be non-negative, is " + start); - Debug.assert(length >= 0, "length must be non-negative, is " + length); - var code = diagnosticChain.code; - var category = diagnosticChain.category; - var messageText = ""; - var indent = 0; - while (diagnosticChain) { - if (indent) { - messageText += newLine; - for (var i = 0; i < indent; i++) { - messageText += " "; - } - } - messageText += diagnosticChain.messageText; - indent++; - diagnosticChain = diagnosticChain.next; - } - return { - file: file, - start: start, - length: length, - code: code, - category: category, - messageText: messageText - }; - } - ts.flattenDiagnosticChain = flattenDiagnosticChain; function compareValues(a, b) { if (a === b) - return 0 /* EqualTo */; + return 0; if (a === undefined) - return -1 /* LessThan */; + return -1; if (b === undefined) - return 1 /* GreaterThan */; - return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; + return 1; + return a < b ? -1 : 1; } ts.compareValues = compareValues; - function getDiagnosticFilename(diagnostic) { - return diagnostic.file ? diagnostic.file.filename : undefined; + function getDiagnosticFileName(diagnostic) { + return diagnostic.file ? diagnostic.file.fileName : undefined; } function compareDiagnostics(d1, d2) { - return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0; + return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareMessageText(d1.messageText, d2.messageText) || 0; } ts.compareDiagnostics = compareDiagnostics; + function compareMessageText(text1, text2) { + while (text1 && text2) { + var string1 = typeof text1 === "string" ? text1 : text1.messageText; + var string2 = typeof text2 === "string" ? text2 : text2.messageText; + var res = compareValues(string1, string2); + if (res) { + return res; + } + text1 = typeof text1 === "string" ? undefined : text1.next; + text2 = typeof text2 === "string" ? undefined : text2.next; + } + if (!text1 && !text2) { + return 0; + } + return text1 ? 1 : -1; + } + function sortAndDeduplicateDiagnostics(diagnostics) { + return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); + } + ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; function deduplicateSortedDiagnostics(diagnostics) { if (diagnostics.length < 2) { return diagnostics; @@ -915,7 +909,7 @@ var ts; var previousDiagnostic = diagnostics[0]; for (var i = 1; i < diagnostics.length; i++) { var currentDiagnostic = diagnostics[i]; - var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0 /* EqualTo */; + var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; if (!isDupe) { newDiagnostics.push(currentDiagnostic); previousDiagnostic = currentDiagnostic; @@ -929,8 +923,8 @@ var ts; } ts.normalizeSlashes = normalizeSlashes; function getRootLength(path) { - if (path.charCodeAt(0) === 47 /* slash */) { - if (path.charCodeAt(1) !== 47 /* slash */) + if (path.charCodeAt(0) === 47) { + if (path.charCodeAt(1) !== 47) return 1; var p1 = path.indexOf("/", 2); if (p1 < 0) @@ -940,8 +934,8 @@ var ts; return p1 + 1; return p2 + 1; } - if (path.charCodeAt(1) === 58 /* colon */) { - if (path.charCodeAt(2) === 47 /* slash */) + if (path.charCodeAt(1) === 58) { + if (path.charCodeAt(2) === 47) return 3; return 2; } @@ -998,8 +992,8 @@ var ts; return normalizedPathComponents(path, rootLength); } ts.getNormalizedPathComponents = getNormalizedPathComponents; - function getNormalizedAbsolutePath(filename, currentDirectory) { - return getNormalizedPathFromPathComponents(getNormalizedPathComponents(filename, currentDirectory)); + function getNormalizedAbsolutePath(fileName, currentDirectory) { + return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); } ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; function getNormalizedPathFromPathComponents(pathComponents) { @@ -1012,7 +1006,7 @@ var ts; var urlLength = url.length; var rootLength = url.indexOf("://") + "://".length; while (rootLength < urlLength) { - if (url.charCodeAt(rootLength) === 47 /* slash */) { + if (url.charCodeAt(rootLength) === 47) { rootLength++; } else { @@ -1067,11 +1061,11 @@ var ts; return absolutePath; } ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; - function getBaseFilename(path) { + function getBaseFileName(path) { var i = path.lastIndexOf(ts.directorySeparator); return i < 0 ? path : path.substring(i + 1); } - ts.getBaseFilename = getBaseFilename; + ts.getBaseFileName = getBaseFileName; function combinePaths(path1, path2) { if (!(path1 && path1.length)) return path2; @@ -1131,6 +1125,10 @@ var ts; } } ts.escapeString = escapeString; + function getDefaultLibFileName(options) { + return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts"; + } + ts.getDefaultLibFileName = getDefaultLibFileName; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -1167,7 +1165,7 @@ var ts; var AssertionLevel = ts.AssertionLevel; var Debug; (function (Debug) { - var currentAssertionLevel = 0 /* None */; + var currentAssertionLevel = 0; function shouldAssert(level) { return currentAssertionLevel >= level; } @@ -1441,567 +1439,570 @@ var ts; var ts; (function (ts) { ts.Diagnostics = { - 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.", isEarly: true }, - 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.", isEarly: true }, - Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, - Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, - Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation.", isEarly: true }, - A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list.", isEarly: true }, - Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer.", isEarly: true }, - A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter.", isEarly: true }, - An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier.", isEarly: true }, - An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark.", isEarly: true }, - An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer.", isEarly: true }, - An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation.", isEarly: true }, - An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation.", isEarly: true }, - An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'.", isEarly: true }, - A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." }, - An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." }, - A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." }, - A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." }, - Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen.", isEarly: true }, - _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier.", isEarly: true }, - _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen.", isEarly: true }, - _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element.", isEarly: true }, - An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." }, - super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." }, - Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names.", isEarly: true }, - Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts.", isEarly: true }, - A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context.", isEarly: true }, - Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts.", isEarly: true }, - _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element.", isEarly: true }, - A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration.", isEarly: true }, - A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, - A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional.", isEarly: true }, - A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter.", isEarly: true }, - A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter.", isEarly: true }, - A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer.", isEarly: true }, - A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter.", isEarly: true }, - A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters.", isEarly: true }, - Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher.", isEarly: true }, - Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer.", isEarly: true }, - An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module.", isEarly: true }, - Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers.", isEarly: true }, - Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, - A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration.", isEarly: true }, - Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, - Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher.", isEarly: true }, - An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context.", isEarly: true }, - _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration.", isEarly: true }, - _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter.", isEarly: true }, - Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement.", isEarly: true }, - Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration.", isEarly: true }, - Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration.", isEarly: true }, - An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters.", isEarly: true }, - A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation.", isEarly: true }, - An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter.", isEarly: true }, - _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty.", isEarly: true }, - Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty.", isEarly: true }, - Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty.", isEarly: true }, - Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode.", isEarly: true }, - with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode.", isEarly: true }, - delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode.", isEarly: true }, - A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement.", isEarly: true }, - A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement.", isEarly: true }, - Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary.", isEarly: true }, - A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body.", isEarly: true }, - Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected.", isEarly: true }, - Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected.", isEarly: true }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional.", isEarly: true }, - A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement.", isEarly: true }, - Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'", isEarly: true }, - A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement.", isEarly: true }, - A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement.", isEarly: true }, - An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode.", isEarly: true }, - An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name.", isEarly: true }, - An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name.", isEarly: true }, - An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers.", isEarly: true }, - Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode.", isEarly: true }, - A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1 /* Error */, key: "A tuple type element list cannot be empty.", isEarly: true }, - Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty.", isEarly: true }, - Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." }, - Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." }, - Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." }, - Invalid_character: { code: 1127, category: 1 /* Error */, key: "Invalid character." }, - Declaration_or_statement_expected: { code: 1128, category: 1 /* Error */, key: "Declaration or statement expected." }, - Statement_expected: { code: 1129, category: 1 /* Error */, key: "Statement expected." }, - case_or_default_expected: { code: 1130, category: 1 /* Error */, key: "'case' or 'default' expected." }, - Property_or_signature_expected: { code: 1131, category: 1 /* Error */, key: "Property or signature expected." }, - Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." }, - Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." }, - Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." }, - Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected.", isEarly: true }, - Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." }, - Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." }, - Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." }, - Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." }, - Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." }, - String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected.", isEarly: true }, - Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here.", isEarly: true }, - or_expected: { code: 1144, category: 1 /* Error */, key: "'{' or ';' expected." }, - Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members.", isEarly: true }, - Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." }, - Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module.", isEarly: true }, - 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.", isEarly: true }, - var_let_or_const_expected: { code: 1152, category: 1 /* Error */, key: "'var', 'let' or 'const' expected." }, - let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1 /* Error */, key: "'let' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1 /* Error */, key: "'const' declarations are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - const_declarations_must_be_initialized: { code: 1155, category: 1 /* Error */, key: "'const' declarations must be initialized", isEarly: true }, - const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1 /* Error */, key: "'const' declarations can only be declared inside a block.", isEarly: true }, - let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1 /* Error */, key: "'let' declarations can only be declared inside a block.", isEarly: true }, - 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.", isEarly: true }, - 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." }, - An_object_member_cannot_be_declared_optional: { code: 1162, category: 1 /* Error */, key: "An object member cannot be declared optional.", isEarly: true }, - yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: 1 /* Error */, key: "'yield' expression must be contained_within a generator declaration.", isEarly: true }, - Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: 1 /* Error */, key: "Computed property names are not allowed in enums.", isEarly: true }, - Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: 1 /* Error */, key: "Computed property names are not allowed in an ambient context.", isEarly: true }, - Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: 1 /* Error */, key: "Computed property names are not allowed in class property declarations.", isEarly: true }, - Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: 1 /* Error */, key: "Computed property names are only available when targeting ECMAScript 6 and higher.", isEarly: true }, - Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: 1 /* Error */, key: "Computed property names are not allowed in method overloads.", isEarly: true }, - Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: 1 /* Error */, key: "Computed property names are not allowed in interfaces.", isEarly: true }, - Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: 1 /* Error */, key: "Computed property names are not allowed in type literals.", isEarly: true }, - A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: 1 /* Error */, key: "A comma expression is not allowed in a computed property name." }, - extends_clause_already_seen: { code: 1172, category: 1 /* Error */, key: "'extends' clause already seen.", isEarly: true }, - extends_clause_must_precede_implements_clause: { code: 1173, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause.", isEarly: true }, - Classes_can_only_extend_a_single_class: { code: 1174, category: 1 /* Error */, key: "Classes can only extend a single class.", isEarly: true }, - implements_clause_already_seen: { code: 1175, category: 1 /* Error */, key: "'implements' clause already seen.", isEarly: true }, - Interface_declaration_cannot_have_implements_clause: { code: 1176, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause.", isEarly: true }, - Binary_digit_expected: { code: 1177, category: 1 /* Error */, key: "Binary digit expected." }, - Octal_digit_expected: { code: 1178, category: 1 /* Error */, key: "Octal digit expected." }, - Unexpected_token_expected: { code: 1179, category: 1 /* Error */, key: "Unexpected token. '{' expected." }, - Property_destructuring_pattern_expected: { code: 1180, category: 1 /* Error */, key: "Property destructuring pattern expected." }, - Array_element_destructuring_pattern_expected: { code: 1181, category: 1 /* Error */, key: "Array element destructuring pattern expected." }, - A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: 1 /* Error */, key: "A destructuring declaration must have an initializer.", isEarly: true }, - Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: 1 /* Error */, key: "Destructuring declarations are not allowed in ambient contexts.", isEarly: true }, - An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: 1 /* Error */, key: "An implementation cannot be declared in ambient contexts.", isEarly: true }, - Modifiers_cannot_appear_here: { code: 1184, category: 1 /* Error */, key: "Modifiers cannot appear here." }, - Merge_conflict_marker_encountered: { code: 1185, category: 1 /* Error */, key: "Merge conflict marker encountered." }, - A_rest_element_cannot_have_an_initializer: { code: 1186, category: 1 /* Error */, key: "A rest element cannot have an initializer." }, - A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: 1 /* Error */, key: "A parameter property may not be a binding pattern." }, - 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." }, - Circular_definition_of_import_alias_0: { code: 2303, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, - Cannot_find_name_0: { code: 2304, category: 1 /* Error */, key: "Cannot find name '{0}'." }, - Module_0_has_no_exported_member_1: { code: 2305, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, - File_0_is_not_an_external_module: { code: 2306, category: 1 /* Error */, key: "File '{0}' is not an external module." }, - Cannot_find_external_module_0: { code: 2307, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, - A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, - An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, - Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, - A_class_may_only_extend_another_class: { code: 2311, category: 1 /* Error */, key: "A class may only extend another class." }, - An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, - Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, - Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, - Type_0_is_not_generic: { code: 2315, category: 1 /* Error */, key: "Type '{0}' is not generic." }, - Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, - Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, - Cannot_find_global_type_0: { code: 2318, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, - Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1 /* Error */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, - Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." }, - Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, - Type_0_is_not_assignable_to_type_1: { code: 2322, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, - Property_0_is_missing_in_type_1: { code: 2324, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, - Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: 1 /* Error */, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." }, - Types_of_property_0_are_incompatible: { code: 2326, category: 1 /* Error */, key: "Types of property '{0}' are incompatible." }, - Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: 1 /* Error */, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." }, - Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible." }, - Index_signature_is_missing_in_type_0: { code: 2329, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, - Index_signatures_are_incompatible: { code: 2330, category: 1 /* Error */, key: "Index signatures are incompatible." }, - this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, - this_cannot_be_referenced_in_current_location: { code: 2332, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, - this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, - this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, - super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, - super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, - Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, - super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, - Property_0_does_not_exist_on_type_1: { code: 2339, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, - Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1 /* Error */, key: "Only public and protected methods of the base class are accessible via the 'super' keyword" }, - Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: 1 /* Error */, key: "Property '{0}' is private and only accessible within class '{1}'." }, - An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, - Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, - Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, - Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, - Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, - Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, - Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, - Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, - Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, - Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, - No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1 /* Error */, key: "No best common type exists among return expressions." }, - A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, - An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, - The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, - The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, - The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, - The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, - The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, - The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, - Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, - Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, - Type_parameter_name_cannot_be_0: { code: 2368, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, - A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, - A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, - A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, - Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, - Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, - Duplicate_string_index_signature: { code: 2374, category: 1 /* Error */, key: "Duplicate string index signature." }, - Duplicate_number_index_signature: { code: 2375, category: 1 /* Error */, key: "Duplicate number index signature." }, - A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, - Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, - A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, - Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, - get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, - A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, - Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, - Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, - Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, - Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: 1 /* Error */, key: "Overload signatures must all be public, private or protected." }, - Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, - Function_overload_must_be_static: { code: 2387, category: 1 /* Error */, key: "Function overload must be static." }, - Function_overload_must_not_be_static: { code: 2388, category: 1 /* Error */, key: "Function overload must not be static." }, - Function_implementation_name_must_be_0: { code: 2389, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, - Constructor_implementation_is_missing: { code: 2390, category: 1 /* Error */, key: "Constructor implementation is missing." }, - Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, - Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, - Duplicate_function_implementation: { code: 2393, category: 1 /* Error */, key: "Duplicate function implementation." }, - Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, - Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, - Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, - Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, - Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, - Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, - Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, - Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, - The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, - The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, - Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, - The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, - Setters_cannot_return_a_value: { code: 2408, category: 1 /* Error */, key: "Setters cannot return a value." }, - Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, - All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, - Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, - Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, - Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, - Class_name_cannot_be_0: { code: 2414, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, - Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, - Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, - Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, - Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, - A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1 /* Error */, key: "A class may only implement another class or interface." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, - Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, - Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1 /* Error */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, - Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1 /* Error */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, - Interface_name_cannot_be_0: { code: 2427, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, - All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, - Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, - Enum_name_cannot_be_0: { code: 2431, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, - In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, - A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, - A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, - Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, - Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, - Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, - Import_name_cannot_be_0: { code: 2438, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, - Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, - Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, - Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: 1 /* Error */, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." }, - Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: 1 /* Error */, key: "Types have separate declarations of a private property '{0}'." }, - Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: 1 /* Error */, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." }, - 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." }, - Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1 /* Error */, key: "Block-scoped variable '{0}' used before its declaration.", isEarly: true }, - The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1 /* Error */, key: "The operand of an increment or decrement operator cannot be a constant.", isEarly: true }, - Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1 /* Error */, key: "Left-hand side of assignment expression cannot be a constant.", isEarly: true }, - Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1 /* Error */, key: "Cannot redeclare block-scoped variable '{0}'.", isEarly: true }, - An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: 1 /* Error */, key: "An enum member cannot have a numeric name." }, - The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: 1 /* Error */, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, - Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1 /* Error */, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, - Type_alias_0_circularly_references_itself: { code: 2456, category: 1 /* Error */, key: "Type alias '{0}' circularly references itself." }, - Type_alias_name_cannot_be_0: { code: 2457, category: 1 /* Error */, key: "Type alias name cannot be '{0}'" }, - An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: 1 /* Error */, key: "An AMD module cannot have multiple name assignments." }, - Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: 1 /* Error */, key: "Type '{0}' has no property '{1}' and no string index signature." }, - Type_0_has_no_property_1: { code: 2460, category: 1 /* Error */, key: "Type '{0}' has no property '{1}'." }, - Type_0_is_not_an_array_type: { code: 2461, category: 1 /* Error */, key: "Type '{0}' is not an array type." }, - A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: 1 /* Error */, key: "A rest element must be last in an array destructuring pattern" }, - A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: 1 /* Error */, key: "A binding pattern parameter cannot be optional in an implementation signature." }, - A_computed_property_name_must_be_of_type_string_number_or_any: { code: 2464, category: 1 /* Error */, key: "A computed property name must be of type 'string', 'number', or 'any'." }, - this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: 1 /* Error */, key: "'this' cannot be referenced in a computed property name." }, - super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: 1 /* Error */, key: "'super' cannot be referenced in a computed property name." }, - A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2466, category: 1 /* Error */, key: "A computed property name cannot reference a type parameter from its containing type." }, - 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_private_name_1: { code: 4002, category: 1 /* 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_private_name_1: { code: 4004, category: 1 /* 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_private_name_1: { code: 4006, category: 1 /* 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_private_name_1: { code: 4008, category: 1 /* 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_private_name_1: { code: 4010, category: 1 /* 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_private_name_1: { code: 4012, category: 1 /* 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_private_name_1: { code: 4014, category: 1 /* 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_private_name_1: { code: 4016, category: 1 /* 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_private_name_1: { code: 4019, category: 1 /* 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: 1 /* 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_private_name_1: { code: 4022, category: 1 /* 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: 1 /* 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: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, - Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1 /* Error */, key: "Exported variable '{0}' has or is using private name '{1}'." }, - Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, - Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, - Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, - Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, - Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, - Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, - Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using private name '{0}'." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, - Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1 /* Error */, key: "Return type of public method from exported class has or is using private name '{0}'." }, - Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1 /* Error */, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, - Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1 /* Error */, key: "Return type of method from exported interface has or is using private name '{0}'." }, - Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, - Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, - Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1 /* Error */, key: "Return type of exported function has or is using private name '{0}'." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, - Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, - Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, - Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1 /* 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: 1 /* 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: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, - Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: 1 /* 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: 1 /* Error */, key: "Enum declarations must all be const or non-const." }, - In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: 1 /* Error */, key: "In 'const' enum declarations member initializer must be constant expression.", isEarly: true }, - const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 4084, category: 1 /* Error */, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, - A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: 1 /* Error */, key: "A const enum member can only be accessed using a string literal.", isEarly: true }, - const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 4086, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to a non-finite value." }, - const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 4087, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, - Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: 1 /* Error */, key: "Property '{0}' does not exist on 'const' enum '{1}'.", isEarly: true }, - The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." }, - Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, - Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, - Unsupported_file_encoding: { code: 5013, category: 1 /* Error */, key: "Unsupported file encoding." }, - Unknown_compiler_option_0: { code: 5023, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, - Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: 1 /* Error */, key: "Compiler option '{0}' requires a value of type {1}." }, - Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, - Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option 'mapRoot' cannot be specified without specifying 'sourcemap' option." }, - Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option 'sourceRoot' cannot be specified without specifying 'sourcemap' option." }, - Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: 1 /* Error */, key: "Option 'noEmit' cannot be specified with option 'out' or 'outDir'." }, - Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: 1 /* Error */, key: "Option 'noEmit' cannot be specified with option 'declaration'." }, - Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: 1 /* Error */, key: "Option 'project' cannot be mixed with source files on a command line." }, - Concatenate_and_emit_output_to_single_file: { code: 6001, category: 2 /* Message */, key: "Concatenate and emit output to single file." }, - Generates_corresponding_d_ts_file: { code: 6002, category: 2 /* Message */, key: "Generates corresponding '.d.ts' file." }, - Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: 2 /* Message */, key: "Specifies the location where debugger should locate map files instead of generated locations." }, - Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: 2 /* Message */, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." }, - Watch_input_files: { code: 6005, category: 2 /* Message */, key: "Watch input files." }, - Redirect_output_structure_to_the_directory: { code: 6006, category: 2 /* Message */, key: "Redirect output structure to the directory." }, - Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: 2 /* Message */, key: "Do not erase const enum declarations in generated code." }, - Do_not_emit_outputs_if_any_type_checking_errors_were_reported: { code: 6008, category: 2 /* Message */, key: "Do not emit outputs if any type checking errors were reported." }, - Do_not_emit_comments_to_output: { code: 6009, category: 2 /* Message */, key: "Do not emit comments to output." }, - Do_not_emit_outputs: { code: 6010, category: 2 /* Message */, key: "Do not emit outputs." }, - Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: 2 /* Message */, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" }, - Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2 /* Message */, key: "Specify module code generation: 'commonjs' or 'amd'" }, - Print_this_message: { code: 6017, category: 2 /* Message */, key: "Print this message." }, - Print_the_compiler_s_version: { code: 6019, category: 2 /* Message */, key: "Print the compiler's version." }, - Compile_the_project_in_the_given_directory: { code: 6020, category: 2 /* Message */, key: "Compile the project in the given directory." }, - Syntax_Colon_0: { code: 6023, category: 2 /* Message */, key: "Syntax: {0}" }, - options: { code: 6024, category: 2 /* Message */, key: "options" }, - file: { code: 6025, category: 2 /* Message */, key: "file" }, - Examples_Colon_0: { code: 6026, category: 2 /* Message */, key: "Examples: {0}" }, - Options_Colon: { code: 6027, category: 2 /* Message */, key: "Options:" }, - Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, - Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2 /* Message */, key: "Insert command line options and files from a file." }, - File_change_detected_Starting_incremental_compilation: { code: 6032, category: 2 /* Message */, key: "File change detected. Starting incremental compilation..." }, - KIND: { code: 6034, category: 2 /* Message */, key: "KIND" }, - FILE: { code: 6035, category: 2 /* Message */, key: "FILE" }, - VERSION: { code: 6036, category: 2 /* Message */, key: "VERSION" }, - LOCATION: { code: 6037, category: 2 /* Message */, key: "LOCATION" }, - DIRECTORY: { code: 6038, category: 2 /* Message */, key: "DIRECTORY" }, - Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2 /* Message */, key: "Compilation complete. Watching for file changes." }, - Generates_corresponding_map_file: { code: 6043, category: 2 /* Message */, key: "Generates corresponding '.map' file." }, - Compiler_option_0_expects_an_argument: { code: 6044, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, - Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, - Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, - Argument_for_target_option_must_be_es3_es5_or_es6: { code: 6047, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3', 'es5', or 'es6'." }, - Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, - Unsupported_locale_0: { code: 6049, category: 1 /* Error */, key: "Unsupported locale '{0}'." }, - Unable_to_open_file_0: { code: 6050, category: 1 /* Error */, key: "Unable to open file '{0}'." }, - Corrupted_locale_file_0: { code: 6051, category: 1 /* Error */, key: "Corrupted locale file {0}." }, - Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2 /* Message */, key: "Raise error on expressions and declarations with an implied 'any' type." }, - File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." }, - File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, - Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: 2 /* Message */, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." }, - Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, - Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, - Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, - new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1 /* Error */, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, - _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, - Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, - Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, - Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, - Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, - Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, - Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, - _0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 7021, category: 1 /* Error */, key: "'{0}' implicitly has type 'any' because it is referenced directly or indirectly in its own type annotation." }, - _0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: 1 /* Error */, key: "'{0}' implicitly has type 'any' because it is does not have a type annotation and is referenced directly or indirectly in its own initializer." }, - _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: 1 /* Error */, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, - Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: 1 /* Error */, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, - You_cannot_rename_this_element: { code: 8000, category: 1 /* Error */, key: "You cannot rename this element." }, - yield_expressions_are_not_currently_supported: { code: 9000, category: 1 /* Error */, key: "'yield' expressions are not currently supported.", isEarly: true }, - Generators_are_not_currently_supported: { code: 9001, category: 1 /* Error */, key: "Generators are not currently supported.", isEarly: true } + Unterminated_string_literal: { code: 1002, category: 1, key: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: 1, key: "Identifier expected." }, + _0_expected: { code: 1005, category: 1, key: "'{0}' expected." }, + A_file_cannot_have_a_reference_to_itself: { code: 1006, category: 1, key: "A file cannot have a reference to itself." }, + Trailing_comma_not_allowed: { code: 1009, category: 1, key: "Trailing comma not allowed." }, + Asterisk_Slash_expected: { code: 1010, category: 1, key: "'*/' expected." }, + Unexpected_token: { code: 1012, category: 1, key: "Unexpected token." }, + Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1, key: "Catch clause parameter cannot have a type annotation." }, + A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1, key: "A rest parameter must be last in a parameter list." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1, key: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1, key: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1, key: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1, key: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1, key: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1, key: "An index signature parameter cannot have an initializer." }, + An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1, key: "An index signature must have a type annotation." }, + An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1, key: "An index signature parameter must have a type annotation." }, + An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1, key: "An index signature parameter type must be 'string' or 'number'." }, + A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1, key: "A class or interface declaration can only have one 'extends' clause." }, + An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1, key: "An 'extends' clause must precede an 'implements' clause." }, + A_class_can_only_extend_a_single_class: { code: 1026, category: 1, key: "A class can only extend a single class." }, + A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1, key: "A class declaration can only have one 'implements' clause." }, + Accessibility_modifier_already_seen: { code: 1028, category: 1, key: "Accessibility modifier already seen." }, + _0_modifier_must_precede_1_modifier: { code: 1029, category: 1, key: "'{0}' modifier must precede '{1}' modifier." }, + _0_modifier_already_seen: { code: 1030, category: 1, key: "'{0}' modifier already seen." }, + _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1, key: "'{0}' modifier cannot appear on a class element." }, + An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1, key: "An interface declaration cannot have an 'implements' clause." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1, key: "'super' must be followed by an argument list or member access." }, + Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1, key: "Only ambient modules can use quoted names." }, + Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1, key: "Statements are not allowed in ambient contexts." }, + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1, key: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1, key: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1, key: "'{0}' modifier cannot appear on a module element." }, + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1, key: "A 'declare' modifier cannot be used with an interface declaration." }, + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: 1, key: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1, key: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1, key: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1, key: "A 'set' accessor cannot have an optional parameter." }, + A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1, key: "A 'set' accessor parameter cannot have an initializer." }, + A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1, key: "A 'set' accessor cannot have rest parameter." }, + A_get_accessor_cannot_have_parameters: { code: 1054, category: 1, key: "A 'get' accessor cannot have parameters." }, + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, + Enum_member_must_have_initializer: { code: 1061, category: 1, key: "Enum member must have initializer." }, + An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1, key: "An export assignment cannot be used in an internal module." }, + Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1, key: "Ambient enum elements can only have integer literal initializers." }, + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, + A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1, key: "A 'declare' modifier cannot be used with an import declaration." }, + Invalid_reference_directive_syntax: { code: 1084, category: 1, key: "Invalid 'reference' directive syntax." }, + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1, key: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1, key: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1, key: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1, key: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1, key: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: 1, key: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1, key: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1, key: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: 1, key: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: 1, key: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: 1, key: "Type argument list cannot be empty." }, + Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1, key: "Invalid use of '{0}' in strict mode." }, + with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1, key: "'with' statements are not allowed in strict mode." }, + delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1, key: "'delete' cannot be called on an identifier in strict mode." }, + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, + Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1, key: "Jump target cannot cross function boundary." }, + A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1, key: "A 'return' statement can only be used within a function body." }, + Expression_expected: { code: 1109, category: 1, key: "Expression expected." }, + Type_expected: { code: 1110, category: 1, key: "Type expected." }, + A_class_member_cannot_be_declared_optional: { code: 1112, category: 1, key: "A class member cannot be declared optional." }, + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, + Duplicate_label_0: { code: 1114, category: 1, key: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1, key: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1, key: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1, key: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1, key: "An object literal cannot have property and accessor with the same name." }, + An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1, key: "An export assignment cannot have modifiers." }, + Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1, key: "Octal literals are not allowed in strict mode." }, + A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1, key: "A tuple type element list cannot be empty." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: 1, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: 1, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: 1, key: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: 1, key: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: 1, key: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: 1, key: "Statement expected." }, + case_or_default_expected: { code: 1130, category: 1, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: 1, key: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: 1, key: "Enum member expected." }, + Type_reference_expected: { code: 1133, category: 1, key: "Type reference expected." }, + Variable_declaration_expected: { code: 1134, category: 1, key: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: 1, key: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: 1, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: 1, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: 1, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: 1, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: 1, key: "Type argument expected." }, + String_literal_expected: { code: 1141, category: 1, key: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: 1, key: "Line break not permitted here." }, + or_expected: { code: 1144, category: 1, key: "'{' or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1, key: "Modifiers not permitted on index signature members." }, + Declaration_expected: { code: 1146, category: 1, key: "Declaration expected." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1, key: "Import declarations in an internal module cannot reference an external module." }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1, key: "Cannot compile external modules unless the '--module' flag is provided." }, + File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: 1, key: "File name '{0}' differs from already included file name '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + var_let_or_const_expected: { code: 1152, category: 1, key: "'var', 'let' or 'const' expected." }, + let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." }, + const_declarations_must_be_initialized: { code: 1155, category: 1, key: "'const' declarations must be initialized" }, + const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1, key: "'const' declarations can only be declared inside a block." }, + let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1, key: "'let' declarations can only be declared inside a block." }, + Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: 1, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." }, + Unterminated_template_literal: { code: 1160, category: 1, key: "Unterminated template literal." }, + Unterminated_regular_expression_literal: { code: 1161, category: 1, key: "Unterminated regular expression literal." }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: 1, key: "An object member cannot be declared optional." }, + yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: 1, key: "'yield' expression must be contained_within a generator declaration." }, + Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: 1, key: "Computed property names are not allowed in enums." }, + Computed_property_names_are_not_allowed_in_an_ambient_context: { code: 1165, category: 1, key: "Computed property names are not allowed in an ambient context." }, + Computed_property_names_are_not_allowed_in_class_property_declarations: { code: 1166, category: 1, key: "Computed property names are not allowed in class property declarations." }, + Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: 1, key: "Computed property names are only available when targeting ECMAScript 6 and higher." }, + Computed_property_names_are_not_allowed_in_method_overloads: { code: 1168, category: 1, key: "Computed property names are not allowed in method overloads." }, + Computed_property_names_are_not_allowed_in_interfaces: { code: 1169, category: 1, key: "Computed property names are not allowed in interfaces." }, + Computed_property_names_are_not_allowed_in_type_literals: { code: 1170, category: 1, key: "Computed property names are not allowed in type literals." }, + A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: 1, key: "A comma expression is not allowed in a computed property name." }, + extends_clause_already_seen: { code: 1172, category: 1, key: "'extends' clause already seen." }, + extends_clause_must_precede_implements_clause: { code: 1173, category: 1, key: "'extends' clause must precede 'implements' clause." }, + Classes_can_only_extend_a_single_class: { code: 1174, category: 1, key: "Classes can only extend a single class." }, + implements_clause_already_seen: { code: 1175, category: 1, key: "'implements' clause already seen." }, + Interface_declaration_cannot_have_implements_clause: { code: 1176, category: 1, key: "Interface declaration cannot have 'implements' clause." }, + Binary_digit_expected: { code: 1177, category: 1, key: "Binary digit expected." }, + Octal_digit_expected: { code: 1178, category: 1, key: "Octal digit expected." }, + Unexpected_token_expected: { code: 1179, category: 1, key: "Unexpected token. '{' expected." }, + Property_destructuring_pattern_expected: { code: 1180, category: 1, key: "Property destructuring pattern expected." }, + Array_element_destructuring_pattern_expected: { code: 1181, category: 1, key: "Array element destructuring pattern expected." }, + A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: 1, key: "A destructuring declaration must have an initializer." }, + Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: 1, key: "Destructuring declarations are not allowed in ambient contexts." }, + An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: 1, key: "An implementation cannot be declared in ambient contexts." }, + Modifiers_cannot_appear_here: { code: 1184, category: 1, key: "Modifiers cannot appear here." }, + Merge_conflict_marker_encountered: { code: 1185, category: 1, key: "Merge conflict marker encountered." }, + A_rest_element_cannot_have_an_initializer: { code: 1186, category: 1, key: "A rest element cannot have an initializer." }, + A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: 1, key: "A parameter property may not be a binding pattern." }, + Duplicate_identifier_0: { code: 2300, category: 1, key: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1, 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, key: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: 1, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: 1, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: 1, key: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_an_external_module: { code: 2306, category: 1, key: "File '{0}' is not an external module." }, + Cannot_find_external_module_0: { code: 2307, category: 1, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1, key: "A module cannot have more than one export assignment." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1, key: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: 1, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1, key: "An interface may only extend a class or another interface." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: 1, key: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1, key: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: 1, key: "Cannot find global type '{0}'." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: 1, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1: { code: 2322, category: 1, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: 1, key: "Property '{0}' is missing in type '{1}'." }, + Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: 1, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." }, + Types_of_property_0_are_incompatible: { code: 2326, category: 1, key: "Types of property '{0}' are incompatible." }, + Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: 1, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." }, + Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: 1, key: "Types of parameters '{0}' and '{1}' are incompatible." }, + Index_signature_is_missing_in_type_0: { code: 2329, category: 1, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible: { code: 2330, category: 1, key: "Index signatures are incompatible." }, + this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: 1, key: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1, key: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1, key: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1, key: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1, key: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: 1, key: "Property '{0}' does not exist on type '{1}'." }, + Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1, key: "Only public and protected methods of the base class are accessible via the 'super' keyword" }, + Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: 1, key: "Property '{0}' is private and only accessible within class '{1}'." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1, key: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1, key: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1, key: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1, key: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: 1, key: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1, key: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: 1, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: 1, key: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1, key: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1, key: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1, key: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1, key: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: 1, key: "Overload signatures must all be public, private or protected." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1, key: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: 1, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: 1, key: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: 1, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: 1, key: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1, key: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1, key: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: 1, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1, key: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1, key: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: 1, key: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1, key: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: 1, key: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1, key: "Class '{0}' incorrectly implements interface '{1}'." }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1, key: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: 1, key: "Interface name cannot be '{0}'" }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1, key: "All declarations of an interface must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: 1, key: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1, key: "Ambient external modules cannot be nested in other modules." }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1, key: "Ambient external module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: 1, key: "Import name cannot be '{0}'" }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1, key: "Import declaration conflicts with local declaration of '{0}'" }, + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: 1, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." }, + Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: 1, key: "Types have separate declarations of a private property '{0}'." }, + Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: 1, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." }, + Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: 1, 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, 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, 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, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, + Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1, key: "Block-scoped variable '{0}' used before its declaration." }, + The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1, key: "The operand of an increment or decrement operator cannot be a constant." }, + Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1, key: "Left-hand side of assignment expression cannot be a constant." }, + Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1, key: "Cannot redeclare block-scoped variable '{0}'." }, + An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: 1, key: "An enum member cannot have a numeric name." }, + The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: 1, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, + Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, + Type_alias_0_circularly_references_itself: { code: 2456, category: 1, key: "Type alias '{0}' circularly references itself." }, + Type_alias_name_cannot_be_0: { code: 2457, category: 1, key: "Type alias name cannot be '{0}'" }, + An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: 1, key: "An AMD module cannot have multiple name assignments." }, + Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: 1, key: "Type '{0}' has no property '{1}' and no string index signature." }, + Type_0_has_no_property_1: { code: 2460, category: 1, key: "Type '{0}' has no property '{1}'." }, + Type_0_is_not_an_array_type: { code: 2461, category: 1, key: "Type '{0}' is not an array type." }, + A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: 1, key: "A rest element must be last in an array destructuring pattern" }, + A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: 1, key: "A binding pattern parameter cannot be optional in an implementation signature." }, + A_computed_property_name_must_be_of_type_string_number_or_any: { code: 2464, category: 1, key: "A computed property name must be of type 'string', 'number', or 'any'." }, + this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: 1, key: "'this' cannot be referenced in a computed property name." }, + super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: 1, key: "'super' cannot be referenced in a computed property name." }, + A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2466, category: 1, key: "A computed property name cannot reference a type parameter from its containing type." }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1, key: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1, 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_private_name_1: { code: 4006, category: 1, 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_private_name_1: { code: 4008, category: 1, 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_private_name_1: { code: 4010, category: 1, 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_private_name_1: { code: 4012, category: 1, 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_private_name_1: { code: 4014, category: 1, 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_private_name_1: { code: 4016, category: 1, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1, 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: 1, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1, 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: 1, 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: 1, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1, key: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1, key: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1, key: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1, key: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1, key: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1, key: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1, key: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1, key: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1, key: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1, key: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1, key: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1, key: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1, 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: 1, 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: 1, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, + Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: 1, key: "Exported type alias '{0}' has or is using private name '{1}'." }, + Enum_declarations_must_all_be_const_or_non_const: { code: 4082, category: 1, key: "Enum declarations must all be const or non-const." }, + In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: 1, key: "In 'const' enum declarations member initializer must be constant expression." }, + const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 4084, category: 1, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, + A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 4085, category: 1, key: "A const enum member can only be accessed using a string literal." }, + const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 4086, category: 1, key: "'const' enum member initializer was evaluated to a non-finite value." }, + const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 4087, category: 1, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, + Property_0_does_not_exist_on_const_enum_1: { code: 4088, category: 1, key: "Property '{0}' does not exist on 'const' enum '{1}'." }, + The_current_host_does_not_support_the_0_option: { code: 5001, category: 1, key: "The current host does not support the '{0}' option." }, + Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1, key: "Cannot find the common subdirectory path for the input files." }, + Cannot_read_file_0_Colon_1: { code: 5012, category: 1, key: "Cannot read file '{0}': {1}" }, + Unsupported_file_encoding: { code: 5013, category: 1, key: "Unsupported file encoding." }, + Unknown_compiler_option_0: { code: 5023, category: 1, key: "Unknown compiler option '{0}'." }, + Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: 1, key: "Compiler option '{0}' requires a value of type {1}." }, + Could_not_write_file_0_Colon_1: { code: 5033, category: 1, key: "Could not write file '{0}': {1}" }, + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1, key: "Option 'mapRoot' cannot be specified without specifying 'sourcemap' option." }, + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1, key: "Option 'sourceRoot' cannot be specified without specifying 'sourcemap' option." }, + Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: 1, key: "Option 'noEmit' cannot be specified with option 'out' or 'outDir'." }, + Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: 1, key: "Option 'noEmit' cannot be specified with option 'declaration'." }, + Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: 1, key: "Option 'project' cannot be mixed with source files on a command line." }, + Concatenate_and_emit_output_to_single_file: { code: 6001, category: 2, key: "Concatenate and emit output to single file." }, + Generates_corresponding_d_ts_file: { code: 6002, category: 2, key: "Generates corresponding '.d.ts' file." }, + Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: 2, key: "Specifies the location where debugger should locate map files instead of generated locations." }, + Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: 2, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." }, + Watch_input_files: { code: 6005, category: 2, key: "Watch input files." }, + Redirect_output_structure_to_the_directory: { code: 6006, category: 2, key: "Redirect output structure to the directory." }, + Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: 2, key: "Do not erase const enum declarations in generated code." }, + Do_not_emit_outputs_if_any_type_checking_errors_were_reported: { code: 6008, category: 2, key: "Do not emit outputs if any type checking errors were reported." }, + Do_not_emit_comments_to_output: { code: 6009, category: 2, key: "Do not emit comments to output." }, + Do_not_emit_outputs: { code: 6010, category: 2, key: "Do not emit outputs." }, + Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: 2, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" }, + Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2, key: "Specify module code generation: 'commonjs' or 'amd'" }, + Print_this_message: { code: 6017, category: 2, key: "Print this message." }, + Print_the_compiler_s_version: { code: 6019, category: 2, key: "Print the compiler's version." }, + Compile_the_project_in_the_given_directory: { code: 6020, category: 2, key: "Compile the project in the given directory." }, + Syntax_Colon_0: { code: 6023, category: 2, key: "Syntax: {0}" }, + options: { code: 6024, category: 2, key: "options" }, + file: { code: 6025, category: 2, key: "file" }, + Examples_Colon_0: { code: 6026, category: 2, key: "Examples: {0}" }, + Options_Colon: { code: 6027, category: 2, key: "Options:" }, + Version_0: { code: 6029, category: 2, key: "Version {0}" }, + Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2, key: "Insert command line options and files from a file." }, + File_change_detected_Starting_incremental_compilation: { code: 6032, category: 2, key: "File change detected. Starting incremental compilation..." }, + KIND: { code: 6034, category: 2, key: "KIND" }, + FILE: { code: 6035, category: 2, key: "FILE" }, + VERSION: { code: 6036, category: 2, key: "VERSION" }, + LOCATION: { code: 6037, category: 2, key: "LOCATION" }, + DIRECTORY: { code: 6038, category: 2, key: "DIRECTORY" }, + Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2, key: "Compilation complete. Watching for file changes." }, + Generates_corresponding_map_file: { code: 6043, category: 2, key: "Generates corresponding '.map' file." }, + Compiler_option_0_expects_an_argument: { code: 6044, category: 1, key: "Compiler option '{0}' expects an argument." }, + Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1, key: "Unterminated quoted string in response file '{0}'." }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_es5_or_es6: { code: 6047, category: 1, key: "Argument for '--target' option must be 'es3', 'es5', or 'es6'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: 1, key: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: 1, key: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: 1, key: "Corrupted locale file {0}." }, + Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2, key: "Raise error on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: 1, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, + Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: 2, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." }, + Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: 2, key: "Do not emit declarations for code that has an '@internal' annotation." }, + Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1, key: "Variable '{0}' implicitly has an '{1}' type." }, + Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1, key: "Parameter '{0}' implicitly has an '{1}' type." }, + Member_0_implicitly_has_an_1_type: { code: 7008, category: 1, key: "Member '{0}' implicitly has an '{1}' type." }, + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, + Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1, key: "Index signature of object type implicitly has an 'any' type." }, + Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, + Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + _0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 7021, category: 1, key: "'{0}' implicitly has type 'any' because it is referenced directly or indirectly in its own type annotation." }, + _0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: 1, key: "'{0}' implicitly has type 'any' because it is does not have a type annotation and is referenced directly or indirectly in its own initializer." }, + _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: 1, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, + Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: 1, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, + You_cannot_rename_this_element: { code: 8000, category: 1, key: "You cannot rename this element." }, + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: 1, key: "You cannot rename elements that are defined in the standard TypeScript library." }, + yield_expressions_are_not_currently_supported: { code: 9000, category: 1, key: "'yield' expressions are not currently supported." }, + Generators_are_not_currently_supported: { code: 9001, category: 1, key: "Generators are not currently supported." }, + The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression: { code: 9002, category: 1, key: "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression." } }; })(ts || (ts = {})); var ts; (function (ts) { var textToToken = { - "any": 110 /* AnyKeyword */, - "boolean": 111 /* BooleanKeyword */, - "break": 65 /* BreakKeyword */, - "case": 66 /* CaseKeyword */, - "catch": 67 /* CatchKeyword */, - "class": 68 /* ClassKeyword */, - "continue": 70 /* ContinueKeyword */, - "const": 69 /* ConstKeyword */, - "constructor": 112 /* ConstructorKeyword */, - "debugger": 71 /* DebuggerKeyword */, - "declare": 113 /* DeclareKeyword */, - "default": 72 /* DefaultKeyword */, - "delete": 73 /* DeleteKeyword */, - "do": 74 /* DoKeyword */, - "else": 75 /* ElseKeyword */, - "enum": 76 /* EnumKeyword */, - "export": 77 /* ExportKeyword */, - "extends": 78 /* ExtendsKeyword */, - "false": 79 /* FalseKeyword */, - "finally": 80 /* FinallyKeyword */, - "for": 81 /* ForKeyword */, - "function": 82 /* FunctionKeyword */, - "get": 114 /* GetKeyword */, - "if": 83 /* IfKeyword */, - "implements": 101 /* ImplementsKeyword */, - "import": 84 /* ImportKeyword */, - "in": 85 /* InKeyword */, - "instanceof": 86 /* InstanceOfKeyword */, - "interface": 102 /* InterfaceKeyword */, - "let": 103 /* LetKeyword */, - "module": 115 /* ModuleKeyword */, - "new": 87 /* NewKeyword */, - "null": 88 /* NullKeyword */, - "number": 117 /* NumberKeyword */, - "package": 104 /* PackageKeyword */, - "private": 105 /* PrivateKeyword */, - "protected": 106 /* ProtectedKeyword */, - "public": 107 /* PublicKeyword */, - "require": 116 /* RequireKeyword */, - "return": 89 /* ReturnKeyword */, - "set": 118 /* SetKeyword */, - "static": 108 /* StaticKeyword */, - "string": 119 /* StringKeyword */, - "super": 90 /* SuperKeyword */, - "switch": 91 /* SwitchKeyword */, - "this": 92 /* ThisKeyword */, - "throw": 93 /* ThrowKeyword */, - "true": 94 /* TrueKeyword */, - "try": 95 /* TryKeyword */, - "type": 120 /* TypeKeyword */, - "typeof": 96 /* TypeOfKeyword */, - "var": 97 /* VarKeyword */, - "void": 98 /* VoidKeyword */, - "while": 99 /* WhileKeyword */, - "with": 100 /* WithKeyword */, - "yield": 109 /* YieldKeyword */, - "{": 14 /* OpenBraceToken */, - "}": 15 /* CloseBraceToken */, - "(": 16 /* OpenParenToken */, - ")": 17 /* CloseParenToken */, - "[": 18 /* OpenBracketToken */, - "]": 19 /* CloseBracketToken */, - ".": 20 /* DotToken */, - "...": 21 /* DotDotDotToken */, - ";": 22 /* SemicolonToken */, - ",": 23 /* CommaToken */, - "<": 24 /* LessThanToken */, - ">": 25 /* GreaterThanToken */, - "<=": 26 /* LessThanEqualsToken */, - ">=": 27 /* GreaterThanEqualsToken */, - "==": 28 /* EqualsEqualsToken */, - "!=": 29 /* ExclamationEqualsToken */, - "===": 30 /* EqualsEqualsEqualsToken */, - "!==": 31 /* ExclamationEqualsEqualsToken */, - "=>": 32 /* EqualsGreaterThanToken */, - "+": 33 /* PlusToken */, - "-": 34 /* MinusToken */, - "*": 35 /* AsteriskToken */, - "/": 36 /* SlashToken */, - "%": 37 /* PercentToken */, - "++": 38 /* PlusPlusToken */, - "--": 39 /* MinusMinusToken */, - "<<": 40 /* LessThanLessThanToken */, - ">>": 41 /* GreaterThanGreaterThanToken */, - ">>>": 42 /* GreaterThanGreaterThanGreaterThanToken */, - "&": 43 /* AmpersandToken */, - "|": 44 /* BarToken */, - "^": 45 /* CaretToken */, - "!": 46 /* ExclamationToken */, - "~": 47 /* TildeToken */, - "&&": 48 /* AmpersandAmpersandToken */, - "||": 49 /* BarBarToken */, - "?": 50 /* QuestionToken */, - ":": 51 /* ColonToken */, - "=": 52 /* EqualsToken */, - "+=": 53 /* PlusEqualsToken */, - "-=": 54 /* MinusEqualsToken */, - "*=": 55 /* AsteriskEqualsToken */, - "/=": 56 /* SlashEqualsToken */, - "%=": 57 /* PercentEqualsToken */, - "<<=": 58 /* LessThanLessThanEqualsToken */, - ">>=": 59 /* GreaterThanGreaterThanEqualsToken */, - ">>>=": 60 /* GreaterThanGreaterThanGreaterThanEqualsToken */, - "&=": 61 /* AmpersandEqualsToken */, - "|=": 62 /* BarEqualsToken */, - "^=": 63 /* CaretEqualsToken */ + "any": 110, + "boolean": 111, + "break": 65, + "case": 66, + "catch": 67, + "class": 68, + "continue": 70, + "const": 69, + "constructor": 112, + "debugger": 71, + "declare": 113, + "default": 72, + "delete": 73, + "do": 74, + "else": 75, + "enum": 76, + "export": 77, + "extends": 78, + "false": 79, + "finally": 80, + "for": 81, + "function": 82, + "get": 114, + "if": 83, + "implements": 101, + "import": 84, + "in": 85, + "instanceof": 86, + "interface": 102, + "let": 103, + "module": 115, + "new": 87, + "null": 88, + "number": 117, + "package": 104, + "private": 105, + "protected": 106, + "public": 107, + "require": 116, + "return": 89, + "set": 118, + "static": 108, + "string": 119, + "super": 90, + "switch": 91, + "this": 92, + "throw": 93, + "true": 94, + "try": 95, + "type": 120, + "typeof": 96, + "var": 97, + "void": 98, + "while": 99, + "with": 100, + "yield": 109, + "{": 14, + "}": 15, + "(": 16, + ")": 17, + "[": 18, + "]": 19, + ".": 20, + "...": 21, + ";": 22, + ",": 23, + "<": 24, + ">": 25, + "<=": 26, + ">=": 27, + "==": 28, + "!=": 29, + "===": 30, + "!==": 31, + "=>": 32, + "+": 33, + "-": 34, + "*": 35, + "/": 36, + "%": 37, + "++": 38, + "--": 39, + "<<": 40, + ">>": 41, + ">>>": 42, + "&": 43, + "|": 44, + "^": 45, + "!": 46, + "~": 47, + "&&": 48, + "||": 49, + "?": 50, + ":": 51, + "=": 52, + "+=": 53, + "-=": 54, + "*=": 55, + "/=": 56, + "%=": 57, + "<<=": 58, + ">>=": 59, + ">>>=": 60, + "&=": 61, + "|=": 62, + "^=": 63 }; 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,]; @@ -2030,10 +2031,10 @@ var ts; return false; } function isUnicodeIdentifierStart(code, languageVersion) { - return languageVersion >= 1 /* ES5 */ ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) : lookupInUnicodeMap(code, unicodeES3IdentifierStart); + return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) : lookupInUnicodeMap(code, unicodeES3IdentifierStart); } function isUnicodeIdentifierPart(code, languageVersion) { - return languageVersion >= 1 /* ES5 */ ? lookupInUnicodeMap(code, unicodeES5IdentifierPart) : lookupInUnicodeMap(code, unicodeES3IdentifierPart); + return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierPart) : lookupInUnicodeMap(code, unicodeES3IdentifierPart); } function makeReverseMap(source) { var result = []; @@ -2056,16 +2057,16 @@ var ts; while (pos < text.length) { var ch = text.charCodeAt(pos++); switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos) === 10 /* lineFeed */) { + case 13: + if (text.charCodeAt(pos) === 10) { pos++; } - case 10 /* lineFeed */: + case 10: result.push(lineStart); lineStart = pos; break; default: - if (ch > 127 /* maxAsciiCharacter */ && isLineBreak(ch)) { + if (ch > 127 && isLineBreak(ch)) { result.push(lineStart); lineStart = pos; } @@ -2076,12 +2077,20 @@ var ts; return result; } ts.computeLineStarts = computeLineStarts; - function getPositionFromLineAndCharacter(lineStarts, line, character) { + function getPositionFromLineAndCharacter(sourceFile, line, character) { + return computePositionFromLineAndCharacter(getLineStarts(sourceFile), line, character); + } + ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; + function computePositionFromLineAndCharacter(lineStarts, line, character) { ts.Debug.assert(line > 0 && line <= lineStarts.length); return lineStarts[line - 1] + character - 1; } - ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter; - function getLineAndCharacterOfPosition(lineStarts, position) { + ts.computePositionFromLineAndCharacter = computePositionFromLineAndCharacter; + function getLineStarts(sourceFile) { + return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); + } + ts.getLineStarts = getLineStarts; + function computeLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position); if (lineNumber < 0) { lineNumber = (~lineNumber) - 1; @@ -2091,50 +2100,49 @@ var ts; character: position - lineStarts[lineNumber] + 1 }; } - ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; - function positionToLineAndCharacter(text, pos) { - var lineStarts = computeLineStarts(text); - return getLineAndCharacterOfPosition(lineStarts, pos); + ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition; + function getLineAndCharacterOfPosition(sourceFile, position) { + return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); } - ts.positionToLineAndCharacter = positionToLineAndCharacter; + ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { - return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; + return ch === 32 || ch === 9 || ch === 11 || ch === 12 || ch === 160 || ch === 5760 || ch >= 8192 && ch <= 8203 || ch === 8239 || ch === 8287 || ch === 12288 || ch === 65279; } ts.isWhiteSpace = isWhiteSpace; function isLineBreak(ch) { - return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */ || ch === 133 /* nextLine */; + return ch === 10 || ch === 13 || ch === 8232 || ch === 8233 || ch === 133; } ts.isLineBreak = isLineBreak; function isDigit(ch) { - return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; + return ch >= 48 && ch <= 57; } function isOctalDigit(ch) { - return ch >= 48 /* _0 */ && ch <= 55 /* _7 */; + return ch >= 48 && ch <= 55; } ts.isOctalDigit = isOctalDigit; function skipTrivia(text, pos, stopAfterLineBreak) { while (true) { var ch = text.charCodeAt(pos); switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + case 13: + if (text.charCodeAt(pos + 1) === 10) { pos++; } - case 10 /* lineFeed */: + case 10: pos++; if (stopAfterLineBreak) { return pos; } continue; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: pos++; continue; - case 47 /* slash */: - if (text.charCodeAt(pos + 1) === 47 /* slash */) { + case 47: + if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { @@ -2144,10 +2152,10 @@ var ts; } continue; } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + if (text.charCodeAt(pos + 1) === 42) { pos += 2; while (pos < text.length) { - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } @@ -2156,16 +2164,16 @@ var ts; continue; } break; - case 60 /* lessThan */: - case 61 /* equals */: - case 62 /* greaterThan */: + case 60: + case 61: + case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos); continue; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { pos++; continue; } @@ -2186,7 +2194,7 @@ var ts; return false; } } - return ch === 61 /* equals */ || text.charCodeAt(pos + mergeConflictMarkerLength) === 32 /* space */; + return ch === 61 || text.charCodeAt(pos + mergeConflictMarkerLength) === 32; } } return false; @@ -2197,16 +2205,16 @@ var ts; } var ch = text.charCodeAt(pos); var len = text.length; - if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) { + if (ch === 60 || ch === 62) { while (pos < len && !isLineBreak(text.charCodeAt(pos))) { pos++; } } else { - ts.Debug.assert(ch === 61 /* equals */); + ts.Debug.assert(ch === 61); while (pos < len) { var ch = text.charCodeAt(pos); - if (ch === 62 /* greaterThan */ && isConflictMarkerTrivia(text, pos)) { + if (ch === 62 && isConflictMarkerTrivia(text, pos)) { break; } pos++; @@ -2220,10 +2228,10 @@ var ts; while (true) { var ch = text.charCodeAt(pos); switch (ch) { - case 13 /* carriageReturn */: - if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) + case 13: + if (text.charCodeAt(pos + 1) === 10) pos++; - case 10 /* lineFeed */: + case 10: pos++; if (trailing) { return result; @@ -2233,19 +2241,19 @@ var ts; result[result.length - 1].hasTrailingNewLine = true; } continue; - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: pos++; continue; - case 47 /* slash */: + case 47: var nextChar = text.charCodeAt(pos + 1); var hasTrailingNewLine = false; - if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { + if (nextChar === 47 || nextChar === 42) { var startPos = pos; pos += 2; - if (nextChar === 47 /* slash */) { + if (nextChar === 47) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { hasTrailingNewLine = true; @@ -2256,7 +2264,7 @@ var ts; } else { while (pos < text.length) { - if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } @@ -2272,7 +2280,7 @@ var ts; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { if (result && result.length && isLineBreak(ch)) { result[result.length - 1].hasTrailingNewLine = true; } @@ -2293,11 +2301,11 @@ var ts; } 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); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch === 36 || ch === 95 || ch > 127 && isUnicodeIdentifierStart(ch, languageVersion); } ts.isIdentifierStart = isIdentifierStart; function isIdentifierPart(ch, languageVersion) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); } ts.isIdentifierPart = isIdentifierPart; function createScanner(languageVersion, skipTrivia, text, onError) { @@ -2315,24 +2323,24 @@ var ts; } } function isIdentifierStart(ch) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch === 36 || ch === 95 || ch > 127 && isUnicodeIdentifierStart(ch, languageVersion); } function isIdentifierPart(ch) { - return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); } function scanNumber() { var start = pos; while (isDigit(text.charCodeAt(pos))) pos++; - if (text.charCodeAt(pos) === 46 /* dot */) { + if (text.charCodeAt(pos) === 46) { pos++; while (isDigit(text.charCodeAt(pos))) pos++; } var end = pos; - if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) { + if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) { pos++; - if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) + if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) pos++; if (isDigit(text.charCodeAt(pos))) { pos++; @@ -2358,14 +2366,14 @@ var ts; var value = 0; while (digits < count || !mustMatchCount) { var ch = text.charCodeAt(pos); - if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { - value = value * 16 + ch - 48 /* _0 */; + if (ch >= 48 && ch <= 57) { + value = value * 16 + ch - 48; } - else if (ch >= 65 /* A */ && ch <= 70 /* F */) { - value = value * 16 + ch - 65 /* A */ + 10; + else if (ch >= 65 && ch <= 70) { + value = value * 16 + ch - 65 + 10; } - else if (ch >= 97 /* a */ && ch <= 102 /* f */) { - value = value * 16 + ch - 97 /* a */ + 10; + else if (ch >= 97 && ch <= 102) { + value = value * 16 + ch - 97 + 10; } else { break; @@ -2395,7 +2403,7 @@ var ts; pos++; break; } - if (ch === 92 /* backslash */) { + if (ch === 92) { result += text.substring(start, pos); result += scanEscapeSequence(); start = pos; @@ -2412,7 +2420,7 @@ var ts; return result; } function scanTemplateAndSetTokenValue() { - var startedWithBacktick = text.charCodeAt(pos) === 96 /* backtick */; + var startedWithBacktick = text.charCodeAt(pos) === 96; pos++; var start = pos; var contents = ""; @@ -2422,32 +2430,32 @@ var ts; contents += text.substring(start, pos); tokenIsUnterminated = true; error(ts.Diagnostics.Unterminated_template_literal); - resultingToken = startedWithBacktick ? 10 /* NoSubstitutionTemplateLiteral */ : 13 /* TemplateTail */; + resultingToken = startedWithBacktick ? 10 : 13; break; } var currChar = text.charCodeAt(pos); - if (currChar === 96 /* backtick */) { + if (currChar === 96) { contents += text.substring(start, pos); pos++; - resultingToken = startedWithBacktick ? 10 /* NoSubstitutionTemplateLiteral */ : 13 /* TemplateTail */; + resultingToken = startedWithBacktick ? 10 : 13; break; } - if (currChar === 36 /* $ */ && pos + 1 < len && text.charCodeAt(pos + 1) === 123 /* openBrace */) { + if (currChar === 36 && pos + 1 < len && text.charCodeAt(pos + 1) === 123) { contents += text.substring(start, pos); pos += 2; - resultingToken = startedWithBacktick ? 11 /* TemplateHead */ : 12 /* TemplateMiddle */; + resultingToken = startedWithBacktick ? 11 : 12; break; } - if (currChar === 92 /* backslash */) { + if (currChar === 92) { contents += text.substring(start, pos); contents += scanEscapeSequence(); start = pos; continue; } - if (currChar === 13 /* carriageReturn */) { + if (currChar === 13) { contents += text.substring(start, pos); pos++; - if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) { + if (pos < len && text.charCodeAt(pos) === 10) { pos++; } contents += "\n"; @@ -2468,27 +2476,27 @@ var ts; } var ch = text.charCodeAt(pos++); switch (ch) { - case 48 /* _0 */: + case 48: return "\0"; - case 98 /* b */: + case 98: return "\b"; - case 116 /* t */: + case 116: return "\t"; - case 110 /* n */: + case 110: return "\n"; - case 118 /* v */: + case 118: return "\v"; - case 102 /* f */: + case 102: return "\f"; - case 114 /* r */: + case 114: return "\r"; - case 39 /* singleQuote */: + case 39: return "\'"; - case 34 /* doubleQuote */: + case 34: return "\""; - case 120 /* x */: - case 117 /* u */: - var ch = scanHexDigits(ch === 120 /* x */ ? 2 : 4, true); + case 120: + case 117: + var ch = scanHexDigits(ch === 120 ? 2 : 4, true); if (ch >= 0) { return String.fromCharCode(ch); } @@ -2496,20 +2504,20 @@ var ts; error(ts.Diagnostics.Hexadecimal_digit_expected); return ""; } - case 13 /* carriageReturn */: - if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) { + case 13: + if (pos < len && text.charCodeAt(pos) === 10) { pos++; } - case 10 /* lineFeed */: - case 8232 /* lineSeparator */: - case 8233 /* paragraphSeparator */: + case 10: + case 8232: + case 8233: return ""; default: return String.fromCharCode(ch); } } function peekUnicodeEscape() { - if (pos + 5 < len && text.charCodeAt(pos + 1) === 117 /* u */) { + if (pos + 5 < len && text.charCodeAt(pos + 1) === 117) { var start = pos; pos += 2; var value = scanHexDigits(4, true); @@ -2526,7 +2534,7 @@ var ts; if (isIdentifierPart(ch)) { pos++; } - else if (ch === 92 /* backslash */) { + else if (ch === 92) { ch = peekUnicodeEscape(); if (!(ch >= 0 && isIdentifierPart(ch))) { break; @@ -2547,11 +2555,11 @@ var ts; var len = tokenValue.length; if (len >= 2 && len <= 11) { var ch = tokenValue.charCodeAt(0); - if (ch >= 97 /* a */ && ch <= 122 /* z */ && hasOwnProperty.call(textToToken, tokenValue)) { + if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) { return token = textToToken[tokenValue]; } } - return token = 64 /* Identifier */; + return token = 64; } function scanBinaryOrOctalDigits(base) { ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8"); @@ -2559,7 +2567,7 @@ var ts; var numberOfDigits = 0; while (true) { var ch = text.charCodeAt(pos); - var valueOfCh = ch - 48 /* _0 */; + var valueOfCh = ch - 48; if (!isDigit(ch) || valueOfCh >= base) { break; } @@ -2579,30 +2587,30 @@ var ts; while (true) { tokenPos = pos; if (pos >= len) { - return token = 1 /* EndOfFileToken */; + return token = 1; } var ch = text.charCodeAt(pos); switch (ch) { - case 10 /* lineFeed */: - case 13 /* carriageReturn */: + case 10: + case 13: precedingLineBreak = true; if (skipTrivia) { pos++; continue; } else { - if (ch === 13 /* carriageReturn */ && pos + 1 < len && text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + if (ch === 13 && pos + 1 < len && text.charCodeAt(pos + 1) === 10) { pos += 2; } else { pos++; } - return token = 4 /* NewLineTrivia */; + return token = 4; } - case 9 /* tab */: - case 11 /* verticalTab */: - case 12 /* formFeed */: - case 32 /* space */: + case 9: + case 11: + case 12: + case 32: if (skipTrivia) { pos++; continue; @@ -2611,73 +2619,73 @@ var ts; while (pos < len && isWhiteSpace(text.charCodeAt(pos))) { pos++; } - return token = 5 /* WhitespaceTrivia */; + return token = 5; } - case 33 /* exclamation */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 31 /* ExclamationEqualsEqualsToken */; + case 33: + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 31; } - return pos += 2, token = 29 /* ExclamationEqualsToken */; + return pos += 2, token = 29; } - return pos++, token = 46 /* ExclamationToken */; - case 34 /* doubleQuote */: - case 39 /* singleQuote */: + return pos++, token = 46; + case 34: + case 39: tokenValue = scanString(); - return token = 8 /* StringLiteral */; - case 96 /* backtick */: + return token = 8; + case 96: return token = scanTemplateAndSetTokenValue(); - case 37 /* percent */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 57 /* PercentEqualsToken */; + case 37: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 57; } - return pos++, token = 37 /* PercentToken */; - case 38 /* ampersand */: - if (text.charCodeAt(pos + 1) === 38 /* ampersand */) { - return pos += 2, token = 48 /* AmpersandAmpersandToken */; + return pos++, token = 37; + case 38: + if (text.charCodeAt(pos + 1) === 38) { + return pos += 2, token = 48; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 61 /* AmpersandEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 61; } - return pos++, token = 43 /* AmpersandToken */; - case 40 /* openParen */: - return pos++, token = 16 /* OpenParenToken */; - case 41 /* closeParen */: - return pos++, token = 17 /* CloseParenToken */; - case 42 /* asterisk */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 55 /* AsteriskEqualsToken */; + return pos++, token = 43; + case 40: + return pos++, token = 16; + case 41: + return pos++, token = 17; + case 42: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 55; } - return pos++, token = 35 /* AsteriskToken */; - case 43 /* plus */: - if (text.charCodeAt(pos + 1) === 43 /* plus */) { - return pos += 2, token = 38 /* PlusPlusToken */; + return pos++, token = 35; + case 43: + if (text.charCodeAt(pos + 1) === 43) { + return pos += 2, token = 38; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 53 /* PlusEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 53; } - return pos++, token = 33 /* PlusToken */; - case 44 /* comma */: - return pos++, token = 23 /* CommaToken */; - case 45 /* minus */: - if (text.charCodeAt(pos + 1) === 45 /* minus */) { - return pos += 2, token = 39 /* MinusMinusToken */; + return pos++, token = 33; + case 44: + return pos++, token = 23; + case 45: + if (text.charCodeAt(pos + 1) === 45) { + return pos += 2, token = 39; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 54 /* MinusEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 54; } - return pos++, token = 34 /* MinusToken */; - case 46 /* dot */: + return pos++, token = 34; + case 46: if (isDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanNumber(); - return token = 7 /* NumericLiteral */; + return token = 7; } - if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) { - return pos += 3, token = 21 /* DotDotDotToken */; + if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) { + return pos += 3, token = 21; } - return pos++, token = 20 /* DotToken */; - case 47 /* slash */: - if (text.charCodeAt(pos + 1) === 47 /* slash */) { + return pos++, token = 20; + case 47: + if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < len) { if (isLineBreak(text.charCodeAt(pos))) { @@ -2689,15 +2697,15 @@ var ts; continue; } else { - return token = 2 /* SingleLineCommentTrivia */; + return token = 2; } } - if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + if (text.charCodeAt(pos + 1) === 42) { pos += 2; var commentClosed = false; while (pos < len) { var ch = text.charCodeAt(pos); - if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + if (ch === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; commentClosed = true; break; @@ -2715,15 +2723,15 @@ var ts; } else { tokenIsUnterminated = !commentClosed; - return token = 3 /* MultiLineCommentTrivia */; + return token = 3; } } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 56 /* SlashEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 56; } - return pos++, token = 36 /* SlashToken */; - case 48 /* _0 */: - if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) { + return pos++, token = 36; + case 48: + if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) { pos += 2; var value = scanHexDigits(1, false); if (value < 0) { @@ -2731,9 +2739,9 @@ var ts; value = 0; } tokenValue = "" + value; - return token = 7 /* NumericLiteral */; + return token = 7; } - else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 66 /* B */ || text.charCodeAt(pos + 1) === 98 /* b */)) { + else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) { pos += 2; var value = scanBinaryOrOctalDigits(2); if (value < 0) { @@ -2741,9 +2749,9 @@ var ts; value = 0; } tokenValue = "" + value; - return token = 7 /* NumericLiteral */; + return token = 7; } - else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 79 /* O */ || text.charCodeAt(pos + 1) === 111 /* o */)) { + else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) { pos += 2; var value = scanBinaryOrOctalDigits(8); if (value < 0) { @@ -2751,104 +2759,104 @@ var ts; value = 0; } tokenValue = "" + value; - return token = 7 /* NumericLiteral */; + return token = 7; } if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); - return token = 7 /* NumericLiteral */; + return token = 7; } - case 49 /* _1 */: - case 50 /* _2 */: - case 51 /* _3 */: - case 52 /* _4 */: - case 53 /* _5 */: - case 54 /* _6 */: - case 55 /* _7 */: - case 56 /* _8 */: - case 57 /* _9 */: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: tokenValue = "" + scanNumber(); - return token = 7 /* NumericLiteral */; - case 58 /* colon */: - return pos++, token = 51 /* ColonToken */; - case 59 /* semicolon */: - return pos++, token = 22 /* SemicolonToken */; - case 60 /* lessThan */: + return token = 7; + case 58: + return pos++, token = 51; + case 59: + return pos++, token = 22; + case 60: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 6 /* ConflictMarkerTrivia */; + return token = 6; } } - if (text.charCodeAt(pos + 1) === 60 /* lessThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 58 /* LessThanLessThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 60) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 58; } - return pos += 2, token = 40 /* LessThanLessThanToken */; + return pos += 2, token = 40; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 26 /* LessThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 26; } - return pos++, token = 24 /* LessThanToken */; - case 61 /* equals */: + return pos++, token = 24; + case 61: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 6 /* ConflictMarkerTrivia */; + return token = 6; } } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 30 /* EqualsEqualsEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 30; } - return pos += 2, token = 28 /* EqualsEqualsToken */; + return pos += 2, token = 28; } - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - return pos += 2, token = 32 /* EqualsGreaterThanToken */; + if (text.charCodeAt(pos + 1) === 62) { + return pos += 2, token = 32; } - return pos++, token = 52 /* EqualsToken */; - case 62 /* greaterThan */: + return pos++, token = 52; + case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { - return token = 6 /* ConflictMarkerTrivia */; + return token = 6; } } - return pos++, token = 25 /* GreaterThanToken */; - case 63 /* question */: - return pos++, token = 50 /* QuestionToken */; - case 91 /* openBracket */: - return pos++, token = 18 /* OpenBracketToken */; - case 93 /* closeBracket */: - return pos++, token = 19 /* CloseBracketToken */; - case 94 /* caret */: - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 63 /* CaretEqualsToken */; + return pos++, token = 25; + case 63: + return pos++, token = 50; + case 91: + return pos++, token = 18; + case 93: + return pos++, token = 19; + case 94: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 63; } - return pos++, token = 45 /* CaretToken */; - case 123 /* openBrace */: - return pos++, token = 14 /* OpenBraceToken */; - case 124 /* bar */: - if (text.charCodeAt(pos + 1) === 124 /* bar */) { - return pos += 2, token = 49 /* BarBarToken */; + return pos++, token = 45; + case 123: + return pos++, token = 14; + case 124: + if (text.charCodeAt(pos + 1) === 124) { + return pos += 2, token = 49; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 62 /* BarEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 62; } - return pos++, token = 44 /* BarToken */; - case 125 /* closeBrace */: - return pos++, token = 15 /* CloseBraceToken */; - case 126 /* tilde */: - return pos++, token = 47 /* TildeToken */; - case 92 /* backslash */: + return pos++, token = 44; + case 125: + return pos++, token = 15; + case 126: + return pos++, token = 47; + case 92: var ch = peekUnicodeEscape(); if (ch >= 0 && isIdentifierStart(ch)) { pos += 6; @@ -2856,14 +2864,14 @@ var ts; return token = getIdentifierToken(); } error(ts.Diagnostics.Invalid_character); - return pos++, token = 0 /* Unknown */; + return pos++, token = 0; default: if (isIdentifierStart(ch)) { pos++; while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos))) pos++; tokenValue = text.substring(tokenPos, pos); - if (ch === 92 /* backslash */) { + if (ch === 92) { tokenValue += scanIdentifierParts(); } return token = getIdentifierToken(); @@ -2878,32 +2886,32 @@ var ts; continue; } error(ts.Diagnostics.Invalid_character); - return pos++, token = 0 /* Unknown */; + return pos++, token = 0; } } } function reScanGreaterToken() { - if (token === 25 /* GreaterThanToken */) { - if (text.charCodeAt(pos) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { - if (text.charCodeAt(pos + 2) === 61 /* equals */) { - return pos += 3, token = 60 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + if (token === 25) { + if (text.charCodeAt(pos) === 62) { + if (text.charCodeAt(pos + 1) === 62) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 60; } - return pos += 2, token = 42 /* GreaterThanGreaterThanGreaterThanToken */; + return pos += 2, token = 42; } - if (text.charCodeAt(pos + 1) === 61 /* equals */) { - return pos += 2, token = 59 /* GreaterThanGreaterThanEqualsToken */; + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 59; } - return pos++, token = 41 /* GreaterThanGreaterThanToken */; + return pos++, token = 41; } - if (text.charCodeAt(pos) === 61 /* equals */) { - return pos++, token = 27 /* GreaterThanEqualsToken */; + if (text.charCodeAt(pos) === 61) { + return pos++, token = 27; } } return token; } function reScanSlashToken() { - if (token === 36 /* SlashToken */ || token === 56 /* SlashEqualsToken */) { + if (token === 36 || token === 56) { var p = tokenPos + 1; var inEscape = false; var inCharacterClass = false; @@ -2922,17 +2930,17 @@ var ts; if (inEscape) { inEscape = false; } - else if (ch === 47 /* slash */ && !inCharacterClass) { + else if (ch === 47 && !inCharacterClass) { p++; break; } - else if (ch === 91 /* openBracket */) { + else if (ch === 91) { inCharacterClass = true; } - else if (ch === 92 /* backslash */) { + else if (ch === 92) { inEscape = true; } - else if (ch === 93 /* closeBracket */) { + else if (ch === 93) { inCharacterClass = false; } p++; @@ -2942,12 +2950,12 @@ var ts; } pos = p; tokenValue = text.substring(tokenPos, pos); - token = 9 /* RegularExpressionLiteral */; + token = 9; } return token; } function reScanTemplateToken() { - ts.Debug.assert(token === 15 /* CloseBraceToken */, "'reScanTemplateToken' should only be called on a '}'"); + ts.Debug.assert(token === 15, "'reScanTemplateToken' should only be called on a '}'"); pos = tokenPos; return token = scanTemplateAndSetTokenValue(); } @@ -2984,7 +2992,7 @@ var ts; pos = textPos; startPos = textPos; tokenPos = textPos; - token = 0 /* Unknown */; + token = 0; precedingLineBreak = false; } setText(text); @@ -2996,8 +3004,8 @@ var ts; getTokenText: function () { return text.substring(tokenPos, pos); }, getTokenValue: function () { return tokenValue; }, hasPrecedingLineBreak: function () { return precedingLineBreak; }, - isIdentifier: function () { return token === 64 /* Identifier */ || token > 100 /* LastReservedWord */; }, - isReservedWord: function () { return token >= 65 /* FirstReservedWord */ && token <= 100 /* LastReservedWord */; }, + isIdentifier: function () { return token === 64 || token > 100; }, + isReservedWord: function () { return token >= 65 && token <= 100; }, isUnterminated: function () { return tokenIsUnterminated; }, reScanGreaterToken: reScanGreaterToken, reScanSlashToken: reScanSlashToken, @@ -3062,20 +3070,20 @@ var ts; ts.getFullWidth = getFullWidth; function containsParseError(node) { aggregateChildData(node); - return (node.parserContextFlags & 32 /* ThisNodeOrAnySubNodesHasError */) !== 0; + return (node.parserContextFlags & 32) !== 0; } ts.containsParseError = containsParseError; function aggregateChildData(node) { - if (!(node.parserContextFlags & 64 /* HasAggregatedChildData */)) { - var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 16 /* ThisNodeHasError */) !== 0) || ts.forEachChild(node, containsParseError); + if (!(node.parserContextFlags & 64)) { + var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 16) !== 0) || ts.forEachChild(node, containsParseError); if (thisNodeOrAnySubNodesHasError) { - node.parserContextFlags |= 32 /* ThisNodeOrAnySubNodesHasError */; + node.parserContextFlags |= 32; } - node.parserContextFlags |= 64 /* HasAggregatedChildData */; + node.parserContextFlags |= 64; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 207 /* SourceFile */) { + while (node && node.kind !== 207) { node = node.parent; } return node; @@ -3083,8 +3091,8 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function nodePosToString(node) { var file = getSourceFileOfNode(node); - var loc = file.getLineAndCharacterFromPosition(node.pos); - return file.filename + "(" + loc.line + "," + loc.character + ")"; + var loc = ts.getLineAndCharacterOfPosition(file, node.pos); + return file.fileName + "(" + loc.line + "," + loc.character + ")"; } ts.nodePosToString = nodePosToString; function getStartPosOfNode(node) { @@ -3095,7 +3103,7 @@ var ts; if (!node) { return true; } - return node.pos === node.end && node.kind !== 1 /* EndOfFileToken */; + return node.pos === node.end && node.kind !== 1; } ts.nodeIsMissing = nodeIsMissing; function nodeIsPresent(node) { @@ -3129,11 +3137,11 @@ var ts; } ts.getTextOfNode = getTextOfNode; function escapeIdentifier(identifier) { - return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; + return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier; } ts.escapeIdentifier = escapeIdentifier; function unescapeIdentifier(identifier) { - return identifier.length >= 3 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ && identifier.charCodeAt(2) === 95 /* _ */ ? identifier.substr(1) : identifier; + return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier; } ts.unescapeIdentifier = unescapeIdentifier; function declarationNameToString(name) { @@ -3148,24 +3156,31 @@ var ts; return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); } ts.createDiagnosticForNode = createDiagnosticForNode; - function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) { + function createDiagnosticForNodeFromMessageChain(node, messageChain) { node = getErrorSpanForNode(node); var file = getSourceFileOfNode(node); var start = ts.skipTrivia(file.text, node.pos); var length = node.end - start; - return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine); + return { + file: file, + start: start, + length: length, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain.next ? messageChain : messageChain.messageText + }; } ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; function getErrorSpanForNode(node) { var errorSpan; switch (node.kind) { - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 195 /* ModuleDeclaration */: - case 194 /* EnumDeclaration */: - case 206 /* EnumMember */: + case 188: + case 146: + case 191: + case 192: + case 195: + case 194: + case 206: errorSpan = node.name; break; } @@ -3177,15 +3192,15 @@ var ts; } ts.isExternalModule = isExternalModule; function isDeclarationFile(file) { - return (file.flags & 1024 /* DeclarationFile */) !== 0; + return (file.flags & 1024) !== 0; } ts.isDeclarationFile = isDeclarationFile; function isConstEnumDeclaration(node) { - return node.kind === 194 /* EnumDeclaration */ && isConst(node); + return node.kind === 194 && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 146 /* BindingElement */ || isBindingPattern(node))) { + while (node && (node.kind === 146 || isBindingPattern(node))) { node = node.parent; } return node; @@ -3193,34 +3208,34 @@ var ts; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 188 /* VariableDeclaration */) { + if (node.kind === 188) { node = node.parent; } - if (node && node.kind === 189 /* VariableDeclarationList */) { + if (node && node.kind === 189) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 171 /* VariableStatement */) { + if (node && node.kind === 171) { flags |= node.flags; } return flags; } ts.getCombinedNodeFlags = getCombinedNodeFlags; function isConst(node) { - return !!(getCombinedNodeFlags(node) & 4096 /* Const */); + return !!(getCombinedNodeFlags(node) & 4096); } ts.isConst = isConst; function isLet(node) { - return !!(getCombinedNodeFlags(node) & 2048 /* Let */); + return !!(getCombinedNodeFlags(node) & 2048); } ts.isLet = isLet; function isPrologueDirective(node) { - return node.kind === 173 /* ExpressionStatement */ && node.expression.kind === 8 /* StringLiteral */; + return node.kind === 173 && node.expression.kind === 8; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { sourceFileOfNode = sourceFileOfNode || getSourceFileOfNode(node); - if (node.kind === 124 /* Parameter */ || node.kind === 123 /* TypeParameter */) { + if (node.kind === 124 || node.kind === 123) { return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos)); } else { @@ -3231,7 +3246,7 @@ var ts; function getJsDocComments(node, sourceFileOfNode) { return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), isJsDocComment); 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 */; + return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47; } } ts.getJsDocComments = getJsDocComments; @@ -3240,21 +3255,21 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 181 /* ReturnStatement */: + case 181: return visitor(node); - case 170 /* Block */: - case 174 /* IfStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 182 /* WithStatement */: - case 183 /* SwitchStatement */: - case 200 /* CaseClause */: - case 201 /* DefaultClause */: - case 184 /* LabeledStatement */: - case 186 /* TryStatement */: - case 203 /* CatchClause */: + case 170: + case 174: + case 175: + case 176: + case 177: + case 178: + case 182: + case 183: + case 200: + case 201: + case 184: + case 186: + case 203: return ts.forEachChild(node, traverse); } } @@ -3263,22 +3278,22 @@ var ts; function isAnyFunction(node) { if (node) { switch (node.kind) { - case 129 /* Constructor */: - case 156 /* FunctionExpression */: - case 190 /* FunctionDeclaration */: - case 157 /* ArrowFunction */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 190 /* FunctionDeclaration */: + case 129: + case 156: + case 190: + case 157: + case 128: + case 127: + case 130: + case 131: + case 132: + case 133: + case 134: + case 136: + case 137: + case 156: + case 157: + case 190: return true; } } @@ -3286,11 +3301,11 @@ var ts; } ts.isAnyFunction = isAnyFunction; function isFunctionBlock(node) { - return node && node.kind === 170 /* Block */ && isAnyFunction(node.parent); + return node && node.kind === 170 && isAnyFunction(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 128 /* MethodDeclaration */ && node.parent.kind === 148 /* ObjectLiteralExpression */; + return node && node.kind === 128 && node.parent.kind === 148; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function getContainingFunction(node) { @@ -3309,28 +3324,28 @@ var ts; return undefined; } switch (node.kind) { - case 122 /* ComputedPropertyName */: - if (node.parent.parent.kind === 191 /* ClassDeclaration */) { + case 122: + if (node.parent.parent.kind === 191) { return node; } node = node.parent; break; - case 157 /* ArrowFunction */: + case 157: if (!includeArrowFunctions) { continue; } - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 195 /* ModuleDeclaration */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 194 /* EnumDeclaration */: - case 207 /* SourceFile */: + case 190: + case 156: + case 195: + case 126: + case 125: + case 128: + case 127: + case 129: + case 130: + case 131: + case 194: + case 207: return node; } } @@ -3342,32 +3357,32 @@ var ts; if (!node) return node; switch (node.kind) { - case 122 /* ComputedPropertyName */: - if (node.parent.parent.kind === 191 /* ClassDeclaration */) { + case 122: + if (node.parent.parent.kind === 191) { return node; } node = node.parent; break; - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 190: + case 156: + case 157: if (!includeFunctions) { continue; } - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 126: + case 125: + case 128: + case 127: + case 129: + case 130: + case 131: return node; } } } ts.getSuperContainer = getSuperContainer; function getInvokedExpression(node) { - if (node.kind === 153 /* TaggedTemplateExpression */) { + if (node.kind === 153) { return node.tag; } return node.expression; @@ -3375,78 +3390,78 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function isExpression(node) { switch (node.kind) { - case 92 /* ThisKeyword */: - case 90 /* SuperKeyword */: - case 88 /* NullKeyword */: - case 94 /* TrueKeyword */: - case 79 /* FalseKeyword */: - case 9 /* RegularExpressionLiteral */: - case 147 /* ArrayLiteralExpression */: - case 148 /* ObjectLiteralExpression */: - case 149 /* PropertyAccessExpression */: - case 150 /* ElementAccessExpression */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: - case 153 /* TaggedTemplateExpression */: - case 154 /* TypeAssertionExpression */: - case 155 /* ParenthesizedExpression */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 160 /* VoidExpression */: - case 158 /* DeleteExpression */: - case 159 /* TypeOfExpression */: - case 161 /* PrefixUnaryExpression */: - case 162 /* PostfixUnaryExpression */: - case 163 /* BinaryExpression */: - case 164 /* ConditionalExpression */: - case 167 /* SpreadElementExpression */: - case 165 /* TemplateExpression */: - case 10 /* NoSubstitutionTemplateLiteral */: - case 168 /* OmittedExpression */: + case 92: + case 90: + case 88: + case 94: + case 79: + case 9: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 160: + case 158: + case 159: + case 161: + case 162: + case 163: + case 164: + case 167: + case 165: + case 10: + case 168: return true; - case 121 /* QualifiedName */: - while (node.parent.kind === 121 /* QualifiedName */) { + case 121: + while (node.parent.kind === 121) { node = node.parent; } - return node.parent.kind === 138 /* TypeQuery */; - case 64 /* Identifier */: - if (node.parent.kind === 138 /* TypeQuery */) { + return node.parent.kind === 138; + case 64: + if (node.parent.kind === 138) { return true; } - case 7 /* NumericLiteral */: - case 8 /* StringLiteral */: + case 7: + case 8: var parent = node.parent; switch (parent.kind) { - case 188 /* VariableDeclaration */: - case 124 /* Parameter */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 206 /* EnumMember */: - case 204 /* PropertyAssignment */: - case 146 /* BindingElement */: + case 188: + case 124: + case 126: + case 125: + case 206: + case 204: + case 146: return parent.initializer === node; - case 173 /* ExpressionStatement */: - case 174 /* IfStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 181 /* ReturnStatement */: - case 182 /* WithStatement */: - case 183 /* SwitchStatement */: - case 200 /* CaseClause */: - case 185 /* ThrowStatement */: - case 183 /* SwitchStatement */: + case 173: + case 174: + case 175: + case 176: + case 181: + case 182: + case 183: + case 200: + case 185: + case 183: return parent.expression === node; - case 177 /* ForStatement */: + case 177: var forStatement = parent; - return (forStatement.initializer === node && forStatement.initializer.kind !== 189 /* VariableDeclarationList */) || forStatement.condition === node || forStatement.iterator === node; - case 178 /* ForInStatement */: + return (forStatement.initializer === node && forStatement.initializer.kind !== 189) || forStatement.condition === node || forStatement.iterator === node; + case 178: var forInStatement = parent; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 189 /* VariableDeclarationList */) || forInStatement.expression === node; - case 154 /* TypeAssertionExpression */: + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 189) || forInStatement.expression === node; + case 154: return node === parent.expression; - case 169 /* TemplateSpan */: + case 169: return node === parent.expression; - case 122 /* ComputedPropertyName */: + case 122: return node === parent.expression; default: if (isExpression(parent)) { @@ -3459,11 +3474,11 @@ var ts; ts.isExpression = isExpression; function isInstantiatedModule(node, preserveConstEnums) { var moduleState = ts.getModuleInstanceState(node); - return moduleState === 1 /* Instantiated */ || (preserveConstEnums && moduleState === 2 /* ConstEnumOnly */); + return moduleState === 1 || (preserveConstEnums && moduleState === 2); } ts.isInstantiatedModule = isInstantiatedModule; function isExternalModuleImportDeclaration(node) { - return node.kind === 197 /* ImportDeclaration */ && node.moduleReference.kind === 199 /* ExternalModuleReference */; + return node.kind === 197 && node.moduleReference.kind === 199; } ts.isExternalModuleImportDeclaration = isExternalModuleImportDeclaration; function getExternalModuleImportDeclarationExpression(node) { @@ -3472,25 +3487,25 @@ var ts; } ts.getExternalModuleImportDeclarationExpression = getExternalModuleImportDeclarationExpression; function isInternalModuleImportDeclaration(node) { - return node.kind === 197 /* ImportDeclaration */ && node.moduleReference.kind !== 199 /* ExternalModuleReference */; + return node.kind === 197 && node.moduleReference.kind !== 199; } ts.isInternalModuleImportDeclaration = isInternalModuleImportDeclaration; function hasDotDotDotToken(node) { - return node && node.kind === 124 /* Parameter */ && node.dotDotDotToken !== undefined; + return node && node.kind === 124 && node.dotDotDotToken !== undefined; } ts.hasDotDotDotToken = hasDotDotDotToken; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 124 /* Parameter */: + case 124: return node.questionToken !== undefined; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: return node.questionToken !== undefined; - case 205 /* ShorthandPropertyAssignment */: - case 204 /* PropertyAssignment */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 205: + case 204: + case 126: + case 125: return node.questionToken !== undefined; } } @@ -3502,24 +3517,24 @@ var ts; } ts.hasRestParameters = hasRestParameters; function isLiteralKind(kind) { - return 7 /* FirstLiteralToken */ <= kind && kind <= 10 /* LastLiteralToken */; + return 7 <= kind && kind <= 10; } ts.isLiteralKind = isLiteralKind; function isTextualLiteralKind(kind) { - return kind === 8 /* StringLiteral */ || kind === 10 /* NoSubstitutionTemplateLiteral */; + return kind === 8 || kind === 10; } ts.isTextualLiteralKind = isTextualLiteralKind; function isTemplateLiteralKind(kind) { - return 10 /* FirstTemplateToken */ <= kind && kind <= 13 /* LastTemplateToken */; + return 10 <= kind && kind <= 13; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isBindingPattern(node) { - return node.kind === 145 /* ArrayBindingPattern */ || node.kind === 144 /* ObjectBindingPattern */; + return node.kind === 145 || node.kind === 144; } ts.isBindingPattern = isBindingPattern; function isInAmbientContext(node) { while (node) { - if (node.flags & (2 /* Ambient */ | 1024 /* DeclarationFile */)) { + if (node.flags & (2 | 1024)) { return true; } node = node.parent; @@ -3529,27 +3544,27 @@ var ts; ts.isInAmbientContext = isInAmbientContext; function isDeclaration(node) { switch (node.kind) { - case 123 /* TypeParameter */: - case 124 /* Parameter */: - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 204 /* PropertyAssignment */: - case 205 /* ShorthandPropertyAssignment */: - case 206 /* EnumMember */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 190 /* FunctionDeclaration */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 129 /* Constructor */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 194 /* EnumDeclaration */: - case 195 /* ModuleDeclaration */: - case 197 /* ImportDeclaration */: + case 123: + case 124: + case 188: + case 146: + case 126: + case 125: + case 204: + case 205: + case 206: + case 128: + case 127: + case 190: + case 130: + case 131: + case 129: + case 191: + case 192: + case 193: + case 194: + case 195: + case 197: return true; } return false; @@ -3557,24 +3572,24 @@ var ts; ts.isDeclaration = isDeclaration; function isStatement(n) { switch (n.kind) { - case 180 /* BreakStatement */: - case 179 /* ContinueStatement */: - case 187 /* DebuggerStatement */: - case 175 /* DoStatement */: - case 173 /* ExpressionStatement */: - case 172 /* EmptyStatement */: - case 178 /* ForInStatement */: - case 177 /* ForStatement */: - case 174 /* IfStatement */: - case 184 /* LabeledStatement */: - case 181 /* ReturnStatement */: - case 183 /* SwitchStatement */: - case 93 /* ThrowKeyword */: - case 186 /* TryStatement */: - case 171 /* VariableStatement */: - case 176 /* WhileStatement */: - case 182 /* WithStatement */: - case 198 /* ExportAssignment */: + case 180: + case 179: + case 187: + case 175: + case 173: + case 172: + case 178: + case 177: + case 174: + case 184: + case 181: + case 183: + case 93: + case 186: + case 171: + case 176: + case 182: + case 198: return true; default: return false; @@ -3582,31 +3597,31 @@ var ts; } ts.isStatement = isStatement; function isDeclarationOrFunctionExpressionOrCatchVariableName(name) { - if (name.kind !== 64 /* Identifier */ && name.kind !== 8 /* StringLiteral */ && name.kind !== 7 /* NumericLiteral */) { + if (name.kind !== 64 && name.kind !== 8 && name.kind !== 7) { return false; } var parent = name.parent; - if (isDeclaration(parent) || parent.kind === 156 /* FunctionExpression */) { + if (isDeclaration(parent) || parent.kind === 156) { return parent.name === name; } - if (parent.kind === 203 /* CatchClause */) { + if (parent.kind === 203) { return parent.name === name; } return false; } ts.isDeclarationOrFunctionExpressionOrCatchVariableName = isDeclarationOrFunctionExpressionOrCatchVariableName; function getClassBaseTypeNode(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 78 /* ExtendsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 78); return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined; } ts.getClassBaseTypeNode = getClassBaseTypeNode; function getClassImplementedTypeNodes(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 101 /* ImplementsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 101); return heritageClause ? heritageClause.types : undefined; } ts.getClassImplementedTypeNodes = getClassImplementedTypeNodes; function getInterfaceBaseTypeNodes(node) { - var heritageClause = getHeritageClause(node.heritageClauses, 78 /* ExtendsKeyword */); + var heritageClause = getHeritageClause(node.heritageClauses, 78); return heritageClause ? heritageClause.types : undefined; } ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes; @@ -3623,7 +3638,7 @@ var ts; ts.getHeritageClause = getHeritageClause; function tryResolveScriptReference(host, sourceFile, reference) { if (!host.getCompilerOptions().noResolve) { - var referenceFileName = ts.isRootedDiskPath(reference.filename) ? reference.filename : ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename); + var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName); referenceFileName = ts.getNormalizedAbsolutePath(referenceFileName, host.getCurrentDirectory()); return host.getSourceFile(referenceFileName); } @@ -3631,16 +3646,16 @@ var ts; ts.tryResolveScriptReference = tryResolveScriptReference; function getAncestor(node, kind) { switch (kind) { - case 191 /* ClassDeclaration */: + case 191: while (node) { switch (node.kind) { - case 191 /* ClassDeclaration */: + case 191: return node; - case 194 /* EnumDeclaration */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 195 /* ModuleDeclaration */: - case 197 /* ImportDeclaration */: + case 194: + case 192: + case 193: + case 195: + case 197: return undefined; default: node = node.parent; @@ -3678,7 +3693,7 @@ var ts; fileReference: { pos: start, end: end, - filename: matchResult[3] + fileName: matchResult[3] }, isNoDefaultLib: false }; @@ -3695,42 +3710,27 @@ var ts; } ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; function isKeyword(token) { - return 65 /* FirstKeyword */ <= token && token <= 120 /* LastKeyword */; + return 65 <= token && token <= 120; } ts.isKeyword = isKeyword; function isTrivia(token) { - return 2 /* FirstTriviaToken */ <= token && token <= 6 /* LastTriviaToken */; + return 2 <= token && token <= 6; } ts.isTrivia = isTrivia; function isModifier(token) { switch (token) { - case 107 /* PublicKeyword */: - case 105 /* PrivateKeyword */: - case 106 /* ProtectedKeyword */: - case 108 /* StaticKeyword */: - case 77 /* ExportKeyword */: - case 113 /* DeclareKeyword */: - case 69 /* ConstKeyword */: + case 107: + case 105: + case 106: + case 108: + case 77: + case 113: + case 69: return true; } return false; } ts.isModifier = isModifier; - function createEmitHostFromProgram(program) { - var compilerHost = program.getCompilerHost(); - return { - getCanonicalFileName: compilerHost.getCanonicalFileName, - getCommonSourceDirectory: program.getCommonSourceDirectory, - getCompilerOptions: program.getCompilerOptions, - getCurrentDirectory: compilerHost.getCurrentDirectory, - getNewLine: compilerHost.getNewLine, - getSourceFile: program.getSourceFile, - getSourceFiles: program.getSourceFiles, - isEmitBlocked: program.isEmitBlocked, - writeFile: compilerHost.writeFile - }; - } - ts.createEmitHostFromProgram = createEmitHostFromProgram; function textSpanEnd(span) { return span.start + span.length; } @@ -3840,10 +3840,76 @@ var ts; return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN); } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; + function createDiagnosticCollection() { + var nonFileDiagnostics = []; + var fileDiagnostics = {}; + var diagnosticsModified = false; + var modificationCount = 0; + return { + add: add, + getGlobalDiagnostics: getGlobalDiagnostics, + getDiagnostics: getDiagnostics, + getModificationCount: getModificationCount + }; + function getModificationCount() { + return modificationCount; + } + function add(diagnostic) { + var diagnostics; + if (diagnostic.file) { + diagnostics = fileDiagnostics[diagnostic.file.fileName]; + if (!diagnostics) { + diagnostics = []; + fileDiagnostics[diagnostic.file.fileName] = diagnostics; + } + } + else { + diagnostics = nonFileDiagnostics; + } + diagnostics.push(diagnostic); + diagnosticsModified = true; + modificationCount++; + } + function getGlobalDiagnostics() { + sortAndDeduplicate(); + return nonFileDiagnostics; + } + function getDiagnostics(fileName) { + sortAndDeduplicate(); + if (fileName) { + return fileDiagnostics[fileName] || []; + } + var allDiagnostics = []; + function pushDiagnostic(d) { + allDiagnostics.push(d); + } + ts.forEach(nonFileDiagnostics, pushDiagnostic); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + ts.forEach(fileDiagnostics[key], pushDiagnostic); + } + } + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function sortAndDeduplicate() { + if (!diagnosticsModified) { + return; + } + diagnosticsModified = false; + nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]); + } + } + } + } + ts.createDiagnosticCollection = createDiagnosticCollection; })(ts || (ts = {})); var ts; (function (ts) { - var nodeConstructors = new Array(209 /* Count */); + var nodeConstructors = new Array(209); + ts.parseTime = 0; function getNodeConstructor(kind) { return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)); } @@ -3879,152 +3945,152 @@ var ts; var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) { - case 121 /* QualifiedName */: + case 121: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 123 /* TypeParameter */: + case 123: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.expression); - case 124 /* Parameter */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 204 /* PropertyAssignment */: - case 205 /* ShorthandPropertyAssignment */: - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: + case 124: + case 126: + case 125: + case 204: + case 205: + case 188: + case 146: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.dotDotDotToken) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: + case 136: + case 137: + case 132: + case 133: + case 134: return visitNodes(cbNodes, node.modifiers) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 156 /* FunctionExpression */: - case 190 /* FunctionDeclaration */: - case 157 /* ArrowFunction */: + case 128: + case 127: + case 129: + case 130: + case 131: + case 156: + case 190: + case 157: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type) || visitNode(cbNode, node.body); - case 135 /* TypeReference */: + case 135: return visitNode(cbNode, node.typeName) || visitNodes(cbNodes, node.typeArguments); - case 138 /* TypeQuery */: + case 138: return visitNode(cbNode, node.exprName); - case 139 /* TypeLiteral */: + case 139: return visitNodes(cbNodes, node.members); - case 140 /* ArrayType */: + case 140: return visitNode(cbNode, node.elementType); - case 141 /* TupleType */: + case 141: return visitNodes(cbNodes, node.elementTypes); - case 142 /* UnionType */: + case 142: return visitNodes(cbNodes, node.types); - case 143 /* ParenthesizedType */: + case 143: return visitNode(cbNode, node.type); - case 144 /* ObjectBindingPattern */: - case 145 /* ArrayBindingPattern */: + case 144: + case 145: return visitNodes(cbNodes, node.elements); - case 147 /* ArrayLiteralExpression */: + case 147: return visitNodes(cbNodes, node.elements); - case 148 /* ObjectLiteralExpression */: + case 148: return visitNodes(cbNodes, node.properties); - case 149 /* PropertyAccessExpression */: + case 149: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.name); - case 150 /* ElementAccessExpression */: + case 150: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments) || visitNodes(cbNodes, node.arguments); - case 153 /* TaggedTemplateExpression */: + case 153: return visitNode(cbNode, node.tag) || visitNode(cbNode, node.template); - case 154 /* TypeAssertionExpression */: + case 154: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 155 /* ParenthesizedExpression */: + case 155: return visitNode(cbNode, node.expression); - case 158 /* DeleteExpression */: + case 158: return visitNode(cbNode, node.expression); - case 159 /* TypeOfExpression */: + case 159: return visitNode(cbNode, node.expression); - case 160 /* VoidExpression */: + case 160: return visitNode(cbNode, node.expression); - case 161 /* PrefixUnaryExpression */: + case 161: return visitNode(cbNode, node.operand); - case 166 /* YieldExpression */: + case 166: return visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.expression); - case 162 /* PostfixUnaryExpression */: + case 162: return visitNode(cbNode, node.operand); - case 163 /* BinaryExpression */: + case 163: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 164 /* ConditionalExpression */: + case 164: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.whenFalse); - case 167 /* SpreadElementExpression */: + case 167: return visitNode(cbNode, node.expression); - case 170 /* Block */: - case 196 /* ModuleBlock */: + case 170: + case 196: return visitNodes(cbNodes, node.statements); - case 207 /* SourceFile */: + case 207: return visitNodes(cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 171 /* VariableStatement */: + case 171: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 189 /* VariableDeclarationList */: + case 189: return visitNodes(cbNodes, node.declarations); - case 173 /* ExpressionStatement */: + case 173: return visitNode(cbNode, node.expression); - case 174 /* IfStatement */: + case 174: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 175 /* DoStatement */: + case 175: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 176 /* WhileStatement */: + case 176: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 177 /* ForStatement */: + case 177: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.condition) || visitNode(cbNode, node.iterator) || visitNode(cbNode, node.statement); - case 178 /* ForInStatement */: + case 178: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 179 /* ContinueStatement */: - case 180 /* BreakStatement */: + case 179: + case 180: return visitNode(cbNode, node.label); - case 181 /* ReturnStatement */: + case 181: return visitNode(cbNode, node.expression); - case 182 /* WithStatement */: + case 182: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 183 /* SwitchStatement */: + case 183: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.clauses); - case 200 /* CaseClause */: + case 200: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.statements); - case 201 /* DefaultClause */: + case 201: return visitNodes(cbNodes, node.statements); - case 184 /* LabeledStatement */: + case 184: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 185 /* ThrowStatement */: + case 185: return visitNode(cbNode, node.expression); - case 186 /* TryStatement */: + case 186: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 203 /* CatchClause */: + case 203: return visitNode(cbNode, node.name) || visitNode(cbNode, node.type) || visitNode(cbNode, node.block); - case 191 /* ClassDeclaration */: + case 191: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 192 /* InterfaceDeclaration */: + case 192: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 193 /* TypeAliasDeclaration */: + case 193: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.type); - case 194 /* EnumDeclaration */: + case 194: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.members); - case 206 /* EnumMember */: + case 206: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 195 /* ModuleDeclaration */: + case 195: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 197 /* ImportDeclaration */: + case 197: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 198 /* ExportAssignment */: + case 198: return visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.exportName); - case 165 /* TemplateExpression */: + case 165: return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); - case 169 /* TemplateSpan */: + case 169: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 122 /* ComputedPropertyName */: + case 122: return visitNode(cbNode, node.expression); - case 202 /* HeritageClause */: + case 202: return visitNodes(cbNodes, node.types); - case 199 /* ExternalModuleReference */: + case 199: return visitNode(cbNode, node.expression); } } @@ -4061,38 +4127,38 @@ var ts; })(Tristate || (Tristate = {})); function parsingContextErrors(context) { switch (context) { - case 0 /* SourceElements */: return ts.Diagnostics.Declaration_or_statement_expected; - case 1 /* ModuleElements */: return ts.Diagnostics.Declaration_or_statement_expected; - case 2 /* BlockStatements */: return ts.Diagnostics.Statement_expected; - case 3 /* SwitchClauses */: return ts.Diagnostics.case_or_default_expected; - case 4 /* SwitchClauseStatements */: return ts.Diagnostics.Statement_expected; - case 5 /* TypeMembers */: return ts.Diagnostics.Property_or_signature_expected; - case 6 /* ClassMembers */: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; - case 7 /* EnumMembers */: return ts.Diagnostics.Enum_member_expected; - case 8 /* TypeReferences */: return ts.Diagnostics.Type_reference_expected; - case 9 /* VariableDeclarations */: return ts.Diagnostics.Variable_declaration_expected; - case 10 /* ObjectBindingElements */: return ts.Diagnostics.Property_destructuring_pattern_expected; - case 11 /* ArrayBindingElements */: return ts.Diagnostics.Array_element_destructuring_pattern_expected; - case 12 /* ArgumentExpressions */: return ts.Diagnostics.Argument_expression_expected; - case 13 /* ObjectLiteralMembers */: return ts.Diagnostics.Property_assignment_expected; - case 14 /* ArrayLiteralMembers */: return ts.Diagnostics.Expression_or_comma_expected; - case 15 /* Parameters */: return ts.Diagnostics.Parameter_declaration_expected; - case 16 /* TypeParameters */: return ts.Diagnostics.Type_parameter_declaration_expected; - case 17 /* TypeArguments */: return ts.Diagnostics.Type_argument_expected; - case 18 /* TupleElementTypes */: return ts.Diagnostics.Type_expected; - case 19 /* HeritageClauses */: return ts.Diagnostics.Unexpected_token_expected; + case 0: return ts.Diagnostics.Declaration_or_statement_expected; + case 1: return ts.Diagnostics.Declaration_or_statement_expected; + case 2: return ts.Diagnostics.Statement_expected; + case 3: return ts.Diagnostics.case_or_default_expected; + case 4: return ts.Diagnostics.Statement_expected; + case 5: return ts.Diagnostics.Property_or_signature_expected; + case 6: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; + case 7: return ts.Diagnostics.Enum_member_expected; + case 8: return ts.Diagnostics.Type_reference_expected; + case 9: return ts.Diagnostics.Variable_declaration_expected; + case 10: return ts.Diagnostics.Property_destructuring_pattern_expected; + case 11: return ts.Diagnostics.Array_element_destructuring_pattern_expected; + case 12: return ts.Diagnostics.Argument_expression_expected; + case 13: return ts.Diagnostics.Property_assignment_expected; + case 14: return ts.Diagnostics.Expression_or_comma_expected; + case 15: return ts.Diagnostics.Parameter_declaration_expected; + case 16: return ts.Diagnostics.Type_parameter_declaration_expected; + case 17: return ts.Diagnostics.Type_argument_expected; + case 18: return ts.Diagnostics.Type_expected; + case 19: return ts.Diagnostics.Unexpected_token_expected; } } ; function modifierToFlag(token) { switch (token) { - case 108 /* StaticKeyword */: return 128 /* Static */; - case 107 /* PublicKeyword */: return 16 /* Public */; - case 106 /* ProtectedKeyword */: return 64 /* Protected */; - case 105 /* PrivateKeyword */: return 32 /* Private */; - case 77 /* ExportKeyword */: return 1 /* Export */; - case 113 /* DeclareKeyword */: return 2 /* Ambient */; - case 69 /* ConstKeyword */: return 4096 /* Const */; + case 108: return 128; + case 107: return 16; + case 106: return 64; + case 105: return 32; + case 77: return 1; + case 113: return 2; + case 69: return 4096; } return 0; } @@ -4110,8 +4176,157 @@ var ts; } forEachChild(sourceFile, walk); } + function moveElementEntirelyPastChangeRange(element, delta) { + if (element.length) { + visitArray(element); + } + else { + visitNode(element); + } + function visitNode(node) { + node._children = undefined; + node.pos += delta; + node.end += delta; + forEachChild(node, visitNode, visitArray); + } + function visitArray(array) { + array.pos += delta; + array.end += delta; + for (var i = 0, n = array.length; i < n; i++) { + visitNode(array[i]); + } + } + } + function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); + ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); + element.pos = Math.min(element.pos, changeRangeNewEnd); + if (element.end >= changeRangeOldEnd) { + element.end += delta; + } + else { + element.end = Math.min(element.end, changeRangeNewEnd); + } + ts.Debug.assert(element.pos <= element.end); + if (element.parent) { + ts.Debug.assert(element.pos >= element.parent.pos); + ts.Debug.assert(element.end <= element.parent.end); + } + } + function updateTokenPositionsAndMarkElements(node, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + visitNode(node); + function visitNode(child) { + if (child.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(child, delta); + return; + } + var fullEnd = child.end; + if (fullEnd >= changeStart) { + child.intersectsChange = true; + adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + forEachChild(child, visitNode, visitArray); + return; + } + } + function visitArray(array) { + if (array.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(array, delta); + } + else { + var fullEnd = array.end; + if (fullEnd >= changeStart) { + array.intersectsChange = true; + adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + for (var i = 0, n = array.length; i < n; i++) { + visitNode(array[i]); + } + } + } + } + } + function extendToAffectedRange(sourceFile, changeRange) { + var maxLookahead = 1; + var start = changeRange.span.start; + for (var i = 0; start > 0 && i <= maxLookahead; i++) { + var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); + var position = nearestNode.pos; + start = Math.max(0, position - 1); + } + var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); + var finalLength = changeRange.newLength + (changeRange.span.start - start); + return ts.createTextChangeRange(finalSpan, finalLength); + } + function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) { + var bestResult = sourceFile; + var lastNodeEntirelyBeforePosition; + forEachChild(sourceFile, visit); + if (lastNodeEntirelyBeforePosition) { + var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition); + if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { + bestResult = lastChildOfLastEntireNodeBeforePosition; + } + } + return bestResult; + function getLastChild(node) { + while (true) { + var lastChild = getLastChildWorker(node); + if (lastChild) { + node = lastChild; + } + else { + return node; + } + } + } + function getLastChildWorker(node) { + var last = undefined; + forEachChild(node, function (child) { + if (ts.nodeIsPresent(child)) { + last = child; + } + }); + return last; + } + function visit(child) { + if (ts.nodeIsMissing(child)) { + return; + } + if (child.pos <= position) { + if (child.pos >= bestResult.pos) { + bestResult = child; + } + if (position < child.end) { + forEachChild(child, visit); + return true; + } + else { + ts.Debug.assert(child.end <= position); + lastNodeEntirelyBeforePosition = child; + } + } + else { + ts.Debug.assert(child.pos > position); + return true; + } + } + } + function updateSourceFile(sourceFile, newText, textChangeRange) { + if (ts.textChangeRangeIsUnchanged(textChangeRange)) { + return sourceFile; + } + if (sourceFile.statements.length === 0) { + return parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true); + } + var syntaxCursor = createSyntaxCursor(sourceFile); + var changeRange = extendToAffectedRange(sourceFile, textChangeRange); + var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; + updateTokenPositionsAndMarkElements(sourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta); + var result = parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true); + return result; + } + ts.updateSourceFile = updateSourceFile; function isEvalOrArgumentsIdentifier(node) { - return node.kind === 64 /* Identifier */ && (node.text === "eval" || node.text === "arguments"); + return node.kind === 64 && (node.text === "eval" || node.text === "arguments"); } ts.isEvalOrArgumentsIdentifier = isEvalOrArgumentsIdentifier; function isUseStrictPrologueDirective(sourceFile, node) { @@ -4128,7 +4343,7 @@ var ts; var currentArrayIndex = 0; ts.Debug.assert(currentArrayIndex < currentArray.length); var current = currentArray[currentArrayIndex]; - var lastQueriedPosition = -1 /* Value */; + var lastQueriedPosition = -1; return { currentNode: function (position) { if (position !== lastQueriedPosition) { @@ -4147,7 +4362,7 @@ var ts; }; function findHighestListElementThatStartsAtPosition(position) { currentArray = undefined; - currentArrayIndex = -1 /* Value */; + currentArrayIndex = -1; current = undefined; forEachChild(sourceFile, visitNode, visitArray); function visitNode(node) { @@ -4181,207 +4396,47 @@ var ts; } } } - function createSourceFile(filename, sourceText, languageVersion, setParentNodes) { + function createSourceFile(fileName, sourceText, languageVersion, setParentNodes) { if (setParentNodes === void 0) { setParentNodes = false; } - var parsingContext; - var identifiers; + var start = new Date().getTime(); + var result = parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes); + ts.parseTime += new Date().getTime() - start; + return result; + } + ts.createSourceFile = createSourceFile; + function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes) { + if (setParentNodes === void 0) { setParentNodes = false; } + var parsingContext = 0; + var identifiers = {}; var identifierCount = 0; var nodeCount = 0; - var lineStarts; - var syntacticDiagnostics; var scanner; var token; - var syntaxCursor; - var contextFlags; - var parseErrorBeforeNextFinishedNode; - var sourceFile; - return parseSourceFile(sourceText, setParentNodes); - function parseSourceFile(text, setParentNodes) { - sourceText = text; - parsingContext = 0; - identifiers = {}; - lineStarts = undefined; - syntacticDiagnostics = undefined; - contextFlags = 0; - parseErrorBeforeNextFinishedNode = false; - sourceFile = createNode(207 /* SourceFile */, 0); - sourceFile.referenceDiagnostics = []; - sourceFile.parseDiagnostics = []; - sourceFile.semanticDiagnostics = []; - scanner = ts.createScanner(languageVersion, true, sourceText, scanError); - token = nextToken(); - sourceFile.flags = ts.fileExtensionIs(filename, ".d.ts") ? 1024 /* DeclarationFile */ : 0; - sourceFile.end = sourceText.length; - sourceFile.filename = ts.normalizePath(filename); - sourceFile.text = sourceText; - sourceFile.getLineAndCharacterFromPosition = getLineAndCharacterFromSourcePosition; - sourceFile.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter; - sourceFile.getLineStarts = getLineStarts; - sourceFile.getSyntacticDiagnostics = getSyntacticDiagnostics; - sourceFile.update = update; - processReferenceComments(sourceFile); - sourceFile.statements = parseList(0 /* SourceElements */, true, parseSourceElement); - ts.Debug.assert(token === 1 /* EndOfFileToken */); - sourceFile.endOfFileToken = parseTokenNode(); - setExternalModuleIndicator(sourceFile); - sourceFile.nodeCount = nodeCount; - sourceFile.identifierCount = identifierCount; - sourceFile.languageVersion = languageVersion; - sourceFile.identifiers = identifiers; - if (setParentNodes) { - fixupParentReferences(sourceFile); - } - return sourceFile; - } - function update(newText, textChangeRange) { - if (ts.textChangeRangeIsUnchanged(textChangeRange)) { - return sourceFile; - } - if (sourceFile.statements.length === 0) { - return parseSourceFile(newText, true); - } - syntaxCursor = createSyntaxCursor(sourceFile); - var changeRange = extendToAffectedRange(textChangeRange); - var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; - updateTokenPositionsAndMarkElements(sourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta); - var result = parseSourceFile(newText, true); - syntaxCursor = undefined; - return result; - } - function updateTokenPositionsAndMarkElements(node, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { - visitNode(node); - function visitNode(child) { - if (child.pos > changeRangeOldEnd) { - moveElementEntirelyPastChangeRange(child, delta); - return; - } - var fullEnd = child.end; - if (fullEnd >= changeStart) { - child.intersectsChange = true; - adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - forEachChild(child, visitNode, visitArray); - return; - } - } - function visitArray(array) { - if (array.pos > changeRangeOldEnd) { - moveElementEntirelyPastChangeRange(array, delta); - } - else { - var fullEnd = array.end; - if (fullEnd >= changeStart) { - array.intersectsChange = true; - adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - for (var i = 0, n = array.length; i < n; i++) { - visitNode(array[i]); - } - } - } - } - } - function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { - ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); - ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); - element.pos = Math.min(element.pos, changeRangeNewEnd); - if (element.end >= changeRangeOldEnd) { - element.end += delta; - } - else { - element.end = Math.min(element.end, changeRangeNewEnd); - } - ts.Debug.assert(element.pos <= element.end); - if (element.parent) { - ts.Debug.assert(element.pos >= element.parent.pos); - ts.Debug.assert(element.end <= element.parent.end); - } - } - function moveElementEntirelyPastChangeRange(element, delta) { - if (element.length) { - visitArray(element); - } - else { - visitNode(element); - } - function visitNode(node) { - node._children = undefined; - node.pos += delta; - node.end += delta; - forEachChild(node, visitNode, visitArray); - } - function visitArray(array) { - array.pos += delta; - array.end += delta; - for (var i = 0, n = array.length; i < n; i++) { - visitNode(array[i]); - } - } - } - function extendToAffectedRange(changeRange) { - var maxLookahead = 1; - var start = changeRange.span.start; - for (var i = 0; start > 0 && i <= maxLookahead; i++) { - var nearestNode = findNearestNodeStartingBeforeOrAtPosition(start); - var position = nearestNode.pos; - start = Math.max(0, position - 1); - } - var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); - var finalLength = changeRange.newLength + (changeRange.span.start - start); - return ts.createTextChangeRange(finalSpan, finalLength); - } - function findNearestNodeStartingBeforeOrAtPosition(position) { - var bestResult = sourceFile; - var lastNodeEntirelyBeforePosition; - forEachChild(sourceFile, visit); - if (lastNodeEntirelyBeforePosition) { - var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition); - if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { - bestResult = lastChildOfLastEntireNodeBeforePosition; - } - } - return bestResult; - function getLastChild(node) { - while (true) { - var lastChild = getLastChildWorker(node); - if (lastChild) { - node = lastChild; - } - else { - return node; - } - } - } - function getLastChildWorker(node) { - var last = undefined; - forEachChild(node, function (child) { - if (ts.nodeIsPresent(child)) { - last = child; - } - }); - return last; - } - function visit(child) { - if (ts.nodeIsMissing(child)) { - return; - } - if (child.pos <= position) { - if (child.pos >= bestResult.pos) { - bestResult = child; - } - if (position < child.end) { - forEachChild(child, visit); - return true; - } - else { - ts.Debug.assert(child.end <= position); - lastNodeEntirelyBeforePosition = child; - } - } - else { - ts.Debug.assert(child.pos > position); - return true; - } - } + var sourceFile = createNode(207, 0); + sourceFile.pos = 0; + sourceFile.end = sourceText.length; + sourceFile.text = sourceText; + sourceFile.parseDiagnostics = []; + sourceFile.bindDiagnostics = []; + sourceFile.languageVersion = languageVersion; + sourceFile.fileName = ts.normalizePath(fileName); + sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 1024 : 0; + var contextFlags = 0; + var parseErrorBeforeNextFinishedNode = false; + scanner = ts.createScanner(languageVersion, true, sourceText, scanError); + token = nextToken(); + processReferenceComments(sourceFile); + sourceFile.statements = parseList(0, true, parseSourceElement); + ts.Debug.assert(token === 1); + sourceFile.endOfFileToken = parseTokenNode(); + setExternalModuleIndicator(sourceFile); + sourceFile.nodeCount = nodeCount; + sourceFile.identifierCount = identifierCount; + sourceFile.identifiers = identifiers; + if (setParentNodes) { + fixupParentReferences(sourceFile); } + return sourceFile; function setContextFlag(val, flag) { if (val) { contextFlags |= flag; @@ -4391,19 +4446,19 @@ var ts; } } function setStrictModeContext(val) { - setContextFlag(val, 1 /* StrictMode */); + setContextFlag(val, 1); } function setDisallowInContext(val) { - setContextFlag(val, 2 /* DisallowIn */); + setContextFlag(val, 2); } function setYieldContext(val) { - setContextFlag(val, 4 /* Yield */); + setContextFlag(val, 4); } function setGeneratorParameterContext(val) { - setContextFlag(val, 8 /* GeneratorParameter */); + setContextFlag(val, 8); } function allowInAnd(func) { - if (contextFlags & 2 /* DisallowIn */) { + if (contextFlags & 2) { setDisallowInContext(false); var result = func(); setDisallowInContext(true); @@ -4412,7 +4467,7 @@ var ts; return func(); } function disallowInAnd(func) { - if (contextFlags & 2 /* DisallowIn */) { + if (contextFlags & 2) { return func(); } setDisallowInContext(true); @@ -4421,7 +4476,7 @@ var ts; return result; } function doInYieldContext(func) { - if (contextFlags & 4 /* Yield */) { + if (contextFlags & 4) { return func(); } setYieldContext(true); @@ -4430,7 +4485,7 @@ var ts; return result; } function doOutsideOfYieldContext(func) { - if (contextFlags & 4 /* Yield */) { + if (contextFlags & 4) { setYieldContext(false); var result = func(); setYieldContext(true); @@ -4439,25 +4494,16 @@ var ts; return func(); } function inYieldContext() { - return (contextFlags & 4 /* Yield */) !== 0; + return (contextFlags & 4) !== 0; } function inStrictModeContext() { - return (contextFlags & 1 /* StrictMode */) !== 0; + return (contextFlags & 1) !== 0; } function inGeneratorParameterContext() { - return (contextFlags & 8 /* GeneratorParameter */) !== 0; + return (contextFlags & 8) !== 0; } function inDisallowInContext() { - return (contextFlags & 2 /* DisallowIn */) !== 0; - } - function getLineStarts() { - return lineStarts || (lineStarts = ts.computeLineStarts(sourceText)); - } - function getLineAndCharacterFromSourcePosition(position) { - return ts.getLineAndCharacterOfPosition(getLineStarts(), position); - } - function getPositionFromSourceLineAndCharacter(line, character) { - return ts.getPositionFromLineAndCharacter(getLineStarts(), line, character); + return (contextFlags & 2) !== 0; } function parseErrorAtCurrentToken(message, arg0) { var start = scanner.getTokenPos(); @@ -4517,13 +4563,13 @@ var ts; return speculationHelper(callback, false); } function isIdentifier() { - if (token === 64 /* Identifier */) { + if (token === 64) { return true; } - if (token === 109 /* YieldKeyword */ && inYieldContext()) { + if (token === 109 && inYieldContext()) { return false; } - return inStrictModeContext() ? token > 109 /* LastFutureReservedWord */ : token > 100 /* LastReservedWord */; + return inStrictModeContext() ? token > 109 : token > 100; } function parseExpected(kind, diagnosticMessage) { if (token === kind) { @@ -4554,20 +4600,20 @@ var ts; return undefined; } function canParseSemicolon() { - if (token === 22 /* SemicolonToken */) { + if (token === 22) { return true; } - return token === 15 /* CloseBraceToken */ || token === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak(); + return token === 15 || token === 1 || scanner.hasPrecedingLineBreak(); } function parseSemicolon() { if (canParseSemicolon()) { - if (token === 22 /* SemicolonToken */) { + if (token === 22) { nextToken(); } return true; } else { - return parseExpected(22 /* SemicolonToken */); + return parseExpected(22); } } function createNode(kind, pos) { @@ -4587,7 +4633,7 @@ var ts; } if (parseErrorBeforeNextFinishedNode) { parseErrorBeforeNextFinishedNode = false; - node.parserContextFlags |= 16 /* ThisNodeHasError */; + node.parserContextFlags |= 16; } return node; } @@ -4609,12 +4655,12 @@ var ts; function createIdentifier(isIdentifier, diagnosticMessage) { identifierCount++; if (isIdentifier) { - var node = createNode(64 /* Identifier */); + var node = createNode(64); node.text = internIdentifier(scanner.getTokenValue()); nextToken(); return finishNode(node); } - return createMissingNode(64 /* Identifier */, false, diagnosticMessage || ts.Diagnostics.Identifier_expected); + return createMissingNode(64, false, diagnosticMessage || ts.Diagnostics.Identifier_expected); } function parseIdentifier(diagnosticMessage) { return createIdentifier(isIdentifier(), diagnosticMessage); @@ -4623,20 +4669,20 @@ var ts; return createIdentifier(isIdentifierOrKeyword()); } function isLiteralPropertyName() { - return isIdentifierOrKeyword() || token === 8 /* StringLiteral */ || token === 7 /* NumericLiteral */; + return isIdentifierOrKeyword() || token === 8 || token === 7; } function parsePropertyName() { - if (token === 8 /* StringLiteral */ || token === 7 /* NumericLiteral */) { + if (token === 8 || token === 7) { return parseLiteralNode(true); } - if (token === 18 /* OpenBracketToken */) { + if (token === 18) { return parseComputedPropertyName(); } return parseIdentifierName(); } function parseComputedPropertyName() { - var node = createNode(122 /* ComputedPropertyName */); - parseExpected(18 /* OpenBracketToken */); + var node = createNode(122); + parseExpected(18); var yieldContext = inYieldContext(); if (inGeneratorParameterContext()) { setYieldContext(false); @@ -4645,7 +4691,7 @@ var ts; if (inGeneratorParameterContext()) { setYieldContext(yieldContext); } - parseExpected(19 /* CloseBracketToken */); + parseExpected(19); return finishNode(node); } function parseContextualModifier(t) { @@ -4659,14 +4705,14 @@ var ts; return ts.isModifier(token) && tryParse(nextTokenCanFollowContextualModifier); } function nextTokenCanFollowContextualModifier() { - if (token === 69 /* ConstKeyword */) { - return nextToken() === 76 /* EnumKeyword */; + if (token === 69) { + return nextToken() === 76; } nextToken(); return canFollowModifier(); } function canFollowModifier() { - return token === 18 /* OpenBracketToken */ || token === 14 /* OpenBraceToken */ || token === 35 /* AsteriskToken */ || isLiteralPropertyName(); + return token === 18 || token === 14 || token === 35 || isLiteralPropertyName(); } function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); @@ -4674,42 +4720,42 @@ var ts; return true; } switch (parsingContext) { - case 0 /* SourceElements */: - case 1 /* ModuleElements */: + case 0: + case 1: return isSourceElement(inErrorRecovery); - case 2 /* BlockStatements */: - case 4 /* SwitchClauseStatements */: + case 2: + case 4: return isStartOfStatement(inErrorRecovery); - case 3 /* SwitchClauses */: - return token === 66 /* CaseKeyword */ || token === 72 /* DefaultKeyword */; - case 5 /* TypeMembers */: + case 3: + return token === 66 || token === 72; + case 5: return isStartOfTypeMember(); - case 6 /* ClassMembers */: + case 6: return lookAhead(isClassMemberStart); - case 7 /* EnumMembers */: - return token === 18 /* OpenBracketToken */ || isLiteralPropertyName(); - case 13 /* ObjectLiteralMembers */: - return token === 18 /* OpenBracketToken */ || token === 35 /* AsteriskToken */ || isLiteralPropertyName(); - case 10 /* ObjectBindingElements */: + case 7: + return token === 18 || isLiteralPropertyName(); + case 13: + return token === 18 || token === 35 || isLiteralPropertyName(); + case 10: return isLiteralPropertyName(); - case 8 /* TypeReferences */: + case 8: return isIdentifier() && !isNotHeritageClauseTypeName(); - case 9 /* VariableDeclarations */: + case 9: return isIdentifierOrPattern(); - case 11 /* ArrayBindingElements */: - return token === 23 /* CommaToken */ || token === 21 /* DotDotDotToken */ || isIdentifierOrPattern(); - case 16 /* TypeParameters */: + case 11: + return token === 23 || token === 21 || isIdentifierOrPattern(); + case 16: return isIdentifier(); - case 12 /* ArgumentExpressions */: - return token === 23 /* CommaToken */ || isStartOfExpression(); - case 14 /* ArrayLiteralMembers */: - return token === 23 /* CommaToken */ || token === 21 /* DotDotDotToken */ || isStartOfExpression(); - case 15 /* Parameters */: + case 12: + return token === 23 || isStartOfExpression(); + case 14: + return token === 23 || token === 21 || isStartOfExpression(); + case 15: return isStartOfParameter(); - case 17 /* TypeArguments */: - case 18 /* TupleElementTypes */: - return token === 23 /* CommaToken */ || isStartOfType(); - case 19 /* HeritageClauses */: + case 17: + case 18: + return token === 23 || isStartOfType(); + case 19: return isHeritageClause(); } ts.Debug.fail("Non-exhaustive case in 'isListElement'."); @@ -4719,61 +4765,61 @@ var ts; return isIdentifier(); } function isNotHeritageClauseTypeName() { - if (token === 101 /* ImplementsKeyword */ || token === 78 /* ExtendsKeyword */) { + if (token === 101 || token === 78) { return lookAhead(nextTokenIsIdentifier); } return false; } function isListTerminator(kind) { - if (token === 1 /* EndOfFileToken */) { + if (token === 1) { return true; } switch (kind) { - case 1 /* ModuleElements */: - case 2 /* BlockStatements */: - case 3 /* SwitchClauses */: - case 5 /* TypeMembers */: - case 6 /* ClassMembers */: - case 7 /* EnumMembers */: - case 13 /* ObjectLiteralMembers */: - case 10 /* ObjectBindingElements */: - return token === 15 /* CloseBraceToken */; - case 4 /* SwitchClauseStatements */: - return token === 15 /* CloseBraceToken */ || token === 66 /* CaseKeyword */ || token === 72 /* DefaultKeyword */; - case 8 /* TypeReferences */: - return token === 14 /* OpenBraceToken */ || token === 78 /* ExtendsKeyword */ || token === 101 /* ImplementsKeyword */; - case 9 /* VariableDeclarations */: + case 1: + case 2: + case 3: + case 5: + case 6: + case 7: + case 13: + case 10: + return token === 15; + case 4: + return token === 15 || token === 66 || token === 72; + case 8: + return token === 14 || token === 78 || token === 101; + case 9: return isVariableDeclaratorListTerminator(); - case 16 /* TypeParameters */: - return token === 25 /* GreaterThanToken */ || token === 16 /* OpenParenToken */ || token === 14 /* OpenBraceToken */ || token === 78 /* ExtendsKeyword */ || token === 101 /* ImplementsKeyword */; - case 12 /* ArgumentExpressions */: - return token === 17 /* CloseParenToken */ || token === 22 /* SemicolonToken */; - case 14 /* ArrayLiteralMembers */: - case 18 /* TupleElementTypes */: - case 11 /* ArrayBindingElements */: - return token === 19 /* CloseBracketToken */; - case 15 /* Parameters */: - return token === 17 /* CloseParenToken */ || token === 19 /* CloseBracketToken */; - case 17 /* TypeArguments */: - return token === 25 /* GreaterThanToken */ || token === 16 /* OpenParenToken */; - case 19 /* HeritageClauses */: - return token === 14 /* OpenBraceToken */ || token === 15 /* CloseBraceToken */; + case 16: + return token === 25 || token === 16 || token === 14 || token === 78 || token === 101; + case 12: + return token === 17 || token === 22; + case 14: + case 18: + case 11: + return token === 19; + case 15: + return token === 17 || token === 19; + case 17: + return token === 25 || token === 16; + case 19: + return token === 14 || token === 15; } } function isVariableDeclaratorListTerminator() { if (canParseSemicolon()) { return true; } - if (token === 85 /* InKeyword */) { + if (token === 85) { return true; } - if (token === 32 /* EqualsGreaterThanToken */) { + if (token === 32) { return true; } return false; } function isInSomeParsingContext() { - for (var kind = 0; kind < 20 /* Count */; kind++) { + for (var kind = 0; kind < 20; kind++) { if (parsingContext & (1 << kind)) { if (isListElement(kind, true) || isListTerminator(kind)) { return true; @@ -4838,7 +4884,7 @@ var ts; if (ts.containsParseError(node)) { return undefined; } - var nodeContextFlags = node.parserContextFlags & 31 /* ParserGeneratedFlags */; + var nodeContextFlags = node.parserContextFlags & 31; if (nodeContextFlags !== contextFlags) { return undefined; } @@ -4854,61 +4900,61 @@ var ts; } function canReuseNode(node, parsingContext) { switch (parsingContext) { - case 1 /* ModuleElements */: + case 1: return isReusableModuleElement(node); - case 6 /* ClassMembers */: + case 6: return isReusableClassMember(node); - case 3 /* SwitchClauses */: + case 3: return isReusableSwitchClause(node); - case 2 /* BlockStatements */: - case 4 /* SwitchClauseStatements */: + case 2: + case 4: return isReusableStatement(node); - case 7 /* EnumMembers */: + case 7: return isReusableEnumMember(node); - case 5 /* TypeMembers */: + case 5: return isReusableTypeMember(node); - case 9 /* VariableDeclarations */: + case 9: return isReusableVariableDeclaration(node); - case 15 /* Parameters */: + case 15: return isReusableParameter(node); - case 19 /* HeritageClauses */: - case 8 /* TypeReferences */: - case 16 /* TypeParameters */: - case 18 /* TupleElementTypes */: - case 17 /* TypeArguments */: - case 12 /* ArgumentExpressions */: - case 13 /* ObjectLiteralMembers */: + case 19: + case 8: + case 16: + case 18: + case 17: + case 12: + case 13: } return false; } function isReusableModuleElement(node) { if (node) { switch (node.kind) { - case 197 /* ImportDeclaration */: - case 198 /* ExportAssignment */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 195 /* ModuleDeclaration */: - case 194 /* EnumDeclaration */: - case 190 /* FunctionDeclaration */: - case 171 /* VariableStatement */: - case 170 /* Block */: - case 174 /* IfStatement */: - case 173 /* ExpressionStatement */: - case 185 /* ThrowStatement */: - case 181 /* ReturnStatement */: - case 183 /* SwitchStatement */: - case 180 /* BreakStatement */: - case 179 /* ContinueStatement */: - case 178 /* ForInStatement */: - case 177 /* ForStatement */: - case 176 /* WhileStatement */: - case 182 /* WithStatement */: - case 172 /* EmptyStatement */: - case 186 /* TryStatement */: - case 184 /* LabeledStatement */: - case 175 /* DoStatement */: - case 187 /* DebuggerStatement */: + case 197: + case 198: + case 191: + case 192: + case 195: + case 194: + case 190: + case 171: + case 170: + case 174: + case 173: + case 185: + case 181: + case 183: + case 180: + case 179: + case 178: + case 177: + case 176: + case 182: + case 172: + case 186: + case 184: + case 175: + case 187: return true; } } @@ -4917,12 +4963,12 @@ var ts; function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 129 /* Constructor */: - case 134 /* IndexSignature */: - case 128 /* MethodDeclaration */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 126 /* PropertyDeclaration */: + case 129: + case 134: + case 128: + case 130: + case 131: + case 126: return true; } } @@ -4931,8 +4977,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 200 /* CaseClause */: - case 201 /* DefaultClause */: + case 200: + case 201: return true; } } @@ -4941,55 +4987,55 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 190 /* FunctionDeclaration */: - case 171 /* VariableStatement */: - case 170 /* Block */: - case 174 /* IfStatement */: - case 173 /* ExpressionStatement */: - case 185 /* ThrowStatement */: - case 181 /* ReturnStatement */: - case 183 /* SwitchStatement */: - case 180 /* BreakStatement */: - case 179 /* ContinueStatement */: - case 178 /* ForInStatement */: - case 177 /* ForStatement */: - case 176 /* WhileStatement */: - case 182 /* WithStatement */: - case 172 /* EmptyStatement */: - case 186 /* TryStatement */: - case 184 /* LabeledStatement */: - case 175 /* DoStatement */: - case 187 /* DebuggerStatement */: + case 190: + case 171: + case 170: + case 174: + case 173: + case 185: + case 181: + case 183: + case 180: + case 179: + case 178: + case 177: + case 176: + case 182: + case 172: + case 186: + case 184: + case 175: + case 187: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 206 /* EnumMember */; + return node.kind === 206; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 133 /* ConstructSignature */: - case 127 /* MethodSignature */: - case 134 /* IndexSignature */: - case 125 /* PropertySignature */: - case 132 /* CallSignature */: + case 133: + case 127: + case 134: + case 125: + case 132: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 188 /* VariableDeclaration */) { + if (node.kind !== 188) { return false; } var variableDeclarator = node; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { - return node.kind === 124 /* Parameter */; + return node.kind === 124; } function abortParsingListOrMoveToNextToken(kind) { parseErrorAtCurrentToken(parsingContextErrors(kind)); @@ -5009,14 +5055,14 @@ var ts; if (isListElement(kind, false)) { result.push(parseListElement(kind, parseElement)); commaStart = scanner.getTokenPos(); - if (parseOptional(23 /* CommaToken */)) { + if (parseOptional(23)) { continue; } commaStart = -1; if (isListTerminator(kind)) { break; } - parseExpected(23 /* CommaToken */); + parseExpected(23); continue; } if (isListTerminator(kind)) { @@ -5050,8 +5096,8 @@ var ts; } function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = parseIdentifier(diagnosticMessage); - while (parseOptional(20 /* DotToken */)) { - var node = createNode(121 /* QualifiedName */, entity.pos); + while (parseOptional(20)) { + var node = createNode(121, entity.pos); node.left = entity; node.right = parseRightSideOfDot(allowReservedWords); entity = finishNode(node); @@ -5062,7 +5108,7 @@ var ts; if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) { var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); if (matchesPattern) { - return createMissingNode(64 /* Identifier */, true, ts.Diagnostics.Identifier_expected); + return createMissingNode(64, true, ts.Diagnostics.Identifier_expected); } } return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); @@ -5073,28 +5119,28 @@ var ts; return finishNode(node); } function parseTemplateExpression() { - var template = createNode(165 /* TemplateExpression */); + var template = createNode(165); template.head = parseLiteralNode(); - ts.Debug.assert(template.head.kind === 11 /* TemplateHead */, "Template head has wrong token kind"); + ts.Debug.assert(template.head.kind === 11, "Template head has wrong token kind"); var templateSpans = []; templateSpans.pos = getNodePos(); do { templateSpans.push(parseTemplateSpan()); - } while (templateSpans[templateSpans.length - 1].literal.kind === 12 /* TemplateMiddle */); + } while (templateSpans[templateSpans.length - 1].literal.kind === 12); templateSpans.end = getNodeEnd(); template.templateSpans = templateSpans; return finishNode(template); } function parseTemplateSpan() { - var span = createNode(169 /* TemplateSpan */); + var span = createNode(169); span.expression = allowInAnd(parseExpression); var literal; - if (token === 15 /* CloseBraceToken */) { + if (token === 15) { reScanTemplateToken(); literal = parseLiteralNode(); } else { - literal = createMissingNode(13 /* TemplateTail */, false, ts.Diagnostics._0_expected, ts.tokenToString(15 /* CloseBraceToken */)); + literal = createMissingNode(13, false, ts.Diagnostics._0_expected, ts.tokenToString(15)); } span.literal = literal; return finishNode(span); @@ -5109,29 +5155,29 @@ var ts; var tokenPos = scanner.getTokenPos(); nextToken(); finishNode(node); - if (node.kind === 7 /* NumericLiteral */ && sourceText.charCodeAt(tokenPos) === 48 /* _0 */ && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { - node.flags |= 8192 /* OctalLiteral */; + if (node.kind === 7 && sourceText.charCodeAt(tokenPos) === 48 && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { + node.flags |= 8192; } return node; } function parseTypeReference() { - var node = createNode(135 /* TypeReference */); + var node = createNode(135); node.typeName = parseEntityName(false, ts.Diagnostics.Type_expected); - if (!scanner.hasPrecedingLineBreak() && token === 24 /* LessThanToken */) { - node.typeArguments = parseBracketedList(17 /* TypeArguments */, parseType, 24 /* LessThanToken */, 25 /* GreaterThanToken */); + if (!scanner.hasPrecedingLineBreak() && token === 24) { + node.typeArguments = parseBracketedList(17, parseType, 24, 25); } return finishNode(node); } function parseTypeQuery() { - var node = createNode(138 /* TypeQuery */); - parseExpected(96 /* TypeOfKeyword */); + var node = createNode(138); + parseExpected(96); node.exprName = parseEntityName(true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(123 /* TypeParameter */); + var node = createNode(123); node.name = parseIdentifier(); - if (parseOptional(78 /* ExtendsKeyword */)) { + if (parseOptional(78)) { if (isStartOfType() || !isStartOfExpression()) { node.constraint = parseType(); } @@ -5142,18 +5188,18 @@ var ts; return finishNode(node); } function parseTypeParameters() { - if (token === 24 /* LessThanToken */) { - return parseBracketedList(16 /* TypeParameters */, parseTypeParameter, 24 /* LessThanToken */, 25 /* GreaterThanToken */); + if (token === 24) { + return parseBracketedList(16, parseTypeParameter, 24, 25); } } function parseParameterType() { - if (parseOptional(51 /* ColonToken */)) { - return token === 8 /* StringLiteral */ ? parseLiteralNode(true) : parseType(); + if (parseOptional(51)) { + return token === 8 ? parseLiteralNode(true) : parseType(); } return undefined; } function isStartOfParameter() { - return token === 21 /* DotDotDotToken */ || isIdentifierOrPattern() || ts.isModifier(token); + return token === 21 || isIdentifierOrPattern() || ts.isModifier(token); } function setModifiers(node, modifiers) { if (modifiers) { @@ -5162,14 +5208,14 @@ var ts; } } function parseParameter() { - var node = createNode(124 /* Parameter */); + var node = createNode(124); setModifiers(node, parseModifiers()); - node.dotDotDotToken = parseOptionalToken(21 /* DotDotDotToken */); + node.dotDotDotToken = parseOptionalToken(21); node.name = inGeneratorParameterContext() ? doInYieldContext(parseIdentifierOrPattern) : parseIdentifierOrPattern(); if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifier(token)) { nextToken(); } - node.questionToken = parseOptionalToken(50 /* QuestionToken */); + node.questionToken = parseOptionalToken(50); node.type = parseParameterType(); node.initializer = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseParameterInitializer) : parseParameterInitializer(); return finishNode(node); @@ -5178,7 +5224,7 @@ var ts; return parseInitializer(true); } function fillSignature(returnToken, yieldAndGeneratorParameterContext, requireCompleteParameterList, signature) { - var returnTokenRequired = returnToken === 32 /* EqualsGreaterThanToken */; + var returnTokenRequired = returnToken === 32; signature.typeParameters = parseTypeParameters(); signature.parameters = parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList); if (returnTokenRequired) { @@ -5190,15 +5236,15 @@ var ts; } } function parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList) { - if (parseExpected(16 /* OpenParenToken */)) { + if (parseExpected(16)) { var savedYieldContext = inYieldContext(); var savedGeneratorParameterContext = inGeneratorParameterContext(); setYieldContext(yieldAndGeneratorParameterContext); setGeneratorParameterContext(yieldAndGeneratorParameterContext); - var result = parseDelimitedList(15 /* Parameters */, parseParameter); + var result = parseDelimitedList(15, parseParameter); setYieldContext(savedYieldContext); setGeneratorParameterContext(savedGeneratorParameterContext); - if (!parseExpected(17 /* CloseParenToken */) && requireCompleteParameterList) { + if (!parseExpected(17) && requireCompleteParameterList) { return undefined; } return result; @@ -5209,26 +5255,26 @@ var ts; if (parseSemicolon()) { return; } - parseOptional(23 /* CommaToken */); + parseOptional(23); } function parseSignatureMember(kind) { var node = createNode(kind); - if (kind === 133 /* ConstructSignature */) { - parseExpected(87 /* NewKeyword */); + if (kind === 133) { + parseExpected(87); } - fillSignature(51 /* ColonToken */, false, false, node); + fillSignature(51, false, false, node); parseTypeMemberSemicolon(); return finishNode(node); } function isIndexSignature() { - if (token !== 18 /* OpenBracketToken */) { + if (token !== 18) { return false; } return lookAhead(isUnambiguouslyIndexSignature); } function isUnambiguouslyIndexSignature() { nextToken(); - if (token === 21 /* DotDotDotToken */ || token === 19 /* CloseBracketToken */) { + if (token === 21 || token === 19) { return true; } if (ts.isModifier(token)) { @@ -5243,20 +5289,20 @@ var ts; else { nextToken(); } - if (token === 51 /* ColonToken */ || token === 23 /* CommaToken */) { + if (token === 51 || token === 23) { return true; } - if (token !== 50 /* QuestionToken */) { + if (token !== 50) { return false; } nextToken(); - return token === 51 /* ColonToken */ || token === 23 /* CommaToken */ || token === 19 /* CloseBracketToken */; + return token === 51 || token === 23 || token === 19; } function parseIndexSignatureDeclaration(modifiers) { var fullStart = modifiers ? modifiers.pos : scanner.getStartPos(); - var node = createNode(134 /* IndexSignature */, fullStart); + var node = createNode(134, fullStart); setModifiers(node, modifiers); - node.parameters = parseBracketedList(15 /* Parameters */, parseParameter, 18 /* OpenBracketToken */, 19 /* CloseBracketToken */); + node.parameters = parseBracketedList(15, parseParameter, 18, 19); node.type = parseTypeAnnotation(); parseTypeMemberSemicolon(); return finishNode(node); @@ -5264,17 +5310,17 @@ var ts; function parsePropertyOrMethodSignature() { var fullStart = scanner.getStartPos(); var name = parsePropertyName(); - var questionToken = parseOptionalToken(50 /* QuestionToken */); - if (token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */) { - var method = createNode(127 /* MethodSignature */, fullStart); + var questionToken = parseOptionalToken(50); + if (token === 16 || token === 24) { + var method = createNode(127, fullStart); method.name = name; method.questionToken = questionToken; - fillSignature(51 /* ColonToken */, false, false, method); + fillSignature(51, false, false, method); parseTypeMemberSemicolon(); return finishNode(method); } else { - var property = createNode(125 /* PropertySignature */, fullStart); + var property = createNode(125, fullStart); property.name = name; property.questionToken = questionToken; property.type = parseTypeAnnotation(); @@ -5284,9 +5330,9 @@ var ts; } function isStartOfTypeMember() { switch (token) { - case 16 /* OpenParenToken */: - case 24 /* LessThanToken */: - case 18 /* OpenBracketToken */: + case 16: + case 24: + case 18: return true; default: if (ts.isModifier(token)) { @@ -5306,21 +5352,21 @@ var ts; } function isTypeMemberWithLiteralPropertyName() { nextToken(); - return token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */ || token === 50 /* QuestionToken */ || token === 51 /* ColonToken */ || canParseSemicolon(); + return token === 16 || token === 24 || token === 50 || token === 51 || canParseSemicolon(); } function parseTypeMember() { switch (token) { - case 16 /* OpenParenToken */: - case 24 /* LessThanToken */: - return parseSignatureMember(132 /* CallSignature */); - case 18 /* OpenBracketToken */: + case 16: + case 24: + return parseSignatureMember(132); + case 18: return isIndexSignature() ? parseIndexSignatureDeclaration(undefined) : parsePropertyOrMethodSignature(); - case 87 /* NewKeyword */: + case 87: if (lookAhead(isStartOfConstructSignature)) { - return parseSignatureMember(133 /* ConstructSignature */); + return parseSignatureMember(133); } - case 8 /* StringLiteral */: - case 7 /* NumericLiteral */: + case 8: + case 7: return parsePropertyOrMethodSignature(); default: if (ts.isModifier(token)) { @@ -5340,18 +5386,18 @@ var ts; } function isStartOfConstructSignature() { nextToken(); - return token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */; + return token === 16 || token === 24; } function parseTypeLiteral() { - var node = createNode(139 /* TypeLiteral */); + var node = createNode(139); node.members = parseObjectTypeMembers(); return finishNode(node); } function parseObjectTypeMembers() { var members; - if (parseExpected(14 /* OpenBraceToken */)) { - members = parseList(5 /* TypeMembers */, false, parseTypeMember); - parseExpected(15 /* CloseBraceToken */); + if (parseExpected(14)) { + members = parseList(5, false, parseTypeMember); + parseExpected(15); } else { members = createMissingList(); @@ -5359,46 +5405,46 @@ var ts; return members; } function parseTupleType() { - var node = createNode(141 /* TupleType */); - node.elementTypes = parseBracketedList(18 /* TupleElementTypes */, parseType, 18 /* OpenBracketToken */, 19 /* CloseBracketToken */); + var node = createNode(141); + node.elementTypes = parseBracketedList(18, parseType, 18, 19); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(143 /* ParenthesizedType */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(143); + parseExpected(16); node.type = parseType(); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); return finishNode(node); } function parseFunctionOrConstructorType(kind) { var node = createNode(kind); - if (kind === 137 /* ConstructorType */) { - parseExpected(87 /* NewKeyword */); + if (kind === 137) { + parseExpected(87); } - fillSignature(32 /* EqualsGreaterThanToken */, false, false, node); + fillSignature(32, false, false, node); return finishNode(node); } function parseKeywordAndNoDot() { var node = parseTokenNode(); - return token === 20 /* DotToken */ ? undefined : node; + return token === 20 ? undefined : node; } function parseNonArrayType() { switch (token) { - case 110 /* AnyKeyword */: - case 119 /* StringKeyword */: - case 117 /* NumberKeyword */: - case 111 /* BooleanKeyword */: + case 110: + case 119: + case 117: + case 111: var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); - case 98 /* VoidKeyword */: + case 98: return parseTokenNode(); - case 96 /* TypeOfKeyword */: + case 96: return parseTypeQuery(); - case 14 /* OpenBraceToken */: + case 14: return parseTypeLiteral(); - case 18 /* OpenBracketToken */: + case 18: return parseTupleType(); - case 16 /* OpenParenToken */: + case 16: return parseParenthesizedType(); default: return parseTypeReference(); @@ -5406,18 +5452,18 @@ var ts; } function isStartOfType() { switch (token) { - case 110 /* AnyKeyword */: - case 119 /* StringKeyword */: - case 117 /* NumberKeyword */: - case 111 /* BooleanKeyword */: - case 98 /* VoidKeyword */: - case 96 /* TypeOfKeyword */: - case 14 /* OpenBraceToken */: - case 18 /* OpenBracketToken */: - case 24 /* LessThanToken */: - case 87 /* NewKeyword */: + case 110: + case 119: + case 117: + case 111: + case 98: + case 96: + case 14: + case 18: + case 24: + case 87: return true; - case 16 /* OpenParenToken */: + case 16: return lookAhead(isStartOfParenthesizedOrFunctionType); default: return isIdentifier(); @@ -5425,13 +5471,13 @@ var ts; } function isStartOfParenthesizedOrFunctionType() { nextToken(); - return token === 17 /* CloseParenToken */ || isStartOfParameter() || isStartOfType(); + return token === 17 || isStartOfParameter() || isStartOfType(); } function parseArrayTypeOrHigher() { var type = parseNonArrayType(); - while (!scanner.hasPrecedingLineBreak() && parseOptional(18 /* OpenBracketToken */)) { - parseExpected(19 /* CloseBracketToken */); - var node = createNode(140 /* ArrayType */, type.pos); + while (!scanner.hasPrecedingLineBreak() && parseOptional(18)) { + parseExpected(19); + var node = createNode(140, type.pos); node.elementType = type; type = finishNode(node); } @@ -5439,38 +5485,38 @@ var ts; } function parseUnionTypeOrHigher() { var type = parseArrayTypeOrHigher(); - if (token === 44 /* BarToken */) { + if (token === 44) { var types = [type]; types.pos = type.pos; - while (parseOptional(44 /* BarToken */)) { + while (parseOptional(44)) { types.push(parseArrayTypeOrHigher()); } types.end = getNodeEnd(); - var node = createNode(142 /* UnionType */, type.pos); + var node = createNode(142, type.pos); node.types = types; type = finishNode(node); } return type; } function isStartOfFunctionType() { - if (token === 24 /* LessThanToken */) { + if (token === 24) { return true; } - return token === 16 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType); + return token === 16 && lookAhead(isUnambiguouslyStartOfFunctionType); } function isUnambiguouslyStartOfFunctionType() { nextToken(); - if (token === 17 /* CloseParenToken */ || token === 21 /* DotDotDotToken */) { + if (token === 17 || token === 21) { return true; } if (isIdentifier() || ts.isModifier(token)) { nextToken(); - if (token === 51 /* ColonToken */ || token === 23 /* CommaToken */ || token === 50 /* QuestionToken */ || token === 52 /* EqualsToken */ || isIdentifier() || ts.isModifier(token)) { + if (token === 51 || token === 23 || token === 50 || token === 52 || isIdentifier() || ts.isModifier(token)) { return true; } - if (token === 17 /* CloseParenToken */) { + if (token === 17) { nextToken(); - if (token === 32 /* EqualsGreaterThanToken */) { + if (token === 32) { return true; } } @@ -5489,46 +5535,46 @@ var ts; } function parseTypeWorker() { if (isStartOfFunctionType()) { - return parseFunctionOrConstructorType(136 /* FunctionType */); + return parseFunctionOrConstructorType(136); } - if (token === 87 /* NewKeyword */) { - return parseFunctionOrConstructorType(137 /* ConstructorType */); + if (token === 87) { + return parseFunctionOrConstructorType(137); } return parseUnionTypeOrHigher(); } function parseTypeAnnotation() { - return parseOptional(51 /* ColonToken */) ? parseType() : undefined; + return parseOptional(51) ? parseType() : undefined; } function isStartOfExpression() { switch (token) { - case 92 /* ThisKeyword */: - case 90 /* SuperKeyword */: - case 88 /* NullKeyword */: - case 94 /* TrueKeyword */: - case 79 /* FalseKeyword */: - case 7 /* NumericLiteral */: - case 8 /* StringLiteral */: - case 10 /* NoSubstitutionTemplateLiteral */: - case 11 /* TemplateHead */: - case 16 /* OpenParenToken */: - case 18 /* OpenBracketToken */: - case 14 /* OpenBraceToken */: - case 82 /* FunctionKeyword */: - case 87 /* NewKeyword */: - case 36 /* SlashToken */: - case 56 /* SlashEqualsToken */: - case 33 /* PlusToken */: - case 34 /* MinusToken */: - case 47 /* TildeToken */: - case 46 /* ExclamationToken */: - case 73 /* DeleteKeyword */: - case 96 /* TypeOfKeyword */: - case 98 /* VoidKeyword */: - case 38 /* PlusPlusToken */: - case 39 /* MinusMinusToken */: - case 24 /* LessThanToken */: - case 64 /* Identifier */: - case 109 /* YieldKeyword */: + case 92: + case 90: + case 88: + case 94: + case 79: + case 7: + case 8: + case 10: + case 11: + case 16: + case 18: + case 14: + case 82: + case 87: + case 36: + case 56: + case 33: + case 34: + case 47: + case 46: + case 73: + case 96: + case 98: + case 38: + case 39: + case 24: + case 64: + case 109: return true; default: if (isBinaryOperator()) { @@ -5538,22 +5584,22 @@ var ts; } } function isStartOfExpressionStatement() { - return token !== 14 /* OpenBraceToken */ && token !== 82 /* FunctionKeyword */ && isStartOfExpression(); + return token !== 14 && token !== 82 && isStartOfExpression(); } function parseExpression() { var expr = parseAssignmentExpressionOrHigher(); - while (parseOptional(23 /* CommaToken */)) { - expr = makeBinaryExpression(expr, 23 /* CommaToken */, parseAssignmentExpressionOrHigher()); + while (parseOptional(23)) { + expr = makeBinaryExpression(expr, 23, parseAssignmentExpressionOrHigher()); } return expr; } function parseInitializer(inParameter) { - if (token !== 52 /* EqualsToken */) { - if (scanner.hasPrecedingLineBreak() || (inParameter && token === 14 /* OpenBraceToken */) || !isStartOfExpression()) { + if (token !== 52) { + if (scanner.hasPrecedingLineBreak() || (inParameter && token === 14) || !isStartOfExpression()) { return undefined; } } - parseExpected(52 /* EqualsToken */); + parseExpected(52); return parseAssignmentExpressionOrHigher(); } function parseAssignmentExpressionOrHigher() { @@ -5565,7 +5611,7 @@ var ts; return arrowExpression; } var expr = parseBinaryExpressionOrHigher(0); - if (expr.kind === 64 /* Identifier */ && token === 32 /* EqualsGreaterThanToken */) { + if (expr.kind === 64 && token === 32) { return parseSimpleArrowFunctionExpression(expr); } if (isLeftHandSideExpression(expr) && isAssignmentOperator(reScanGreaterToken())) { @@ -5576,7 +5622,7 @@ var ts; return parseConditionalExpressionRest(expr); } function isYieldExpression() { - if (token === 109 /* YieldKeyword */) { + if (token === 109) { if (inYieldContext()) { return true; } @@ -5592,10 +5638,10 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(166 /* YieldExpression */); + var node = createNode(166); nextToken(); - if (!scanner.hasPrecedingLineBreak() && (token === 35 /* AsteriskToken */ || isStartOfExpression())) { - node.asteriskToken = parseOptionalToken(35 /* AsteriskToken */); + if (!scanner.hasPrecedingLineBreak() && (token === 35 || isStartOfExpression())) { + node.asteriskToken = parseOptionalToken(35); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } @@ -5604,28 +5650,28 @@ var ts; } } function parseSimpleArrowFunctionExpression(identifier) { - ts.Debug.assert(token === 32 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - var node = createNode(157 /* ArrowFunction */, identifier.pos); - var parameter = createNode(124 /* Parameter */, identifier.pos); + ts.Debug.assert(token === 32, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + var node = createNode(157, identifier.pos); + var parameter = createNode(124, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = [parameter]; node.parameters.pos = parameter.pos; node.parameters.end = parameter.end; - parseExpected(32 /* EqualsGreaterThanToken */); + parseExpected(32); node.body = parseArrowFunctionExpressionBody(); return finishNode(node); } function tryParseParenthesizedArrowFunctionExpression() { var triState = isParenthesizedArrowFunctionExpression(); - if (triState === 0 /* False */) { + if (triState === 0) { return undefined; } - var arrowFunction = triState === 1 /* True */ ? parseParenthesizedArrowFunctionExpressionHead(true) : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); + var arrowFunction = triState === 1 ? parseParenthesizedArrowFunctionExpressionHead(true) : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); if (!arrowFunction) { return undefined; } - if (parseExpected(32 /* EqualsGreaterThanToken */) || token === 14 /* OpenBraceToken */) { + if (parseExpected(32) || token === 14) { arrowFunction.body = parseArrowFunctionExpressionBody(); } else { @@ -5634,79 +5680,79 @@ var ts; return finishNode(arrowFunction); } function isParenthesizedArrowFunctionExpression() { - if (token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */) { + if (token === 16 || token === 24) { return lookAhead(isParenthesizedArrowFunctionExpressionWorker); } - if (token === 32 /* EqualsGreaterThanToken */) { - return 1 /* True */; + if (token === 32) { + return 1; } - return 0 /* False */; + return 0; } function isParenthesizedArrowFunctionExpressionWorker() { var first = token; var second = nextToken(); - if (first === 16 /* OpenParenToken */) { - if (second === 17 /* CloseParenToken */) { + if (first === 16) { + if (second === 17) { var third = nextToken(); switch (third) { - case 32 /* EqualsGreaterThanToken */: - case 51 /* ColonToken */: - case 14 /* OpenBraceToken */: - return 1 /* True */; + case 32: + case 51: + case 14: + return 1; default: - return 0 /* False */; + return 0; } } - if (second === 21 /* DotDotDotToken */) { - return 1 /* True */; + if (second === 21) { + return 1; } if (!isIdentifier()) { - return 0 /* False */; + return 0; } - if (nextToken() === 51 /* ColonToken */) { - return 1 /* True */; + if (nextToken() === 51) { + return 1; } - return 2 /* Unknown */; + return 2; } else { - ts.Debug.assert(first === 24 /* LessThanToken */); + ts.Debug.assert(first === 24); if (!isIdentifier()) { - return 0 /* False */; + return 0; } - return 2 /* Unknown */; + return 2; } } function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(false); } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNode(157 /* ArrowFunction */); - fillSignature(51 /* ColonToken */, false, !allowAmbiguity, node); + var node = createNode(157); + fillSignature(51, false, !allowAmbiguity, node); if (!node.parameters) { return undefined; } - if (!allowAmbiguity && token !== 32 /* EqualsGreaterThanToken */ && token !== 14 /* OpenBraceToken */) { + if (!allowAmbiguity && token !== 32 && token !== 14) { return undefined; } return node; } function parseArrowFunctionExpressionBody() { - if (token === 14 /* OpenBraceToken */) { + if (token === 14) { return parseFunctionBlock(false, false); } - if (isStartOfStatement(true) && !isStartOfExpressionStatement() && token !== 82 /* FunctionKeyword */) { + if (isStartOfStatement(true) && !isStartOfExpressionStatement() && token !== 82) { return parseFunctionBlock(false, true); } return parseAssignmentExpressionOrHigher(); } function parseConditionalExpressionRest(leftOperand) { - if (!parseOptional(50 /* QuestionToken */)) { + if (!parseOptional(50)) { return leftOperand; } - var node = createNode(164 /* ConditionalExpression */, leftOperand.pos); + var node = createNode(164, leftOperand.pos); node.condition = leftOperand; node.whenTrue = allowInAnd(parseAssignmentExpressionOrHigher); - parseExpected(51 /* ColonToken */); + parseExpected(51); node.whenFalse = parseAssignmentExpressionOrHigher(); return finishNode(node); } @@ -5721,7 +5767,7 @@ var ts; if (newPrecedence <= precedence) { break; } - if (token === 85 /* InKeyword */ && inDisallowInContext()) { + if (token === 85 && inDisallowInContext()) { break; } var operator = token; @@ -5731,97 +5777,97 @@ var ts; return leftOperand; } function isBinaryOperator() { - if (inDisallowInContext() && token === 85 /* InKeyword */) { + if (inDisallowInContext() && token === 85) { return false; } return getBinaryOperatorPrecedence() > 0; } function getBinaryOperatorPrecedence() { switch (token) { - case 49 /* BarBarToken */: + case 49: return 1; - case 48 /* AmpersandAmpersandToken */: + case 48: return 2; - case 44 /* BarToken */: + case 44: return 3; - case 45 /* CaretToken */: + case 45: return 4; - case 43 /* AmpersandToken */: + case 43: return 5; - case 28 /* EqualsEqualsToken */: - case 29 /* ExclamationEqualsToken */: - case 30 /* EqualsEqualsEqualsToken */: - case 31 /* ExclamationEqualsEqualsToken */: + case 28: + case 29: + case 30: + case 31: return 6; - case 24 /* LessThanToken */: - case 25 /* GreaterThanToken */: - case 26 /* LessThanEqualsToken */: - case 27 /* GreaterThanEqualsToken */: - case 86 /* InstanceOfKeyword */: - case 85 /* InKeyword */: + case 24: + case 25: + case 26: + case 27: + case 86: + case 85: return 7; - case 40 /* LessThanLessThanToken */: - case 41 /* GreaterThanGreaterThanToken */: - case 42 /* GreaterThanGreaterThanGreaterThanToken */: + case 40: + case 41: + case 42: return 8; - case 33 /* PlusToken */: - case 34 /* MinusToken */: + case 33: + case 34: return 9; - case 35 /* AsteriskToken */: - case 36 /* SlashToken */: - case 37 /* PercentToken */: + case 35: + case 36: + case 37: return 10; } return -1; } function makeBinaryExpression(left, operator, right) { - var node = createNode(163 /* BinaryExpression */, left.pos); + var node = createNode(163, left.pos); node.left = left; node.operator = operator; node.right = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(161 /* PrefixUnaryExpression */); + var node = createNode(161); node.operator = token; nextToken(); node.operand = parseUnaryExpressionOrHigher(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(158 /* DeleteExpression */); + var node = createNode(158); nextToken(); node.expression = parseUnaryExpressionOrHigher(); return finishNode(node); } function parseTypeOfExpression() { - var node = createNode(159 /* TypeOfExpression */); + var node = createNode(159); nextToken(); node.expression = parseUnaryExpressionOrHigher(); return finishNode(node); } function parseVoidExpression() { - var node = createNode(160 /* VoidExpression */); + var node = createNode(160); nextToken(); node.expression = parseUnaryExpressionOrHigher(); return finishNode(node); } function parseUnaryExpressionOrHigher() { switch (token) { - case 33 /* PlusToken */: - case 34 /* MinusToken */: - case 47 /* TildeToken */: - case 46 /* ExclamationToken */: - case 38 /* PlusPlusToken */: - case 39 /* MinusMinusToken */: + case 33: + case 34: + case 47: + case 46: + case 38: + case 39: return parsePrefixUnaryExpression(); - case 73 /* DeleteKeyword */: + case 73: return parseDeleteExpression(); - case 96 /* TypeOfKeyword */: + case 96: return parseTypeOfExpression(); - case 98 /* VoidKeyword */: + case 98: return parseVoidExpression(); - case 24 /* LessThanToken */: + case 24: return parseTypeAssertion(); default: return parsePostfixExpressionOrHigher(); @@ -5830,8 +5876,8 @@ var ts; function parsePostfixExpressionOrHigher() { var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(isLeftHandSideExpression(expression)); - if ((token === 38 /* PlusPlusToken */ || token === 39 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(162 /* PostfixUnaryExpression */, expression.pos); + if ((token === 38 || token === 39) && !scanner.hasPrecedingLineBreak()) { + var node = createNode(162, expression.pos); node.operand = expression; node.operator = token; nextToken(); @@ -5840,7 +5886,7 @@ var ts; return expression; } function parseLeftHandSideExpressionOrHigher() { - var expression = token === 90 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher(); + var expression = token === 90 ? parseSuperExpression() : parseMemberExpressionOrHigher(); return parseCallExpressionRest(expression); } function parseMemberExpressionOrHigher() { @@ -5849,51 +5895,51 @@ var ts; } function parseSuperExpression() { var expression = parseTokenNode(); - if (token === 16 /* OpenParenToken */ || token === 20 /* DotToken */) { + if (token === 16 || token === 20) { return expression; } - var node = createNode(149 /* PropertyAccessExpression */, expression.pos); + var node = createNode(149, expression.pos); node.expression = expression; - parseExpected(20 /* DotToken */, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + parseExpected(20, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); return finishNode(node); } function parseTypeAssertion() { - var node = createNode(154 /* TypeAssertionExpression */); - parseExpected(24 /* LessThanToken */); + var node = createNode(154); + parseExpected(24); node.type = parseType(); - parseExpected(25 /* GreaterThanToken */); + parseExpected(25); node.expression = parseUnaryExpressionOrHigher(); return finishNode(node); } function parseMemberExpressionRest(expression) { while (true) { var dotOrBracketStart = scanner.getTokenPos(); - if (parseOptional(20 /* DotToken */)) { - var propertyAccess = createNode(149 /* PropertyAccessExpression */, expression.pos); + if (parseOptional(20)) { + var propertyAccess = createNode(149, expression.pos); propertyAccess.expression = expression; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; } - if (parseOptional(18 /* OpenBracketToken */)) { - var indexedAccess = createNode(150 /* ElementAccessExpression */, expression.pos); + if (parseOptional(18)) { + var indexedAccess = createNode(150, expression.pos); indexedAccess.expression = expression; - if (token !== 19 /* CloseBracketToken */) { + if (token !== 19) { indexedAccess.argumentExpression = allowInAnd(parseExpression); - if (indexedAccess.argumentExpression.kind === 8 /* StringLiteral */ || indexedAccess.argumentExpression.kind === 7 /* NumericLiteral */) { + if (indexedAccess.argumentExpression.kind === 8 || indexedAccess.argumentExpression.kind === 7) { var literal = indexedAccess.argumentExpression; literal.text = internIdentifier(literal.text); } } - parseExpected(19 /* CloseBracketToken */); + parseExpected(19); expression = finishNode(indexedAccess); continue; } - if (token === 10 /* NoSubstitutionTemplateLiteral */ || token === 11 /* TemplateHead */) { - var tagExpression = createNode(153 /* TaggedTemplateExpression */, expression.pos); + if (token === 10 || token === 11) { + var tagExpression = createNode(153, expression.pos); tagExpression.tag = expression; - tagExpression.template = token === 10 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() : parseTemplateExpression(); + tagExpression.template = token === 10 ? parseLiteralNode() : parseTemplateExpression(); expression = finishNode(tagExpression); continue; } @@ -5903,20 +5949,20 @@ var ts; function parseCallExpressionRest(expression) { while (true) { expression = parseMemberExpressionRest(expression); - if (token === 24 /* LessThanToken */) { + if (token === 24) { var typeArguments = tryParse(parseTypeArgumentsInExpression); if (!typeArguments) { return expression; } - var callExpr = createNode(151 /* CallExpression */, expression.pos); + var callExpr = createNode(151, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } - else if (token === 16 /* OpenParenToken */) { - var callExpr = createNode(151 /* CallExpression */, expression.pos); + else if (token === 16) { + var callExpr = createNode(151, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -5926,42 +5972,42 @@ var ts; } } function parseArgumentList() { - parseExpected(16 /* OpenParenToken */); - var result = parseDelimitedList(12 /* ArgumentExpressions */, parseArgumentExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(16); + var result = parseDelimitedList(12, parseArgumentExpression); + parseExpected(17); return result; } function parseTypeArgumentsInExpression() { - if (!parseOptional(24 /* LessThanToken */)) { + if (!parseOptional(24)) { return undefined; } - var typeArguments = parseDelimitedList(17 /* TypeArguments */, parseType); - if (!parseExpected(25 /* GreaterThanToken */)) { + var typeArguments = parseDelimitedList(17, parseType); + if (!parseExpected(25)) { return undefined; } return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : undefined; } function canFollowTypeArgumentsInExpression() { switch (token) { - case 16 /* OpenParenToken */: - case 20 /* DotToken */: - case 17 /* CloseParenToken */: - case 19 /* CloseBracketToken */: - case 51 /* ColonToken */: - case 22 /* SemicolonToken */: - case 23 /* CommaToken */: - case 50 /* QuestionToken */: - case 28 /* EqualsEqualsToken */: - case 30 /* EqualsEqualsEqualsToken */: - case 29 /* ExclamationEqualsToken */: - case 31 /* ExclamationEqualsEqualsToken */: - case 48 /* AmpersandAmpersandToken */: - case 49 /* BarBarToken */: - case 45 /* CaretToken */: - case 43 /* AmpersandToken */: - case 44 /* BarToken */: - case 15 /* CloseBraceToken */: - case 1 /* EndOfFileToken */: + case 16: + case 20: + case 17: + case 19: + case 51: + case 22: + case 23: + case 50: + case 28: + case 30: + case 29: + case 31: + case 48: + case 49: + case 45: + case 43: + case 44: + case 15: + case 1: return true; default: return false; @@ -5969,74 +6015,74 @@ var ts; } function parsePrimaryExpression() { switch (token) { - case 7 /* NumericLiteral */: - case 8 /* StringLiteral */: - case 10 /* NoSubstitutionTemplateLiteral */: + case 7: + case 8: + case 10: return parseLiteralNode(); - case 92 /* ThisKeyword */: - case 90 /* SuperKeyword */: - case 88 /* NullKeyword */: - case 94 /* TrueKeyword */: - case 79 /* FalseKeyword */: + case 92: + case 90: + case 88: + case 94: + case 79: return parseTokenNode(); - case 16 /* OpenParenToken */: + case 16: return parseParenthesizedExpression(); - case 18 /* OpenBracketToken */: + case 18: return parseArrayLiteralExpression(); - case 14 /* OpenBraceToken */: + case 14: return parseObjectLiteralExpression(); - case 82 /* FunctionKeyword */: + case 82: return parseFunctionExpression(); - case 87 /* NewKeyword */: + case 87: return parseNewExpression(); - case 36 /* SlashToken */: - case 56 /* SlashEqualsToken */: - if (reScanSlashToken() === 9 /* RegularExpressionLiteral */) { + case 36: + case 56: + if (reScanSlashToken() === 9) { return parseLiteralNode(); } break; - case 11 /* TemplateHead */: + case 11: return parseTemplateExpression(); } return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNode(155 /* ParenthesizedExpression */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(155); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); return finishNode(node); } function parseAssignmentExpressionOrOmittedExpression() { - return token === 23 /* CommaToken */ ? createNode(168 /* OmittedExpression */) : parseAssignmentExpressionOrHigher(); + return token === 23 ? createNode(168) : parseAssignmentExpressionOrHigher(); } function parseSpreadElement() { - var node = createNode(167 /* SpreadElementExpression */); - parseExpected(21 /* DotDotDotToken */); + var node = createNode(167); + parseExpected(21); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArrayLiteralElement() { - return token === 21 /* DotDotDotToken */ ? parseSpreadElement() : parseAssignmentExpressionOrOmittedExpression(); + return token === 21 ? parseSpreadElement() : parseAssignmentExpressionOrOmittedExpression(); } function parseArgumentExpression() { return allowInAnd(parseAssignmentExpressionOrOmittedExpression); } function parseArrayLiteralExpression() { - var node = createNode(147 /* ArrayLiteralExpression */); - parseExpected(18 /* OpenBracketToken */); + var node = createNode(147); + parseExpected(18); if (scanner.hasPrecedingLineBreak()) - node.flags |= 256 /* MultiLine */; - node.elements = parseDelimitedList(14 /* ArrayLiteralMembers */, parseArrayLiteralElement); - parseExpected(19 /* CloseBracketToken */); + node.flags |= 256; + node.elements = parseDelimitedList(14, parseArrayLiteralElement); + parseExpected(19); return finishNode(node); } function tryParseAccessorDeclaration(fullStart, modifiers) { - if (parseContextualModifier(114 /* GetKeyword */)) { - return parseAccessorDeclaration(130 /* GetAccessor */, fullStart, modifiers); + if (parseContextualModifier(114)) { + return parseAccessorDeclaration(130, fullStart, modifiers); } - else if (parseContextualModifier(118 /* SetKeyword */)) { - return parseAccessorDeclaration(131 /* SetAccessor */, fullStart, modifiers); + else if (parseContextualModifier(118)) { + return parseAccessorDeclaration(131, fullStart, modifiers); } return undefined; } @@ -6047,45 +6093,45 @@ var ts; if (accessor) { return accessor; } - var asteriskToken = parseOptionalToken(35 /* AsteriskToken */); + var asteriskToken = parseOptionalToken(35); var tokenIsIdentifier = isIdentifier(); var nameToken = token; var propertyName = parsePropertyName(); - var questionToken = parseOptionalToken(50 /* QuestionToken */); - if (asteriskToken || token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */) { + var questionToken = parseOptionalToken(50); + if (asteriskToken || token === 16 || token === 24) { return parseMethodDeclaration(fullStart, modifiers, asteriskToken, propertyName, questionToken); } - if ((token === 23 /* CommaToken */ || token === 15 /* CloseBraceToken */) && tokenIsIdentifier) { - var shorthandDeclaration = createNode(205 /* ShorthandPropertyAssignment */, fullStart); + if ((token === 23 || token === 15) && tokenIsIdentifier) { + var shorthandDeclaration = createNode(205, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; return finishNode(shorthandDeclaration); } else { - var propertyAssignment = createNode(204 /* PropertyAssignment */, fullStart); + var propertyAssignment = createNode(204, fullStart); propertyAssignment.name = propertyName; propertyAssignment.questionToken = questionToken; - parseExpected(51 /* ColonToken */); + parseExpected(51); propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher); return finishNode(propertyAssignment); } } function parseObjectLiteralExpression() { - var node = createNode(148 /* ObjectLiteralExpression */); - parseExpected(14 /* OpenBraceToken */); + var node = createNode(148); + parseExpected(14); if (scanner.hasPrecedingLineBreak()) { - node.flags |= 256 /* MultiLine */; + node.flags |= 256; } - node.properties = parseDelimitedList(13 /* ObjectLiteralMembers */, parseObjectLiteralElement); - parseExpected(15 /* CloseBraceToken */); + node.properties = parseDelimitedList(13, parseObjectLiteralElement); + parseExpected(15); return finishNode(node); } function parseFunctionExpression() { - var node = createNode(156 /* FunctionExpression */); - parseExpected(82 /* FunctionKeyword */); - node.asteriskToken = parseOptionalToken(35 /* AsteriskToken */); + var node = createNode(156); + parseExpected(82); + node.asteriskToken = parseOptionalToken(35); node.name = node.asteriskToken ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier(); - fillSignature(51 /* ColonToken */, !!node.asteriskToken, false, node); + fillSignature(51, !!node.asteriskToken, false, node); node.body = parseFunctionBlock(!!node.asteriskToken, false); return finishNode(node); } @@ -6093,20 +6139,20 @@ var ts; return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpression() { - var node = createNode(152 /* NewExpression */); - parseExpected(87 /* NewKeyword */); + var node = createNode(152); + parseExpected(87); node.expression = parseMemberExpressionOrHigher(); node.typeArguments = tryParse(parseTypeArgumentsInExpression); - if (node.typeArguments || token === 16 /* OpenParenToken */) { + if (node.typeArguments || token === 16) { node.arguments = parseArgumentList(); } return finishNode(node); } function parseBlock(ignoreMissingOpenBrace, checkForStrictMode, diagnosticMessage) { - var node = createNode(170 /* Block */); - if (parseExpected(14 /* OpenBraceToken */, diagnosticMessage) || ignoreMissingOpenBrace) { - node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); - parseExpected(15 /* CloseBraceToken */); + var node = createNode(170); + if (parseExpected(14, diagnosticMessage) || ignoreMissingOpenBrace) { + node.statements = parseList(2, checkForStrictMode, parseStatement); + parseExpected(15); } else { node.statements = createMissingList(); @@ -6121,47 +6167,47 @@ var ts; return block; } function parseEmptyStatement() { - var node = createNode(172 /* EmptyStatement */); - parseExpected(22 /* SemicolonToken */); + var node = createNode(172); + parseExpected(22); return finishNode(node); } function parseIfStatement() { - var node = createNode(174 /* IfStatement */); - parseExpected(83 /* IfKeyword */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(174); + parseExpected(83); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); node.thenStatement = parseStatement(); - node.elseStatement = parseOptional(75 /* ElseKeyword */) ? parseStatement() : undefined; + node.elseStatement = parseOptional(75) ? parseStatement() : undefined; return finishNode(node); } function parseDoStatement() { - var node = createNode(175 /* DoStatement */); - parseExpected(74 /* DoKeyword */); + var node = createNode(175); + parseExpected(74); node.statement = parseStatement(); - parseExpected(99 /* WhileKeyword */); - parseExpected(16 /* OpenParenToken */); + parseExpected(99); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); - parseOptional(22 /* SemicolonToken */); + parseExpected(17); + parseOptional(22); return finishNode(node); } function parseWhileStatement() { - var node = createNode(176 /* WhileStatement */); - parseExpected(99 /* WhileKeyword */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(176); + parseExpected(99); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); node.statement = parseStatement(); return finishNode(node); } function parseForOrForInStatement() { var pos = getNodePos(); - parseExpected(81 /* ForKeyword */); - parseExpected(16 /* OpenParenToken */); + parseExpected(81); + parseExpected(16); var initializer = undefined; - if (token !== 22 /* SemicolonToken */) { - if (token === 97 /* VarKeyword */ || token === 103 /* LetKeyword */ || token === 69 /* ConstKeyword */) { + if (token !== 22) { + if (token === 97 || token === 103 || token === 69) { initializer = parseVariableDeclarationList(true); } else { @@ -6169,25 +6215,25 @@ var ts; } } var forOrForInStatement; - if (parseOptional(85 /* InKeyword */)) { - var forInStatement = createNode(178 /* ForInStatement */, pos); + if (parseOptional(85)) { + var forInStatement = createNode(178, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); forOrForInStatement = forInStatement; } else { - var forStatement = createNode(177 /* ForStatement */, pos); + var forStatement = createNode(177, pos); forStatement.initializer = initializer; - parseExpected(22 /* SemicolonToken */); - if (token !== 22 /* SemicolonToken */ && token !== 17 /* CloseParenToken */) { + parseExpected(22); + if (token !== 22 && token !== 17) { forStatement.condition = allowInAnd(parseExpression); } - parseExpected(22 /* SemicolonToken */); - if (token !== 17 /* CloseParenToken */) { + parseExpected(22); + if (token !== 17) { forStatement.iterator = allowInAnd(parseExpression); } - parseExpected(17 /* CloseParenToken */); + parseExpected(17); forOrForInStatement = forStatement; } forOrForInStatement.statement = parseStatement(); @@ -6195,7 +6241,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 180 /* BreakStatement */ ? 65 /* BreakKeyword */ : 70 /* ContinueKeyword */); + parseExpected(kind === 180 ? 65 : 70); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -6203,8 +6249,8 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(181 /* ReturnStatement */); - parseExpected(89 /* ReturnKeyword */); + var node = createNode(181); + parseExpected(89); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); } @@ -6212,88 +6258,88 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(182 /* WithStatement */); - parseExpected(100 /* WithKeyword */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(182); + parseExpected(100); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); node.statement = parseStatement(); return finishNode(node); } function parseCaseClause() { - var node = createNode(200 /* CaseClause */); - parseExpected(66 /* CaseKeyword */); + var node = createNode(200); + parseExpected(66); node.expression = allowInAnd(parseExpression); - parseExpected(51 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + parseExpected(51); + node.statements = parseList(4, false, parseStatement); return finishNode(node); } function parseDefaultClause() { - var node = createNode(201 /* DefaultClause */); - parseExpected(72 /* DefaultKeyword */); - parseExpected(51 /* ColonToken */); - node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + var node = createNode(201); + parseExpected(72); + parseExpected(51); + node.statements = parseList(4, false, parseStatement); return finishNode(node); } function parseCaseOrDefaultClause() { - return token === 66 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); + return token === 66 ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(183 /* SwitchStatement */); - parseExpected(91 /* SwitchKeyword */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(183); + parseExpected(91); + parseExpected(16); node.expression = allowInAnd(parseExpression); - parseExpected(17 /* CloseParenToken */); - parseExpected(14 /* OpenBraceToken */); - node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); - parseExpected(15 /* CloseBraceToken */); + parseExpected(17); + parseExpected(14); + node.clauses = parseList(3, false, parseCaseOrDefaultClause); + parseExpected(15); return finishNode(node); } function parseThrowStatement() { - var node = createNode(185 /* ThrowStatement */); - parseExpected(93 /* ThrowKeyword */); + var node = createNode(185); + parseExpected(93); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } function parseTryStatement() { - var node = createNode(186 /* TryStatement */); - parseExpected(95 /* TryKeyword */); + var node = createNode(186); + parseExpected(95); node.tryBlock = parseBlock(false, false); - node.catchClause = token === 67 /* CatchKeyword */ ? parseCatchClause() : undefined; - if (!node.catchClause || token === 80 /* FinallyKeyword */) { - parseExpected(80 /* FinallyKeyword */); + node.catchClause = token === 67 ? parseCatchClause() : undefined; + if (!node.catchClause || token === 80) { + parseExpected(80); node.finallyBlock = parseBlock(false, false); } return finishNode(node); } function parseCatchClause() { - var result = createNode(203 /* CatchClause */); - parseExpected(67 /* CatchKeyword */); - parseExpected(16 /* OpenParenToken */); + var result = createNode(203); + parseExpected(67); + parseExpected(16); result.name = parseIdentifier(); result.type = parseTypeAnnotation(); - parseExpected(17 /* CloseParenToken */); + parseExpected(17); result.block = parseBlock(false, false); return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(187 /* DebuggerStatement */); - parseExpected(71 /* DebuggerKeyword */); + var node = createNode(187); + parseExpected(71); parseSemicolon(); return finishNode(node); } function parseExpressionOrLabeledStatement() { var fullStart = scanner.getStartPos(); var expression = allowInAnd(parseExpression); - if (expression.kind === 64 /* Identifier */ && parseOptional(51 /* ColonToken */)) { - var labeledStatement = createNode(184 /* LabeledStatement */, fullStart); + if (expression.kind === 64 && parseOptional(51)) { + var labeledStatement = createNode(184, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); return finishNode(labeledStatement); } else { - var expressionStatement = createNode(173 /* ExpressionStatement */, fullStart); + var expressionStatement = createNode(173, fullStart); expressionStatement.expression = expression; parseSemicolon(); return finishNode(expressionStatement); @@ -6307,42 +6353,42 @@ var ts; } } switch (token) { - case 22 /* SemicolonToken */: + case 22: return !inErrorRecovery; - case 14 /* OpenBraceToken */: - case 97 /* VarKeyword */: - case 103 /* LetKeyword */: - case 82 /* FunctionKeyword */: - case 83 /* IfKeyword */: - case 74 /* DoKeyword */: - case 99 /* WhileKeyword */: - case 81 /* ForKeyword */: - case 70 /* ContinueKeyword */: - case 65 /* BreakKeyword */: - case 89 /* ReturnKeyword */: - case 100 /* WithKeyword */: - case 91 /* SwitchKeyword */: - case 93 /* ThrowKeyword */: - case 95 /* TryKeyword */: - case 71 /* DebuggerKeyword */: - case 67 /* CatchKeyword */: - case 80 /* FinallyKeyword */: + case 14: + case 97: + case 103: + case 82: + case 83: + case 74: + case 99: + case 81: + case 70: + case 65: + case 89: + case 100: + case 91: + case 93: + case 95: + case 71: + case 67: + case 80: return true; - case 69 /* ConstKeyword */: + case 69: var isConstEnum = lookAhead(nextTokenIsEnumKeyword); return !isConstEnum; - case 102 /* InterfaceKeyword */: - case 68 /* ClassKeyword */: - case 115 /* ModuleKeyword */: - case 76 /* EnumKeyword */: - case 120 /* TypeKeyword */: + case 102: + case 68: + case 115: + case 76: + case 120: if (isDeclarationStart()) { return false; } - case 107 /* PublicKeyword */: - case 105 /* PrivateKeyword */: - case 106 /* ProtectedKeyword */: - case 108 /* StaticKeyword */: + case 107: + case 105: + case 106: + case 108: if (lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine)) { return false; } @@ -6352,7 +6398,7 @@ var ts; } function nextTokenIsEnumKeyword() { nextToken(); - return token === 76 /* EnumKeyword */; + return token === 76; } function nextTokenIsIdentifierOrKeywordOnSameLine() { nextToken(); @@ -6360,42 +6406,42 @@ var ts; } function parseStatement() { switch (token) { - case 14 /* OpenBraceToken */: + case 14: return parseBlock(false, false); - case 97 /* VarKeyword */: - case 69 /* ConstKeyword */: + case 97: + case 69: return parseVariableStatement(scanner.getStartPos(), undefined); - case 82 /* FunctionKeyword */: + case 82: return parseFunctionDeclaration(scanner.getStartPos(), undefined); - case 22 /* SemicolonToken */: + case 22: return parseEmptyStatement(); - case 83 /* IfKeyword */: + case 83: return parseIfStatement(); - case 74 /* DoKeyword */: + case 74: return parseDoStatement(); - case 99 /* WhileKeyword */: + case 99: return parseWhileStatement(); - case 81 /* ForKeyword */: + case 81: return parseForOrForInStatement(); - case 70 /* ContinueKeyword */: - return parseBreakOrContinueStatement(179 /* ContinueStatement */); - case 65 /* BreakKeyword */: - return parseBreakOrContinueStatement(180 /* BreakStatement */); - case 89 /* ReturnKeyword */: + case 70: + return parseBreakOrContinueStatement(179); + case 65: + return parseBreakOrContinueStatement(180); + case 89: return parseReturnStatement(); - case 100 /* WithKeyword */: + case 100: return parseWithStatement(); - case 91 /* SwitchKeyword */: + case 91: return parseSwitchStatement(); - case 93 /* ThrowKeyword */: + case 93: return parseThrowStatement(); - case 95 /* TryKeyword */: - case 67 /* CatchKeyword */: - case 80 /* FinallyKeyword */: + case 95: + case 67: + case 80: return parseTryStatement(); - case 71 /* DebuggerKeyword */: + case 71: return parseDebuggerStatement(); - case 103 /* LetKeyword */: + case 103: if (isLetDeclaration()) { return parseVariableStatement(scanner.getStartPos(), undefined); } @@ -6413,49 +6459,49 @@ var ts; var start = scanner.getStartPos(); var modifiers = parseModifiers(); switch (token) { - case 69 /* ConstKeyword */: + case 69: var nextTokenIsEnum = lookAhead(nextTokenIsEnumKeyword); if (nextTokenIsEnum) { return undefined; } return parseVariableStatement(start, modifiers); - case 103 /* LetKeyword */: + case 103: if (!isLetDeclaration()) { return undefined; } return parseVariableStatement(start, modifiers); - case 97 /* VarKeyword */: + case 97: return parseVariableStatement(start, modifiers); - case 82 /* FunctionKeyword */: + case 82: return parseFunctionDeclaration(start, modifiers); } return undefined; } function parseFunctionBlockOrSemicolon(isGenerator, diagnosticMessage) { - if (token !== 14 /* OpenBraceToken */ && canParseSemicolon()) { + if (token !== 14 && canParseSemicolon()) { parseSemicolon(); return; } return parseFunctionBlock(isGenerator, false, diagnosticMessage); } function parseArrayBindingElement() { - if (token === 23 /* CommaToken */) { - return createNode(168 /* OmittedExpression */); + if (token === 23) { + return createNode(168); } - var node = createNode(146 /* BindingElement */); - node.dotDotDotToken = parseOptionalToken(21 /* DotDotDotToken */); + var node = createNode(146); + node.dotDotDotToken = parseOptionalToken(21); node.name = parseIdentifierOrPattern(); node.initializer = parseInitializer(false); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(146 /* BindingElement */); + var node = createNode(146); var id = parsePropertyName(); - if (id.kind === 64 /* Identifier */ && token !== 51 /* ColonToken */) { + if (id.kind === 64 && token !== 51) { node.name = id; } else { - parseExpected(51 /* ColonToken */); + parseExpected(51); node.propertyName = id; node.name = parseIdentifierOrPattern(); } @@ -6463,48 +6509,48 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(144 /* ObjectBindingPattern */); - parseExpected(14 /* OpenBraceToken */); - node.elements = parseDelimitedList(10 /* ObjectBindingElements */, parseObjectBindingElement); - parseExpected(15 /* CloseBraceToken */); + var node = createNode(144); + parseExpected(14); + node.elements = parseDelimitedList(10, parseObjectBindingElement); + parseExpected(15); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(145 /* ArrayBindingPattern */); - parseExpected(18 /* OpenBracketToken */); - node.elements = parseDelimitedList(11 /* ArrayBindingElements */, parseArrayBindingElement); - parseExpected(19 /* CloseBracketToken */); + var node = createNode(145); + parseExpected(18); + node.elements = parseDelimitedList(11, parseArrayBindingElement); + parseExpected(19); return finishNode(node); } function isIdentifierOrPattern() { - return token === 14 /* OpenBraceToken */ || token === 18 /* OpenBracketToken */ || isIdentifier(); + return token === 14 || token === 18 || isIdentifier(); } function parseIdentifierOrPattern() { - if (token === 18 /* OpenBracketToken */) { + if (token === 18) { return parseArrayBindingPattern(); } - if (token === 14 /* OpenBraceToken */) { + if (token === 14) { return parseObjectBindingPattern(); } return parseIdentifier(); } function parseVariableDeclaration() { - var node = createNode(188 /* VariableDeclaration */); + var node = createNode(188); node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); node.initializer = parseInitializer(false); return finishNode(node); } function parseVariableDeclarationList(disallowIn) { - var node = createNode(189 /* VariableDeclarationList */); + var node = createNode(189); switch (token) { - case 97 /* VarKeyword */: + case 97: break; - case 103 /* LetKeyword */: - node.flags |= 2048 /* Let */; + case 103: + node.flags |= 2048; break; - case 69 /* ConstKeyword */: - node.flags |= 4096 /* Const */; + case 69: + node.flags |= 4096; break; default: ts.Debug.fail(); @@ -6512,54 +6558,54 @@ var ts; nextToken(); var savedDisallowIn = inDisallowInContext(); setDisallowInContext(disallowIn); - node.declarations = parseDelimitedList(9 /* VariableDeclarations */, parseVariableDeclaration); + node.declarations = parseDelimitedList(9, parseVariableDeclaration); setDisallowInContext(savedDisallowIn); return finishNode(node); } function parseVariableStatement(fullStart, modifiers) { - var node = createNode(171 /* VariableStatement */, fullStart); + var node = createNode(171, fullStart); setModifiers(node, modifiers); node.declarationList = parseVariableDeclarationList(false); parseSemicolon(); return finishNode(node); } function parseFunctionDeclaration(fullStart, modifiers) { - var node = createNode(190 /* FunctionDeclaration */, fullStart); + var node = createNode(190, fullStart); setModifiers(node, modifiers); - parseExpected(82 /* FunctionKeyword */); - node.asteriskToken = parseOptionalToken(35 /* AsteriskToken */); + parseExpected(82); + node.asteriskToken = parseOptionalToken(35); node.name = parseIdentifier(); - fillSignature(51 /* ColonToken */, !!node.asteriskToken, false, node); + fillSignature(51, !!node.asteriskToken, false, node); node.body = parseFunctionBlockOrSemicolon(!!node.asteriskToken, ts.Diagnostics.or_expected); return finishNode(node); } function parseConstructorDeclaration(pos, modifiers) { - var node = createNode(129 /* Constructor */, pos); + var node = createNode(129, pos); setModifiers(node, modifiers); - parseExpected(112 /* ConstructorKeyword */); - fillSignature(51 /* ColonToken */, false, false, node); + parseExpected(112); + fillSignature(51, false, false, node); node.body = parseFunctionBlockOrSemicolon(false, ts.Diagnostics.or_expected); return finishNode(node); } function parseMethodDeclaration(fullStart, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { - var method = createNode(128 /* MethodDeclaration */, fullStart); + var method = createNode(128, fullStart); setModifiers(method, modifiers); method.asteriskToken = asteriskToken; method.name = name; method.questionToken = questionToken; - fillSignature(51 /* ColonToken */, !!asteriskToken, false, method); + fillSignature(51, !!asteriskToken, false, method); method.body = parseFunctionBlockOrSemicolon(!!asteriskToken, diagnosticMessage); return finishNode(method); } function parsePropertyOrMethodDeclaration(fullStart, modifiers) { - var asteriskToken = parseOptionalToken(35 /* AsteriskToken */); + var asteriskToken = parseOptionalToken(35); var name = parsePropertyName(); - var questionToken = parseOptionalToken(50 /* QuestionToken */); - if (asteriskToken || token === 16 /* OpenParenToken */ || token === 24 /* LessThanToken */) { + var questionToken = parseOptionalToken(50); + if (asteriskToken || token === 16 || token === 24) { return parseMethodDeclaration(fullStart, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected); } else { - var property = createNode(126 /* PropertyDeclaration */, fullStart); + var property = createNode(126, fullStart); setModifiers(property, modifiers); property.name = name; property.questionToken = questionToken; @@ -6576,7 +6622,7 @@ var ts; var node = createNode(kind, fullStart); setModifiers(node, modifiers); node.name = parsePropertyName(); - fillSignature(51 /* ColonToken */, false, false, node); + fillSignature(51, false, false, node); node.body = parseFunctionBlockOrSemicolon(false); return finishNode(node); } @@ -6586,26 +6632,26 @@ var ts; idToken = token; nextToken(); } - if (token === 35 /* AsteriskToken */) { + if (token === 35) { return true; } if (isLiteralPropertyName()) { idToken = token; nextToken(); } - if (token === 18 /* OpenBracketToken */) { + if (token === 18) { return true; } if (idToken !== undefined) { - if (!ts.isKeyword(idToken) || idToken === 118 /* SetKeyword */ || idToken === 114 /* GetKeyword */) { + if (!ts.isKeyword(idToken) || idToken === 118 || idToken === 114) { return true; } switch (token) { - case 16 /* OpenParenToken */: - case 24 /* LessThanToken */: - case 51 /* ColonToken */: - case 52 /* EqualsToken */: - case 50 /* QuestionToken */: + case 16: + case 24: + case 51: + case 52: + case 50: return true; default: return canParseSemicolon(); @@ -6642,27 +6688,27 @@ var ts; if (accessor) { return accessor; } - if (token === 112 /* ConstructorKeyword */) { + if (token === 112) { return parseConstructorDeclaration(fullStart, modifiers); } if (isIndexSignature()) { return parseIndexSignatureDeclaration(modifiers); } - if (isIdentifierOrKeyword() || token === 8 /* StringLiteral */ || token === 7 /* NumericLiteral */ || token === 35 /* AsteriskToken */ || token === 18 /* OpenBracketToken */) { + if (isIdentifierOrKeyword() || token === 8 || token === 7 || token === 35 || token === 18) { return parsePropertyOrMethodDeclaration(fullStart, modifiers); } ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassDeclaration(fullStart, modifiers) { - var node = createNode(191 /* ClassDeclaration */, fullStart); + var node = createNode(191, fullStart); setModifiers(node, modifiers); - parseExpected(68 /* ClassKeyword */); + parseExpected(68); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(true); - if (parseExpected(14 /* OpenBraceToken */)) { + if (parseExpected(14)) { node.members = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseClassMembers) : parseClassMembers(); - parseExpected(15 /* CloseBraceToken */); + parseExpected(15); } else { node.members = createMissingList(); @@ -6676,28 +6722,28 @@ var ts; return undefined; } function parseHeritageClausesWorker() { - return parseList(19 /* HeritageClauses */, false, parseHeritageClause); + return parseList(19, false, parseHeritageClause); } function parseHeritageClause() { - if (token === 78 /* ExtendsKeyword */ || token === 101 /* ImplementsKeyword */) { - var node = createNode(202 /* HeritageClause */); + if (token === 78 || token === 101) { + var node = createNode(202); node.token = token; nextToken(); - node.types = parseDelimitedList(8 /* TypeReferences */, parseTypeReference); + node.types = parseDelimitedList(8, parseTypeReference); return finishNode(node); } return undefined; } function isHeritageClause() { - return token === 78 /* ExtendsKeyword */ || token === 101 /* ImplementsKeyword */; + return token === 78 || token === 101; } function parseClassMembers() { - return parseList(6 /* ClassMembers */, false, parseClassElement); + return parseList(6, false, parseClassElement); } function parseInterfaceDeclaration(fullStart, modifiers) { - var node = createNode(192 /* InterfaceDeclaration */, fullStart); + var node = createNode(192, fullStart); setModifiers(node, modifiers); - parseExpected(102 /* InterfaceKeyword */); + parseExpected(102); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(false); @@ -6705,29 +6751,29 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(fullStart, modifiers) { - var node = createNode(193 /* TypeAliasDeclaration */, fullStart); + var node = createNode(193, fullStart); setModifiers(node, modifiers); - parseExpected(120 /* TypeKeyword */); + parseExpected(120); node.name = parseIdentifier(); - parseExpected(52 /* EqualsToken */); + parseExpected(52); node.type = parseType(); parseSemicolon(); return finishNode(node); } function parseEnumMember() { - var node = createNode(206 /* EnumMember */, scanner.getStartPos()); + var node = createNode(206, scanner.getStartPos()); node.name = parsePropertyName(); node.initializer = allowInAnd(parseNonParameterInitializer); return finishNode(node); } function parseEnumDeclaration(fullStart, modifiers) { - var node = createNode(194 /* EnumDeclaration */, fullStart); + var node = createNode(194, fullStart); setModifiers(node, modifiers); - parseExpected(76 /* EnumKeyword */); + parseExpected(76); node.name = parseIdentifier(); - if (parseExpected(14 /* OpenBraceToken */)) { - node.members = parseDelimitedList(7 /* EnumMembers */, parseEnumMember); - parseExpected(15 /* CloseBraceToken */); + if (parseExpected(14)) { + node.members = parseDelimitedList(7, parseEnumMember); + parseExpected(15); } else { node.members = createMissingList(); @@ -6735,10 +6781,10 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(196 /* ModuleBlock */, scanner.getStartPos()); - if (parseExpected(14 /* OpenBraceToken */)) { - node.statements = parseList(1 /* ModuleElements */, false, parseModuleElement); - parseExpected(15 /* CloseBraceToken */); + var node = createNode(196, scanner.getStartPos()); + if (parseExpected(14)) { + node.statements = parseList(1, false, parseModuleElement); + parseExpected(15); } else { node.statements = createMissingList(); @@ -6746,36 +6792,36 @@ var ts; return finishNode(node); } function parseInternalModuleTail(fullStart, modifiers, flags) { - var node = createNode(195 /* ModuleDeclaration */, fullStart); + var node = createNode(195, fullStart); setModifiers(node, modifiers); node.flags |= flags; node.name = parseIdentifier(); - node.body = parseOptional(20 /* DotToken */) ? parseInternalModuleTail(getNodePos(), undefined, 1 /* Export */) : parseModuleBlock(); + node.body = parseOptional(20) ? parseInternalModuleTail(getNodePos(), undefined, 1) : parseModuleBlock(); return finishNode(node); } function parseAmbientExternalModuleDeclaration(fullStart, modifiers) { - var node = createNode(195 /* ModuleDeclaration */, fullStart); + var node = createNode(195, fullStart); setModifiers(node, modifiers); node.name = parseLiteralNode(true); node.body = parseModuleBlock(); return finishNode(node); } function parseModuleDeclaration(fullStart, modifiers) { - parseExpected(115 /* ModuleKeyword */); - return token === 8 /* StringLiteral */ ? parseAmbientExternalModuleDeclaration(fullStart, modifiers) : parseInternalModuleTail(fullStart, modifiers, modifiers ? modifiers.flags : 0); + parseExpected(115); + return token === 8 ? parseAmbientExternalModuleDeclaration(fullStart, modifiers) : parseInternalModuleTail(fullStart, modifiers, modifiers ? modifiers.flags : 0); } function isExternalModuleReference() { - return token === 116 /* RequireKeyword */ && lookAhead(nextTokenIsOpenParen); + return token === 116 && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { - return nextToken() === 16 /* OpenParenToken */; + return nextToken() === 16; } function parseImportDeclaration(fullStart, modifiers) { - var node = createNode(197 /* ImportDeclaration */, fullStart); + var node = createNode(197, fullStart); setModifiers(node, modifiers); - parseExpected(84 /* ImportKeyword */); + parseExpected(84); node.name = parseIdentifier(); - parseExpected(52 /* EqualsToken */); + parseExpected(52); node.moduleReference = parseModuleReference(); parseSemicolon(); return finishNode(node); @@ -6784,18 +6830,18 @@ var ts; return isExternalModuleReference() ? parseExternalModuleReference() : parseEntityName(false); } function parseExternalModuleReference() { - var node = createNode(199 /* ExternalModuleReference */); - parseExpected(116 /* RequireKeyword */); - parseExpected(16 /* OpenParenToken */); + var node = createNode(199); + parseExpected(116); + parseExpected(16); node.expression = parseExpression(); - if (node.expression.kind === 8 /* StringLiteral */) { + if (node.expression.kind === 8) { internIdentifier(node.expression.text); } - parseExpected(17 /* CloseParenToken */); + parseExpected(17); return finishNode(node); } function parseExportAssignmentTail(fullStart, modifiers) { - var node = createNode(198 /* ExportAssignment */, fullStart); + var node = createNode(198, fullStart); setModifiers(node, modifiers); node.exportName = parseIdentifier(); parseSemicolon(); @@ -6806,32 +6852,32 @@ var ts; } function isDeclarationStart() { switch (token) { - case 97 /* VarKeyword */: - case 69 /* ConstKeyword */: - case 82 /* FunctionKeyword */: + case 97: + case 69: + case 82: return true; - case 103 /* LetKeyword */: + case 103: return isLetDeclaration(); - case 68 /* ClassKeyword */: - case 102 /* InterfaceKeyword */: - case 76 /* EnumKeyword */: - case 84 /* ImportKeyword */: - case 120 /* TypeKeyword */: + case 68: + case 102: + case 76: + case 84: + case 120: return lookAhead(nextTokenIsIdentifierOrKeyword); - case 115 /* ModuleKeyword */: + case 115: return lookAhead(nextTokenIsIdentifierOrKeywordOrStringLiteral); - case 77 /* ExportKeyword */: + case 77: return lookAhead(nextTokenIsEqualsTokenOrDeclarationStart); - case 113 /* DeclareKeyword */: - case 107 /* PublicKeyword */: - case 105 /* PrivateKeyword */: - case 106 /* ProtectedKeyword */: - case 108 /* StaticKeyword */: + case 113: + case 107: + case 105: + case 106: + case 108: return lookAhead(nextTokenIsDeclarationStart); } } function isIdentifierOrKeyword() { - return token >= 64 /* Identifier */; + return token >= 64; } function nextTokenIsIdentifierOrKeyword() { nextToken(); @@ -6839,11 +6885,11 @@ var ts; } function nextTokenIsIdentifierOrKeywordOrStringLiteral() { nextToken(); - return isIdentifierOrKeyword() || token === 8 /* StringLiteral */; + return isIdentifierOrKeyword() || token === 8; } function nextTokenIsEqualsTokenOrDeclarationStart() { nextToken(); - return token === 52 /* EqualsToken */ || isDeclarationStart(); + return token === 52 || isDeclarationStart(); } function nextTokenIsDeclarationStart() { nextToken(); @@ -6852,30 +6898,30 @@ var ts; function parseDeclaration() { var fullStart = getNodePos(); var modifiers = parseModifiers(); - if (token === 77 /* ExportKeyword */) { + if (token === 77) { nextToken(); - if (parseOptional(52 /* EqualsToken */)) { + if (parseOptional(52)) { return parseExportAssignmentTail(fullStart, modifiers); } } switch (token) { - case 97 /* VarKeyword */: - case 103 /* LetKeyword */: - case 69 /* ConstKeyword */: + case 97: + case 103: + case 69: return parseVariableStatement(fullStart, modifiers); - case 82 /* FunctionKeyword */: + case 82: return parseFunctionDeclaration(fullStart, modifiers); - case 68 /* ClassKeyword */: + case 68: return parseClassDeclaration(fullStart, modifiers); - case 102 /* InterfaceKeyword */: + case 102: return parseInterfaceDeclaration(fullStart, modifiers); - case 120 /* TypeKeyword */: + case 120: return parseTypeAliasDeclaration(fullStart, modifiers); - case 76 /* EnumKeyword */: + case 76: return parseEnumDeclaration(fullStart, modifiers); - case 115 /* ModuleKeyword */: + case 115: return parseModuleDeclaration(fullStart, modifiers); - case 84 /* ImportKeyword */: + case 84: return parseImportDeclaration(fullStart, modifiers); default: ts.Debug.fail("Mismatch between isDeclarationStart and parseDeclaration"); @@ -6894,16 +6940,16 @@ var ts; return isDeclarationStart() ? parseDeclaration() : parseStatement(); } function processReferenceComments(sourceFile) { - var triviaScanner = ts.createScanner(languageVersion, false, sourceText); + var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, sourceText); var referencedFiles = []; var amdDependencies = []; var amdModuleName; while (true) { var kind = triviaScanner.scan(); - if (kind === 5 /* WhitespaceTrivia */ || kind === 4 /* NewLineTrivia */ || kind === 3 /* MultiLineCommentTrivia */) { + if (kind === 5 || kind === 4 || kind === 3) { continue; } - if (kind !== 2 /* SingleLineCommentTrivia */) { + if (kind !== 2) { break; } var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos() }; @@ -6917,7 +6963,7 @@ var ts; referencedFiles.push(fileReference); } if (diagnosticMessage) { - sourceFile.referenceDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); + sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); } } else { @@ -6925,7 +6971,7 @@ var ts; var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment); if (amdModuleNameMatchResult) { if (amdModuleName) { - sourceFile.referenceDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); + sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); } amdModuleName = amdModuleNameMatchResult[2]; } @@ -6941,40 +6987,32 @@ var ts; sourceFile.amdModuleName = amdModuleName; } function setExternalModuleIndicator(sourceFile) { - sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 /* Export */ || node.kind === 197 /* ImportDeclaration */ && node.moduleReference.kind === 199 /* ExternalModuleReference */ || node.kind === 198 /* ExportAssignment */ ? node : undefined; }); - } - function getSyntacticDiagnostics() { - if (syntacticDiagnostics === undefined) { - syntacticDiagnostics = sourceFile.referenceDiagnostics.concat(sourceFile.parseDiagnostics); - } - ts.Debug.assert(syntacticDiagnostics !== undefined); - return syntacticDiagnostics; + sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 || node.kind === 197 && node.moduleReference.kind === 199 || node.kind === 198 ? node : undefined; }); } } - ts.createSourceFile = createSourceFile; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { - case 149 /* PropertyAccessExpression */: - case 150 /* ElementAccessExpression */: - case 152 /* NewExpression */: - case 151 /* CallExpression */: - case 153 /* TaggedTemplateExpression */: - case 147 /* ArrayLiteralExpression */: - case 155 /* ParenthesizedExpression */: - case 148 /* ObjectLiteralExpression */: - case 156 /* FunctionExpression */: - case 64 /* Identifier */: - case 9 /* RegularExpressionLiteral */: - case 7 /* NumericLiteral */: - case 8 /* StringLiteral */: - case 10 /* NoSubstitutionTemplateLiteral */: - case 165 /* TemplateExpression */: - case 79 /* FalseKeyword */: - case 88 /* NullKeyword */: - case 92 /* ThisKeyword */: - case 94 /* TrueKeyword */: - case 90 /* SuperKeyword */: + case 149: + case 150: + case 152: + case 151: + case 153: + case 147: + case 155: + case 148: + case 156: + case 64: + case 9: + case 7: + case 8: + case 10: + case 165: + case 79: + case 88: + case 92: + case 94: + case 90: return true; } } @@ -6982,12 +7020,13 @@ var ts; } ts.isLeftHandSideExpression = isLeftHandSideExpression; function isAssignmentOperator(token) { - return token >= 52 /* FirstAssignment */ && token <= 63 /* LastAssignment */; + return token >= 52 && token <= 63; } ts.isAssignmentOperator = isAssignmentOperator; })(ts || (ts = {})); var ts; (function (ts) { + ts.bindTime = 0; (function (ModuleInstanceState) { ModuleInstanceState[ModuleInstanceState["NonInstantiated"] = 0] = "NonInstantiated"; ModuleInstanceState[ModuleInstanceState["Instantiated"] = 1] = "Instantiated"; @@ -6995,44 +7034,50 @@ var ts; })(ts.ModuleInstanceState || (ts.ModuleInstanceState = {})); var ModuleInstanceState = ts.ModuleInstanceState; function getModuleInstanceState(node) { - if (node.kind === 192 /* InterfaceDeclaration */ || node.kind === 193 /* TypeAliasDeclaration */) { - return 0 /* NonInstantiated */; + if (node.kind === 192 || node.kind === 193) { + return 0; } else if (ts.isConstEnumDeclaration(node)) { - return 2 /* ConstEnumOnly */; + return 2; } - else if (node.kind === 197 /* ImportDeclaration */ && !(node.flags & 1 /* Export */)) { - return 0 /* NonInstantiated */; + else if (node.kind === 197 && !(node.flags & 1)) { + return 0; } - else if (node.kind === 196 /* ModuleBlock */) { - var state = 0 /* NonInstantiated */; + else if (node.kind === 196) { + var state = 0; ts.forEachChild(node, function (n) { switch (getModuleInstanceState(n)) { - case 0 /* NonInstantiated */: + case 0: return false; - case 2 /* ConstEnumOnly */: - state = 2 /* ConstEnumOnly */; + case 2: + state = 2; return false; - case 1 /* Instantiated */: - state = 1 /* Instantiated */; + case 1: + state = 1; return true; } }); return state; } - else if (node.kind === 195 /* ModuleDeclaration */) { + else if (node.kind === 195) { return getModuleInstanceState(node.body); } else { - return 1 /* Instantiated */; + return 1; } } ts.getModuleInstanceState = getModuleInstanceState; function hasDynamicName(declaration) { - return declaration.name && declaration.name.kind === 122 /* ComputedPropertyName */; + return declaration.name && declaration.name.kind === 122; } ts.hasDynamicName = hasDynamicName; function bindSourceFile(file) { + var start = new Date().getTime(); + bindSourceFileWorker(file); + ts.bindTime += new Date().getTime() - start; + } + ts.bindSourceFile = bindSourceFile; + function bindSourceFileWorker(file) { var parent; var container; var blockScopeContainer; @@ -7054,32 +7099,32 @@ var ts; if (!symbol.declarations) symbol.declarations = []; symbol.declarations.push(node); - if (symbolKind & 1952 /* HasExports */ && !symbol.exports) + if (symbolKind & 1952 && !symbol.exports) symbol.exports = {}; - if (symbolKind & 6240 /* HasMembers */ && !symbol.members) + if (symbolKind & 6240 && !symbol.members) symbol.members = {}; node.symbol = symbol; - if (symbolKind & 107455 /* Value */ && !symbol.valueDeclaration) + if (symbolKind & 107455 && !symbol.valueDeclaration) symbol.valueDeclaration = node; } function getDeclarationName(node) { if (node.name) { - if (node.kind === 195 /* ModuleDeclaration */ && node.name.kind === 8 /* StringLiteral */) { + if (node.kind === 195 && node.name.kind === 8) { return '"' + node.name.text + '"'; } ts.Debug.assert(!hasDynamicName(node)); return node.name.text; } switch (node.kind) { - case 137 /* ConstructorType */: - case 129 /* Constructor */: + case 137: + case 129: return "__constructor"; - case 136 /* FunctionType */: - case 132 /* CallSignature */: + case 136: + case 132: return "__call"; - case 133 /* ConstructSignature */: + case 133: return "__new"; - case 134 /* IndexSignature */: + case 134: return "__index"; } } @@ -7095,11 +7140,11 @@ var ts; if (node.name) { node.name.parent = node; } - var message = symbol.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; + var message = symbol.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; ts.forEach(symbol.declarations, function (declaration) { - file.semanticDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); + file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration))); }); - file.semanticDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node))); symbol = createSymbol(0, name); } } @@ -7108,13 +7153,13 @@ var ts; } addDeclarationToSymbol(symbol, node, includes); symbol.parent = parent; - if (node.kind === 191 /* ClassDeclaration */ && symbol.exports) { - var prototypeSymbol = createSymbol(4 /* Property */ | 134217728 /* Prototype */, "prototype"); + if (node.kind === 191 && symbol.exports) { + var prototypeSymbol = createSymbol(4 | 134217728, "prototype"); if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { if (node.name) { node.name.parent = node; } - file.semanticDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); } symbol.exports[prototypeSymbol.name] = prototypeSymbol; prototypeSymbol.parent = symbol; @@ -7123,7 +7168,7 @@ var ts; } function isAmbientContext(node) { while (node) { - if (node.flags & 2 /* Ambient */) + if (node.flags & 2) return true; node = node.parent; } @@ -7131,16 +7176,16 @@ var ts; } function declareModuleMember(node, symbolKind, symbolExcludes) { var exportKind = 0; - if (symbolKind & 107455 /* Value */) { - exportKind |= 1048576 /* ExportValue */; + if (symbolKind & 107455) { + exportKind |= 1048576; } - if (symbolKind & 793056 /* Type */) { - exportKind |= 2097152 /* ExportType */; + if (symbolKind & 793056) { + exportKind |= 2097152; } - if (symbolKind & 1536 /* Namespace */) { - exportKind |= 4194304 /* ExportNamespace */; + if (symbolKind & 1536) { + exportKind |= 4194304; } - if (ts.getCombinedNodeFlags(node) & 1 /* Export */ || (node.kind !== 197 /* ImportDeclaration */ && isAmbientContext(container))) { + if (ts.getCombinedNodeFlags(node) & 1 || (node.kind !== 197 && isAmbientContext(container))) { if (exportKind) { var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); @@ -7155,14 +7200,14 @@ var ts; } } function bindChildren(node, symbolKind, isBlockScopeContainer) { - if (symbolKind & 255504 /* HasLocals */) { + if (symbolKind & 255504) { node.locals = {}; } var saveParent = parent; var saveContainer = container; var savedBlockScopeContainer = blockScopeContainer; parent = node; - if (symbolKind & 262128 /* IsContainer */) { + if (symbolKind & 262128) { container = node; if (lastContainer) { lastContainer.nextContainer = container; @@ -7179,57 +7224,57 @@ var ts; } function bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer) { switch (container.kind) { - case 195 /* ModuleDeclaration */: + case 195: declareModuleMember(node, symbolKind, symbolExcludes); break; - case 207 /* SourceFile */: + case 207: if (ts.isExternalModule(container)) { declareModuleMember(node, symbolKind, symbolExcludes); break; } - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 136: + case 137: + case 132: + case 133: + case 134: + case 128: + case 127: + case 129: + case 130: + case 131: + case 190: + case 156: + case 157: declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); break; - case 191 /* ClassDeclaration */: - if (node.flags & 128 /* Static */) { + case 191: + if (node.flags & 128) { declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); break; } - case 139 /* TypeLiteral */: - case 148 /* ObjectLiteralExpression */: - case 192 /* InterfaceDeclaration */: + case 139: + case 148: + case 192: declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes); break; - case 194 /* EnumDeclaration */: + case 194: declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); break; } bindChildren(node, symbolKind, isBlockScopeContainer); } function bindModuleDeclaration(node) { - if (node.name.kind === 8 /* StringLiteral */) { - bindDeclaration(node, 512 /* ValueModule */, 106639 /* ValueModuleExcludes */, true); + if (node.name.kind === 8) { + bindDeclaration(node, 512, 106639, true); } else { var state = getModuleInstanceState(node); - if (state === 0 /* NonInstantiated */) { - bindDeclaration(node, 1024 /* NamespaceModule */, 0 /* NamespaceModuleExcludes */, true); + if (state === 0) { + bindDeclaration(node, 1024, 0, true); } else { - bindDeclaration(node, 512 /* ValueModule */, 106639 /* ValueModuleExcludes */, true); - if (state === 2 /* ConstEnumOnly */) { + bindDeclaration(node, 512, 106639, true); + if (state === 2) { node.symbol.constEnumOnlyModule = true; } else if (node.symbol.constEnumOnlyModule) { @@ -7239,13 +7284,13 @@ var ts; } } function bindFunctionOrConstructorType(node) { - var symbol = createSymbol(131072 /* Signature */, getDeclarationName(node)); - addDeclarationToSymbol(symbol, node, 131072 /* Signature */); - bindChildren(node, 131072 /* Signature */, false); - var typeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type"); - addDeclarationToSymbol(typeLiteralSymbol, node, 2048 /* TypeLiteral */); + var symbol = createSymbol(131072, getDeclarationName(node)); + addDeclarationToSymbol(symbol, node, 131072); + bindChildren(node, 131072, false); + var typeLiteralSymbol = createSymbol(2048, "__type"); + addDeclarationToSymbol(typeLiteralSymbol, node, 2048); typeLiteralSymbol.members = {}; - typeLiteralSymbol.members[node.kind === 136 /* FunctionType */ ? "__call" : "__new"] = symbol; + typeLiteralSymbol.members[node.kind === 136 ? "__call" : "__new"] = symbol; } function bindAnonymousDeclaration(node, symbolKind, name, isBlockScopeContainer) { var symbol = createSymbol(symbolKind, name); @@ -7253,8 +7298,8 @@ var ts; bindChildren(node, symbolKind, isBlockScopeContainer); } function bindCatchVariableDeclaration(node) { - var symbol = createSymbol(1 /* FunctionScopedVariable */, node.name.text || "__missing"); - addDeclarationToSymbol(symbol, node, 1 /* FunctionScopedVariable */); + var symbol = createSymbol(1, node.name.text || "__missing"); + addDeclarationToSymbol(symbol, node, 1); var saveParent = parent; var savedBlockScopeContainer = blockScopeContainer; parent = blockScopeContainer = node; @@ -7264,21 +7309,21 @@ var ts; } function bindBlockScopedVariableDeclaration(node) { switch (blockScopeContainer.kind) { - case 195 /* ModuleDeclaration */: - declareModuleMember(node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */); + case 195: + declareModuleMember(node, 2, 107455); break; - case 207 /* SourceFile */: + case 207: if (ts.isExternalModule(container)) { - declareModuleMember(node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */); + declareModuleMember(node, 2, 107455); break; } default: if (!blockScopeContainer.locals) { blockScopeContainer.locals = {}; } - declareSymbol(blockScopeContainer.locals, undefined, node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */); + declareSymbol(blockScopeContainer.locals, undefined, node, 2, 107455); } - bindChildren(node, 2 /* BlockScopedVariable */, false); + bindChildren(node, 2, false); } function getDestructuringParameterName(node) { return "__" + ts.indexOf(node.parent.parameters, node); @@ -7286,106 +7331,106 @@ var ts; function bind(node) { node.parent = parent; switch (node.kind) { - case 123 /* TypeParameter */: - bindDeclaration(node, 262144 /* TypeParameter */, 530912 /* TypeParameterExcludes */, false); + case 123: + bindDeclaration(node, 262144, 530912, false); break; - case 124 /* Parameter */: + case 124: bindParameter(node); break; - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: + case 188: + case 146: if (ts.isBindingPattern(node.name)) { bindChildren(node, 0, false); } - else if (ts.getCombinedNodeFlags(node) & 6144 /* BlockScoped */) { + else if (ts.getCombinedNodeFlags(node) & 6144) { bindBlockScopedVariableDeclaration(node); } else { - bindDeclaration(node, 1 /* FunctionScopedVariable */, 107454 /* FunctionScopedVariableExcludes */, false); + bindDeclaration(node, 1, 107454, false); } break; - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - bindPropertyOrMethodOrAccessor(node, 4 /* Property */ | (node.questionToken ? 536870912 /* Optional */ : 0), 107455 /* PropertyExcludes */, false); + case 126: + case 125: + bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455, false); break; - case 204 /* PropertyAssignment */: - case 205 /* ShorthandPropertyAssignment */: - bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 107455 /* PropertyExcludes */, false); + case 204: + case 205: + bindPropertyOrMethodOrAccessor(node, 4, 107455, false); break; - case 206 /* EnumMember */: - bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 107455 /* EnumMemberExcludes */, false); + case 206: + bindPropertyOrMethodOrAccessor(node, 8, 107455, false); break; - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: - bindDeclaration(node, 131072 /* Signature */, 0, false); + case 132: + case 133: + case 134: + bindDeclaration(node, 131072, 0, false); break; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 536870912 /* Optional */ : 0), ts.isObjectLiteralMethod(node) ? 107455 /* PropertyExcludes */ : 99263 /* MethodExcludes */, true); + case 128: + case 127: + bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263, true); break; - case 190 /* FunctionDeclaration */: - bindDeclaration(node, 16 /* Function */, 106927 /* FunctionExcludes */, true); + case 190: + bindDeclaration(node, 16, 106927, true); break; - case 129 /* Constructor */: - bindDeclaration(node, 16384 /* Constructor */, 0, true); + case 129: + bindDeclaration(node, 16384, 0, true); break; - case 130 /* GetAccessor */: - bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 41919 /* GetAccessorExcludes */, true); + case 130: + bindPropertyOrMethodOrAccessor(node, 32768, 41919, true); break; - case 131 /* SetAccessor */: - bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 74687 /* SetAccessorExcludes */, true); + case 131: + bindPropertyOrMethodOrAccessor(node, 65536, 74687, true); break; - case 136 /* FunctionType */: - case 137 /* ConstructorType */: + case 136: + case 137: bindFunctionOrConstructorType(node); break; - case 139 /* TypeLiteral */: - bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type", false); + case 139: + bindAnonymousDeclaration(node, 2048, "__type", false); break; - case 148 /* ObjectLiteralExpression */: - bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object", false); + case 148: + bindAnonymousDeclaration(node, 4096, "__object", false); break; - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - bindAnonymousDeclaration(node, 16 /* Function */, "__function", true); + case 156: + case 157: + bindAnonymousDeclaration(node, 16, "__function", true); break; - case 203 /* CatchClause */: + case 203: bindCatchVariableDeclaration(node); break; - case 191 /* ClassDeclaration */: - bindDeclaration(node, 32 /* Class */, 899583 /* ClassExcludes */, false); + case 191: + bindDeclaration(node, 32, 899583, false); break; - case 192 /* InterfaceDeclaration */: - bindDeclaration(node, 64 /* Interface */, 792992 /* InterfaceExcludes */, false); + case 192: + bindDeclaration(node, 64, 792992, false); break; - case 193 /* TypeAliasDeclaration */: - bindDeclaration(node, 524288 /* TypeAlias */, 793056 /* TypeAliasExcludes */, false); + case 193: + bindDeclaration(node, 524288, 793056, false); break; - case 194 /* EnumDeclaration */: + case 194: if (ts.isConst(node)) { - bindDeclaration(node, 128 /* ConstEnum */, 899967 /* ConstEnumExcludes */, false); + bindDeclaration(node, 128, 899967, false); } else { - bindDeclaration(node, 256 /* RegularEnum */, 899327 /* RegularEnumExcludes */, false); + bindDeclaration(node, 256, 899327, false); } break; - case 195 /* ModuleDeclaration */: + case 195: bindModuleDeclaration(node); break; - case 197 /* ImportDeclaration */: - bindDeclaration(node, 8388608 /* Import */, 8388608 /* ImportExcludes */, false); + case 197: + bindDeclaration(node, 8388608, 8388608, false); break; - case 207 /* SourceFile */: + case 207: if (ts.isExternalModule(node)) { - bindAnonymousDeclaration(node, 512 /* ValueModule */, '"' + ts.removeFileExtension(node.filename) + '"', true); + bindAnonymousDeclaration(node, 512, '"' + ts.removeFileExtension(node.fileName) + '"', true); break; } - case 170 /* Block */: - case 203 /* CatchClause */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 183 /* SwitchStatement */: + case 170: + case 203: + case 177: + case 178: + case 183: bindChildren(node, 0, true); break; default: @@ -7397,14 +7442,14 @@ var ts; } function bindParameter(node) { if (ts.isBindingPattern(node.name)) { - bindAnonymousDeclaration(node, 1 /* FunctionScopedVariable */, getDestructuringParameterName(node), false); + bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node), false); } else { - bindDeclaration(node, 1 /* FunctionScopedVariable */, 107455 /* ParameterExcludes */, false); + bindDeclaration(node, 1, 107455, false); } - if (node.flags & 112 /* AccessibilityModifier */ && node.parent.kind === 129 /* Constructor */ && node.parent.parent.kind === 191 /* ClassDeclaration */) { + if (node.flags & 112 && node.parent.kind === 129 && node.parent.parent.kind === 191) { var classDeclaration = node.parent.parent; - declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 /* Property */, 107455 /* PropertyExcludes */); + declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455); } } function bindPropertyOrMethodOrAccessor(node, symbolKind, symbolExcludes, isBlockScopeContainer) { @@ -7416,13 +7461,13 @@ var ts; } } } - ts.bindSourceFile = bindSourceFile; })(ts || (ts = {})); var ts; (function (ts) { var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + ts.checkTime = 0; function createTypeChecker(host, produceDiagnostics) { var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); @@ -7431,7 +7476,7 @@ var ts; var emptyArray = []; var emptySymbols = {}; var compilerOptions = host.getCompilerOptions(); - var languageVersion = compilerOptions.target || 0 /* ES3 */; + var languageVersion = compilerOptions.target || 0; var emitResolver = createResolver(); var checker = { getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); }, @@ -7461,26 +7506,26 @@ var ts; getContextualType: getContextualType, getFullyQualifiedName: getFullyQualifiedName, getResolvedSignature: getResolvedSignature, - getEnumMemberValue: getEnumMemberValue, + getConstantValue: getConstantValue, isValidPropertyAccess: isValidPropertyAccess, getSignatureFromDeclaration: getSignatureFromDeclaration, isImplementationOfOverload: isImplementationOfOverload, getAliasedSymbol: resolveImport, - getEmitResolver: function () { return emitResolver; } + getEmitResolver: getEmitResolver }; - var undefinedSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "undefined"); - var argumentsSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "arguments"); - var unknownSymbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "unknown"); - var resolvingSymbol = createSymbol(67108864 /* Transient */, "__resolving__"); - var anyType = createIntrinsicType(1 /* Any */, "any"); - var stringType = createIntrinsicType(2 /* String */, "string"); - var numberType = createIntrinsicType(4 /* Number */, "number"); - var booleanType = createIntrinsicType(8 /* Boolean */, "boolean"); - var voidType = createIntrinsicType(16 /* Void */, "void"); - var undefinedType = createIntrinsicType(32 /* Undefined */ | 262144 /* ContainsUndefinedOrNull */, "undefined"); - var nullType = createIntrinsicType(64 /* Null */ | 262144 /* ContainsUndefinedOrNull */, "null"); - var unknownType = createIntrinsicType(1 /* Any */, "unknown"); - var resolvingType = createIntrinsicType(1 /* Any */, "__resolving__"); + var undefinedSymbol = createSymbol(4 | 67108864, "undefined"); + var argumentsSymbol = createSymbol(4 | 67108864, "arguments"); + var unknownSymbol = createSymbol(4 | 67108864, "unknown"); + var resolvingSymbol = createSymbol(67108864, "__resolving__"); + var anyType = createIntrinsicType(1, "any"); + var stringType = createIntrinsicType(2, "string"); + var numberType = createIntrinsicType(4, "number"); + var booleanType = createIntrinsicType(8, "boolean"); + var voidType = createIntrinsicType(16, "void"); + var undefinedType = createIntrinsicType(32 | 262144, "undefined"); + var nullType = createIntrinsicType(64 | 262144, "null"); + var unknownType = createIntrinsicType(1, "unknown"); + var resolvingType = createIntrinsicType(1, "__resolving__"); var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -7506,67 +7551,66 @@ var ts; var symbolLinks = []; var nodeLinks = []; var potentialThisCollisions = []; - var diagnostics = []; - var diagnosticsModified = false; + var diagnostics = ts.createDiagnosticCollection(); var primitiveTypeInfo = { "string": { type: stringType, - flags: 258 /* StringLike */ + flags: 258 }, "number": { type: numberType, - flags: 132 /* NumberLike */ + flags: 132 }, "boolean": { type: booleanType, - flags: 8 /* Boolean */ + flags: 8 } }; - function addDiagnostic(diagnostic) { - diagnostics.push(diagnostic); - diagnosticsModified = true; + function getEmitResolver(sourceFile) { + getDiagnostics(sourceFile); + return emitResolver; } function error(location, message, arg0, arg1, arg2) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); - addDiagnostic(diagnostic); + diagnostics.add(diagnostic); } function createSymbol(flags, name) { return new Symbol(flags, name); } function getExcludedSymbolFlags(flags) { var result = 0; - if (flags & 2 /* BlockScopedVariable */) - result |= 107455 /* BlockScopedVariableExcludes */; - if (flags & 1 /* FunctionScopedVariable */) - result |= 107454 /* FunctionScopedVariableExcludes */; - if (flags & 4 /* Property */) - result |= 107455 /* PropertyExcludes */; - if (flags & 8 /* EnumMember */) - result |= 107455 /* EnumMemberExcludes */; - if (flags & 16 /* Function */) - result |= 106927 /* FunctionExcludes */; - if (flags & 32 /* Class */) - result |= 899583 /* ClassExcludes */; - if (flags & 64 /* Interface */) - result |= 792992 /* InterfaceExcludes */; - if (flags & 256 /* RegularEnum */) - result |= 899327 /* RegularEnumExcludes */; - if (flags & 128 /* ConstEnum */) - result |= 899967 /* ConstEnumExcludes */; - if (flags & 512 /* ValueModule */) - result |= 106639 /* ValueModuleExcludes */; - if (flags & 8192 /* Method */) - result |= 99263 /* MethodExcludes */; - if (flags & 32768 /* GetAccessor */) - result |= 41919 /* GetAccessorExcludes */; - if (flags & 65536 /* SetAccessor */) - result |= 74687 /* SetAccessorExcludes */; - if (flags & 262144 /* TypeParameter */) - result |= 530912 /* TypeParameterExcludes */; - if (flags & 524288 /* TypeAlias */) - result |= 793056 /* TypeAliasExcludes */; - if (flags & 8388608 /* Import */) - result |= 8388608 /* ImportExcludes */; + if (flags & 2) + result |= 107455; + if (flags & 1) + result |= 107454; + if (flags & 4) + result |= 107455; + if (flags & 8) + result |= 107455; + if (flags & 16) + result |= 106927; + if (flags & 32) + result |= 899583; + if (flags & 64) + result |= 792992; + if (flags & 256) + result |= 899327; + if (flags & 128) + result |= 899967; + if (flags & 512) + result |= 106639; + if (flags & 8192) + result |= 99263; + if (flags & 32768) + result |= 41919; + if (flags & 65536) + result |= 74687; + if (flags & 262144) + result |= 530912; + if (flags & 524288) + result |= 793056; + if (flags & 8388608) + result |= 8388608; return result; } function recordMergedSymbol(target, source) { @@ -7575,7 +7619,7 @@ var ts; mergedSymbols[source.mergeId] = target; } function cloneSymbol(symbol) { - var result = createSymbol(symbol.flags | 33554432 /* Merged */, symbol.name); + var result = createSymbol(symbol.flags | 33554432, symbol.name); result.declarations = symbol.declarations.slice(0); result.parent = symbol.parent; if (symbol.valueDeclaration) @@ -7591,7 +7635,7 @@ var ts; } function extendSymbol(target, source) { if (!(target.flags & getExcludedSymbolFlags(source.flags))) { - if (source.flags & 512 /* ValueModule */ && target.flags & 512 /* ValueModule */ && target.constEnumOnlyModule && !source.constEnumOnlyModule) { + if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) { target.constEnumOnlyModule = false; } target.flags |= source.flags; @@ -7613,7 +7657,7 @@ var ts; recordMergedSymbol(target, source); } else { - var message = target.flags & 2 /* BlockScopedVariable */ || source.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; + var message = target.flags & 2 || source.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; ts.forEach(source.declarations, function (node) { error(node.name ? node.name : node, message, symbolToString(source)); }); @@ -7639,7 +7683,7 @@ var ts; } else { var symbol = target[id]; - if (!(symbol.flags & 33554432 /* Merged */)) { + if (!(symbol.flags & 33554432)) { target[id] = symbol = cloneSymbol(symbol); } extendSymbol(symbol, source[id]); @@ -7648,7 +7692,7 @@ var ts; } } function getSymbolLinks(symbol) { - if (symbol.flags & 67108864 /* Transient */) + if (symbol.flags & 67108864) return symbol; if (!symbol.id) symbol.id = nextSymbolId++; @@ -7660,19 +7704,19 @@ var ts; return nodeLinks[node.id] || (nodeLinks[node.id] = {}); } function getSourceFile(node) { - return ts.getAncestor(node, 207 /* SourceFile */); + return ts.getAncestor(node, 207); } function isGlobalSourceFile(node) { - return node.kind === 207 /* SourceFile */ && !ts.isExternalModule(node); + return node.kind === 207 && !ts.isExternalModule(node); } function getSymbol(symbols, name, meaning) { if (meaning && ts.hasProperty(symbols, name)) { var symbol = symbols[name]; - ts.Debug.assert((symbol.flags & 16777216 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); if (symbol.flags & meaning) { return symbol; } - if (symbol.flags & 8388608 /* Import */) { + if (symbol.flags & 8388608) { var target = resolveImport(symbol); if (target === unknownSymbol || target.flags & meaning) { return symbol; @@ -7704,62 +7748,62 @@ var ts; } } switch (location.kind) { - case 207 /* SourceFile */: + case 207: if (!ts.isExternalModule(location)) break; - case 195 /* ModuleDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8914931 /* ModuleMember */)) { + case 195: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8914931)) { break loop; } break; - case 194 /* EnumDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) { + case 194: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) { break loop; } break; - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - if (location.parent.kind === 191 /* ClassDeclaration */ && !(location.flags & 128 /* Static */)) { + case 126: + case 125: + if (location.parent.kind === 191 && !(location.flags & 128)) { var ctor = findConstructorDeclaration(location.parent); if (ctor && ctor.locals) { - if (getSymbol(ctor.locals, name, meaning & 107455 /* Value */)) { + if (getSymbol(ctor.locals, name, meaning & 107455)) { propertyWithInvalidInitializer = location; } } } break; - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056 /* Type */)) { - if (lastLocation && lastLocation.flags & 128 /* Static */) { + case 191: + case 192: + if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) { + if (lastLocation && lastLocation.flags & 128) { error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); return undefined; } break loop; } break; - case 122 /* ComputedPropertyName */: + case 122: var grandparent = location.parent.parent; - if (grandparent.kind === 191 /* ClassDeclaration */ || grandparent.kind === 192 /* InterfaceDeclaration */) { - if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056 /* Type */)) { + if (grandparent.kind === 191 || grandparent.kind === 192) { + if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); return undefined; } } break; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 190 /* FunctionDeclaration */: - case 157 /* ArrowFunction */: + case 128: + case 127: + case 129: + case 130: + case 131: + case 190: + case 157: if (name === "arguments") { result = argumentsSymbol; break loop; } break; - case 156 /* FunctionExpression */: + case 156: if (name === "arguments") { result = argumentsSymbol; break loop; @@ -7770,7 +7814,7 @@ var ts; break loop; } break; - case 203 /* CatchClause */: + case 203: var id = location.name; if (name === id.text) { result = location.symbol; @@ -7796,8 +7840,8 @@ var ts; error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); return undefined; } - if (result.flags & 2 /* BlockScopedVariable */) { - var declaration = ts.forEach(result.declarations, function (d) { return ts.getCombinedNodeFlags(d) & 6144 /* BlockScoped */ ? d : undefined; }); + if (result.flags & 2) { + var declaration = ts.forEach(result.declarations, function (d) { return ts.getCombinedNodeFlags(d) & 6144 ? d : undefined; }); ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); if (!isDefinedBefore(declaration, errorLocation)) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); @@ -7807,17 +7851,17 @@ var ts; return result; } function resolveImport(symbol) { - ts.Debug.assert((symbol.flags & 8388608 /* Import */) !== 0, "Should only get Imports here."); + ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Imports here."); var links = getSymbolLinks(symbol); if (!links.target) { links.target = resolvingSymbol; - var node = ts.getDeclarationOfKind(symbol, 197 /* ImportDeclaration */); - if (node.moduleReference.kind === 199 /* ExternalModuleReference */) { - if (node.moduleReference.expression.kind !== 8 /* StringLiteral */) { + var node = ts.getDeclarationOfKind(symbol, 197); + if (node.moduleReference.kind === 199) { + if (node.moduleReference.expression.kind !== 8) { grammarErrorOnNode(node.moduleReference.expression, ts.Diagnostics.String_literal_expected); } } - var target = node.moduleReference.kind === 199 /* ExternalModuleReference */ ? resolveExternalModuleName(node, ts.getExternalModuleImportDeclarationExpression(node)) : getSymbolOfPartOfRightHandSideOfImport(node.moduleReference, node); + var target = node.moduleReference.kind === 199 ? resolveExternalModuleName(node, ts.getExternalModuleImportDeclarationExpression(node)) : getSymbolOfPartOfRightHandSideOfImport(node.moduleReference, node); if (links.target === resolvingSymbol) { links.target = target || unknownSymbol; } @@ -7832,18 +7876,18 @@ var ts; } function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) { if (!importDeclaration) { - importDeclaration = ts.getAncestor(entityName, 197 /* ImportDeclaration */); + importDeclaration = ts.getAncestor(entityName, 197); ts.Debug.assert(importDeclaration !== undefined); } - if (entityName.kind === 64 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + if (entityName.kind === 64 && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } - if (entityName.kind === 64 /* Identifier */ || entityName.parent.kind === 121 /* QualifiedName */) { - return resolveEntityName(importDeclaration, entityName, 1536 /* Namespace */); + if (entityName.kind === 64 || entityName.parent.kind === 121) { + return resolveEntityName(importDeclaration, entityName, 1536); } else { - ts.Debug.assert(entityName.parent.kind === 197 /* ImportDeclaration */); - return resolveEntityName(importDeclaration, entityName, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */); + ts.Debug.assert(entityName.parent.kind === 197); + return resolveEntityName(importDeclaration, entityName, 107455 | 793056 | 1536); } } function getFullyQualifiedName(symbol) { @@ -7853,14 +7897,14 @@ var ts; if (ts.getFullWidth(name) === 0) { return undefined; } - if (name.kind === 64 /* Identifier */) { + if (name.kind === 64) { var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, name); if (!symbol) { return; } } - else if (name.kind === 121 /* QualifiedName */) { - var namespace = resolveEntityName(location, name.left, 1536 /* Namespace */); + else if (name.kind === 121) { + var namespace = resolveEntityName(location, name.left, 1536); if (!namespace || namespace === unknownSymbol || ts.getFullWidth(name.right) === 0) return; var symbol = getSymbol(namespace.exports, name.right.text, meaning); @@ -7869,31 +7913,31 @@ var ts; return; } } - ts.Debug.assert((symbol.flags & 16777216 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); return symbol.flags & meaning ? symbol : resolveImport(symbol); } function isExternalModuleNameRelative(moduleName) { return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; } function resolveExternalModuleName(location, moduleReferenceExpression) { - if (moduleReferenceExpression.kind !== 8 /* StringLiteral */) { + if (moduleReferenceExpression.kind !== 8) { return; } var moduleReferenceLiteral = moduleReferenceExpression; - var searchPath = ts.getDirectoryPath(getSourceFile(location).filename); + var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName); var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text); if (!moduleName) return; var isRelative = isExternalModuleNameRelative(moduleName); if (!isRelative) { - var symbol = getSymbol(globals, '"' + moduleName + '"', 512 /* ValueModule */); + var symbol = getSymbol(globals, '"' + moduleName + '"', 512); if (symbol) { return getResolvedExportSymbol(symbol); } } while (true) { - var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); - var sourceFile = host.getSourceFile(filename + ".ts") || host.getSourceFile(filename + ".d.ts"); + var fileName = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + var sourceFile = host.getSourceFile(fileName + ".ts") || host.getSourceFile(fileName + ".d.ts"); if (sourceFile || isRelative) break; var parentPath = ts.getDirectoryPath(searchPath); @@ -7905,7 +7949,7 @@ var ts; if (sourceFile.symbol) { return getResolvedExportSymbol(sourceFile.symbol); } - error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename); + error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.fileName); return; } error(moduleReferenceLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName); @@ -7913,10 +7957,10 @@ var ts; function getResolvedExportSymbol(moduleSymbol) { var symbol = getExportAssignmentSymbol(moduleSymbol); if (symbol) { - if (symbol.flags & (107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */)) { + if (symbol.flags & (107455 | 793056 | 1536)) { return symbol; } - if (symbol.flags & 8388608 /* Import */) { + if (symbol.flags & 8388608) { return resolveImport(symbol); } } @@ -7940,7 +7984,7 @@ var ts; error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); } if (node.exportName.text) { - var meaning = 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */; + var meaning = 107455 | 793056 | 1536; var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, node.exportName); } } @@ -7951,13 +7995,13 @@ var ts; var seenExportedMember = false; var result = []; ts.forEach(symbol.declarations, function (declaration) { - var block = (declaration.kind === 207 /* SourceFile */ ? declaration : declaration.body); + var block = (declaration.kind === 207 ? declaration : declaration.body); ts.forEach(block.statements, function (node) { - if (node.kind === 198 /* ExportAssignment */) { + if (node.kind === 198) { result.push(node); } else { - seenExportedMember = seenExportedMember || (node.flags & 1 /* Export */) !== 0; + seenExportedMember = seenExportedMember || (node.flags & 1) !== 0; } }); }); @@ -7977,17 +8021,17 @@ var ts; return getMergedSymbol(symbol.parent); } function getExportSymbolOfValueSymbolIfExported(symbol) { - return symbol && (symbol.flags & 1048576 /* ExportValue */) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; + return symbol && (symbol.flags & 1048576) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; } function symbolIsValue(symbol) { - if (symbol.flags & 16777216 /* Instantiated */) { + if (symbol.flags & 16777216) { return symbolIsValue(getSymbolLinks(symbol).target); } - if (symbol.flags & 107455 /* Value */) { + if (symbol.flags & 107455) { return true; } - if (symbol.flags & 8388608 /* Import */) { - return (resolveImport(symbol).flags & 107455 /* Value */) !== 0; + if (symbol.flags & 8388608) { + return (resolveImport(symbol).flags & 107455) !== 0; } return false; } @@ -7995,7 +8039,7 @@ var ts; var members = node.members; for (var i = 0; i < members.length; i++) { var member = members[i]; - if (member.kind === 129 /* Constructor */ && ts.nodeIsPresent(member.body)) { + if (member.kind === 129 && ts.nodeIsPresent(member.body)) { return member; } } @@ -8016,7 +8060,7 @@ var ts; return type; } function isReservedMemberName(name) { - return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */; + return name.charCodeAt(0) === 95 && name.charCodeAt(1) === 95 && name.charCodeAt(2) !== 95; } function getNamedMembers(members) { var result; @@ -8046,7 +8090,7 @@ var ts; return type; } function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { - return setObjectTypeMembers(createObjectType(32768 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + return setObjectTypeMembers(createObjectType(32768, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType); } function forEachSymbolTableInScope(enclosingDeclaration, callback) { var result; @@ -8057,17 +8101,17 @@ var ts; } } switch (location.kind) { - case 207 /* SourceFile */: + case 207: if (!ts.isExternalModule(location)) { break; } - case 195 /* ModuleDeclaration */: + case 195: if (result = callback(getSymbolOfNode(location).exports)) { return result; } break; - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: + case 191: + case 192: if (result = callback(getSymbolOfNode(location).members)) { return result; } @@ -8077,7 +8121,7 @@ var ts; return callback(globals); } function getQualifiedLeftMeaning(rightMeaning) { - return rightMeaning === 107455 /* Value */ ? 107455 /* Value */ : 1536 /* Namespace */; + return rightMeaning === 107455 ? 107455 : 1536; } function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) { function getAccessibleSymbolChainFromSymbolTable(symbols) { @@ -8097,7 +8141,7 @@ var ts; return [symbol]; } return ts.forEachValue(symbols, function (symbolFromSymbolTable) { - if (symbolFromSymbolTable.flags & 8388608 /* Import */) { + if (symbolFromSymbolTable.flags & 8388608) { if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportDeclaration)) { var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { @@ -8125,7 +8169,7 @@ var ts; if (symbolFromSymbolTable === symbol) { return true; } - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 /* Import */) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; @@ -8135,7 +8179,7 @@ var ts; return qualify; } function isSymbolAccessible(symbol, enclosingDeclaration, meaning) { - if (symbol && enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) { var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { @@ -8144,9 +8188,9 @@ var ts; var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); if (!hasAccessibleDeclarations) { return { - accessibility: 1 /* NotAccessible */, + accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), - errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536 /* Namespace */) : undefined + errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined }; } return hasAccessibleDeclarations; @@ -8159,18 +8203,18 @@ var ts; var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); if (symbolExternalModule !== enclosingExternalModule) { return { - accessibility: 2 /* CannotBeNamed */, + accessibility: 2, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbolToString(symbolExternalModule) }; } } return { - accessibility: 1 /* NotAccessible */, + accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) }; } - return { accessibility: 0 /* Accessible */ }; + return { accessibility: 0 }; function getExternalModuleContainer(declaration) { for (; declaration; declaration = declaration.parent) { if (hasExternalModuleSymbol(declaration)) { @@ -8180,17 +8224,17 @@ var ts; } } function hasExternalModuleSymbol(declaration) { - return (declaration.kind === 195 /* ModuleDeclaration */ && declaration.name.kind === 8 /* StringLiteral */) || (declaration.kind === 207 /* SourceFile */ && ts.isExternalModule(declaration)); + return (declaration.kind === 195 && declaration.name.kind === 8) || (declaration.kind === 207 && ts.isExternalModule(declaration)); } function hasVisibleDeclarations(symbol) { var aliasesToMakeVisible; if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { return undefined; } - return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible }; + return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible }; function getIsDeclarationVisible(declaration) { if (!isDeclarationVisible(declaration)) { - if (declaration.kind === 197 /* ImportDeclaration */ && !(declaration.flags & 1 /* Export */) && isDeclarationVisible(declaration.parent)) { + if (declaration.kind === 197 && !(declaration.flags & 1) && isDeclarationVisible(declaration.parent)) { getNodeLinks(declaration).isVisible = true; if (aliasesToMakeVisible) { if (!ts.contains(aliasesToMakeVisible, declaration)) { @@ -8209,19 +8253,19 @@ var ts; } function isEntityNameVisible(entityName, enclosingDeclaration) { var meaning; - if (entityName.parent.kind === 138 /* TypeQuery */) { - meaning = 107455 /* Value */ | 1048576 /* ExportValue */; + if (entityName.parent.kind === 138) { + meaning = 107455 | 1048576; } - else if (entityName.kind === 121 /* QualifiedName */ || entityName.parent.kind === 197 /* ImportDeclaration */) { - meaning = 1536 /* Namespace */; + else if (entityName.kind === 121 || entityName.parent.kind === 197) { + meaning = 1536; } else { - meaning = 793056 /* Type */; + meaning = 793056; } var firstIdentifier = getFirstIdentifier(entityName); var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined); return (symbol && hasVisibleDeclarations(symbol)) || { - accessibility: 1 /* NotAccessible */, + accessibility: 1, errorSymbolName: ts.getTextOfNode(firstIdentifier), errorNode: firstIdentifier }; @@ -8247,19 +8291,19 @@ var ts; getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); var result = writer.string(); ts.releaseStringWriter(writer); - var maxLength = compilerOptions.noErrorTruncation || flags & 4 /* NoTruncation */ ? undefined : 100; + var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100; if (maxLength && result.length >= maxLength) { result = result.substr(0, maxLength - "...".length) + "..."; } return result; } function getTypeAliasForTypeLiteral(type) { - if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */) { + if (type.symbol && type.symbol.flags & 2048) { var node = type.symbol.declarations[0].parent; - while (node.kind === 143 /* ParenthesizedType */) { + while (node.kind === 143) { node = node.parent; } - if (node.kind === 193 /* TypeAliasDeclaration */) { + if (node.kind === 193) { return getSymbolOfNode(node); } } @@ -8277,19 +8321,19 @@ var ts; } writer.writeSymbol(symbol.name, symbol); } - function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags) { + function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { var parentSymbol; function appendParentTypeArgumentsAndSymbolName(symbol) { if (parentSymbol) { - if (flags & 1 /* WriteTypeParametersOrArguments */) { - if (symbol.flags & 16777216 /* Instantiated */) { + if (flags & 1) { + if (symbol.flags & 16777216) { buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration); } else { buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); } } - writePunctuation(writer, 20 /* DotToken */); + writePunctuation(writer, 20); } parentSymbol = symbol; appendSymbolNameOnly(symbol, writer); @@ -8297,7 +8341,7 @@ var ts; writer.trackSymbol(symbol, enclosingDeclaration, meaning); function walkSymbol(symbol, meaning) { if (symbol) { - var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2 /* UseOnlyExternalAliasing */)); + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2)); if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning)); } @@ -8310,50 +8354,52 @@ var ts; if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) { return; } - if (symbol.flags & 2048 /* TypeLiteral */ || symbol.flags & 4096 /* ObjectLiteral */) { + if (symbol.flags & 2048 || symbol.flags & 4096) { return; } appendParentTypeArgumentsAndSymbolName(symbol); } } } - if (enclosingDeclaration && !(symbol.flags & 262144 /* TypeParameter */)) { + var isTypeParameter = symbol.flags & 262144; + var typeFormatFlag = 128 & typeFlags; + if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) { walkSymbol(symbol, meaning); return; } return appendParentTypeArgumentsAndSymbolName(symbol); } function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, typeStack) { - var globalFlagsToPass = globalFlags & 16 /* WriteOwnNameForAnyLike */; + var globalFlagsToPass = globalFlags & 16; return writeType(type, globalFlags); function writeType(type, flags) { - if (type.flags & 127 /* Intrinsic */) { - writer.writeKeyword(!(globalFlags & 16 /* WriteOwnNameForAnyLike */) && (type.flags & 1 /* Any */) ? "any" : type.intrinsicName); + if (type.flags & 127) { + writer.writeKeyword(!(globalFlags & 16) && (type.flags & 1) ? "any" : type.intrinsicName); } - else if (type.flags & 4096 /* Reference */) { + else if (type.flags & 4096) { writeTypeReference(type, flags); } - else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { - buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056 /* Type */); + else if (type.flags & (1024 | 2048 | 128 | 512)) { + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags); } - else if (type.flags & 8192 /* Tuple */) { + else if (type.flags & 8192) { writeTupleType(type); } - else if (type.flags & 16384 /* Union */) { + else if (type.flags & 16384) { writeUnionType(type, flags); } - else if (type.flags & 32768 /* Anonymous */) { + else if (type.flags & 32768) { writeAnonymousType(type, flags); } - else if (type.flags & 256 /* StringLiteral */) { + else if (type.flags & 256) { writer.writeStringLiteral(type.text); } else { - writePunctuation(writer, 14 /* OpenBraceToken */); + writePunctuation(writer, 14); writeSpace(writer); - writePunctuation(writer, 21 /* DotDotDotToken */); + writePunctuation(writer, 21); writeSpace(writer); - writePunctuation(writer, 15 /* CloseBraceToken */); + writePunctuation(writer, 15); } } function writeTypeList(types, union) { @@ -8362,53 +8408,53 @@ var ts; if (union) { writeSpace(writer); } - writePunctuation(writer, union ? 44 /* BarToken */ : 23 /* CommaToken */); + writePunctuation(writer, union ? 44 : 23); writeSpace(writer); } - writeType(types[i], union ? 64 /* InElementType */ : 0 /* None */); + writeType(types[i], union ? 64 : 0); } } function writeTypeReference(type, flags) { - if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { - writeType(type.typeArguments[0], 64 /* InElementType */); - writePunctuation(writer, 18 /* OpenBracketToken */); - writePunctuation(writer, 19 /* CloseBracketToken */); + if (type.target === globalArrayType && !(flags & 1)) { + writeType(type.typeArguments[0], 64); + writePunctuation(writer, 18); + writePunctuation(writer, 19); } else { - buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 793056 /* Type */); - writePunctuation(writer, 24 /* LessThanToken */); + buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 793056); + writePunctuation(writer, 24); writeTypeList(type.typeArguments, false); - writePunctuation(writer, 25 /* GreaterThanToken */); + writePunctuation(writer, 25); } } function writeTupleType(type) { - writePunctuation(writer, 18 /* OpenBracketToken */); + writePunctuation(writer, 18); writeTypeList(type.elementTypes, false); - writePunctuation(writer, 19 /* CloseBracketToken */); + writePunctuation(writer, 19); } function writeUnionType(type, flags) { - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 16 /* OpenParenToken */); + if (flags & 64) { + writePunctuation(writer, 16); } writeTypeList(type.types, true); - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 17 /* CloseParenToken */); + if (flags & 64) { + writePunctuation(writer, 17); } } function writeAnonymousType(type, flags) { - if (type.symbol && type.symbol.flags & (32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { - writeTypeofSymbol(type); + if (type.symbol && type.symbol.flags & (32 | 384 | 512)) { + writeTypeofSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type); + writeTypeofSymbol(type, flags); } else if (typeStack && ts.contains(typeStack, type)) { var typeAlias = getTypeAliasForTypeLiteral(type); if (typeAlias) { - buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056 /* Type */); + buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags); } else { - writeKeyword(writer, 110 /* AnyKeyword */); + writeKeyword(writer, 110); } } else { @@ -8421,18 +8467,18 @@ var ts; } function shouldWriteTypeOfFunctionSymbol() { if (type.symbol) { - var isStaticMethodSymbol = !!(type.symbol.flags & 8192 /* Method */ && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128 /* Static */; })); - var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16 /* Function */) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 207 /* SourceFile */ || declaration.parent.kind === 196 /* ModuleBlock */; })); + var isStaticMethodSymbol = !!(type.symbol.flags & 8192 && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128; })); + var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 207 || declaration.parent.kind === 196; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { - return !!(flags & 2 /* UseTypeOfFunction */) || (typeStack && ts.contains(typeStack, type)); + return !!(flags & 2) || (typeStack && ts.contains(typeStack, type)); } } } } - function writeTypeofSymbol(type) { - writeKeyword(writer, 96 /* TypeOfKeyword */); + function writeTypeofSymbol(type, typeFormatFlags) { + writeKeyword(writer, 96); writeSpace(writer); - buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */); + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags); } function getIndexerParameterName(type, indexKind, fallbackName) { var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind); @@ -8446,108 +8492,108 @@ var ts; var resolved = resolveObjectOrUnionTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { - writePunctuation(writer, 14 /* OpenBraceToken */); - writePunctuation(writer, 15 /* CloseBraceToken */); + writePunctuation(writer, 14); + writePunctuation(writer, 15); return; } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 16 /* OpenParenToken */); + if (flags & 64) { + writePunctuation(writer, 16); } - buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, typeStack); - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 17 /* CloseParenToken */); + buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack); + if (flags & 64) { + writePunctuation(writer, 17); } return; } if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 16 /* OpenParenToken */); + if (flags & 64) { + writePunctuation(writer, 16); } - writeKeyword(writer, 87 /* NewKeyword */); + writeKeyword(writer, 87); writeSpace(writer); - buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, typeStack); - if (flags & 64 /* InElementType */) { - writePunctuation(writer, 17 /* CloseParenToken */); + buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack); + if (flags & 64) { + writePunctuation(writer, 17); } return; } } - writePunctuation(writer, 14 /* OpenBraceToken */); + writePunctuation(writer, 14); writer.writeLine(); writer.increaseIndent(); for (var i = 0; i < resolved.callSignatures.length; i++) { buildSignatureDisplay(resolved.callSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack); - writePunctuation(writer, 22 /* SemicolonToken */); + writePunctuation(writer, 22); writer.writeLine(); } for (var i = 0; i < resolved.constructSignatures.length; i++) { - writeKeyword(writer, 87 /* NewKeyword */); + writeKeyword(writer, 87); writeSpace(writer); buildSignatureDisplay(resolved.constructSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack); - writePunctuation(writer, 22 /* SemicolonToken */); + writePunctuation(writer, 22); writer.writeLine(); } if (resolved.stringIndexType) { - writePunctuation(writer, 18 /* OpenBracketToken */); - writer.writeParameter(getIndexerParameterName(resolved, 0 /* String */, "x")); - writePunctuation(writer, 51 /* ColonToken */); + writePunctuation(writer, 18); + writer.writeParameter(getIndexerParameterName(resolved, 0, "x")); + writePunctuation(writer, 51); writeSpace(writer); - writeKeyword(writer, 119 /* StringKeyword */); - writePunctuation(writer, 19 /* CloseBracketToken */); - writePunctuation(writer, 51 /* ColonToken */); + writeKeyword(writer, 119); + writePunctuation(writer, 19); + writePunctuation(writer, 51); writeSpace(writer); - writeType(resolved.stringIndexType, 0 /* None */); - writePunctuation(writer, 22 /* SemicolonToken */); + writeType(resolved.stringIndexType, 0); + writePunctuation(writer, 22); writer.writeLine(); } if (resolved.numberIndexType) { - writePunctuation(writer, 18 /* OpenBracketToken */); - writer.writeParameter(getIndexerParameterName(resolved, 1 /* Number */, "x")); - writePunctuation(writer, 51 /* ColonToken */); + writePunctuation(writer, 18); + writer.writeParameter(getIndexerParameterName(resolved, 1, "x")); + writePunctuation(writer, 51); writeSpace(writer); - writeKeyword(writer, 117 /* NumberKeyword */); - writePunctuation(writer, 19 /* CloseBracketToken */); - writePunctuation(writer, 51 /* ColonToken */); + writeKeyword(writer, 117); + writePunctuation(writer, 19); + writePunctuation(writer, 51); writeSpace(writer); - writeType(resolved.numberIndexType, 0 /* None */); - writePunctuation(writer, 22 /* SemicolonToken */); + writeType(resolved.numberIndexType, 0); + writePunctuation(writer, 22); writer.writeLine(); } for (var i = 0; i < resolved.properties.length; i++) { var p = resolved.properties[i]; var t = getTypeOfSymbol(p); - if (p.flags & (16 /* Function */ | 8192 /* Method */) && !getPropertiesOfObjectType(t).length) { - var signatures = getSignaturesOfType(t, 0 /* Call */); + if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) { + var signatures = getSignaturesOfType(t, 0); for (var j = 0; j < signatures.length; j++) { buildSymbolDisplay(p, writer); - if (p.flags & 536870912 /* Optional */) { - writePunctuation(writer, 50 /* QuestionToken */); + if (p.flags & 536870912) { + writePunctuation(writer, 50); } buildSignatureDisplay(signatures[j], writer, enclosingDeclaration, globalFlagsToPass, typeStack); - writePunctuation(writer, 22 /* SemicolonToken */); + writePunctuation(writer, 22); writer.writeLine(); } } else { buildSymbolDisplay(p, writer); - if (p.flags & 536870912 /* Optional */) { - writePunctuation(writer, 50 /* QuestionToken */); + if (p.flags & 536870912) { + writePunctuation(writer, 50); } - writePunctuation(writer, 51 /* ColonToken */); + writePunctuation(writer, 51); writeSpace(writer); - writeType(t, 0 /* None */); - writePunctuation(writer, 22 /* SemicolonToken */); + writeType(t, 0); + writePunctuation(writer, 22); writer.writeLine(); } } writer.decreaseIndent(); - writePunctuation(writer, 15 /* CloseBraceToken */); + writePunctuation(writer, 15); } } function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) { var targetSymbol = getTargetSymbol(symbol); - if (targetSymbol.flags & 32 /* Class */ || targetSymbol.flags & 64 /* Interface */) { + if (targetSymbol.flags & 32 || targetSymbol.flags & 64) { buildDisplayForTypeParametersAndDelimiters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags); } } @@ -8556,73 +8602,73 @@ var ts; var constraint = getConstraintOfTypeParameter(tp); if (constraint) { writeSpace(writer); - writeKeyword(writer, 78 /* ExtendsKeyword */); + writeKeyword(writer, 78); writeSpace(writer); buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, typeStack); } } function buildParameterDisplay(p, writer, enclosingDeclaration, flags, typeStack) { if (ts.hasDotDotDotToken(p.valueDeclaration)) { - writePunctuation(writer, 21 /* DotDotDotToken */); + writePunctuation(writer, 21); } appendSymbolNameOnly(p, writer); if (ts.hasQuestionToken(p.valueDeclaration) || p.valueDeclaration.initializer) { - writePunctuation(writer, 50 /* QuestionToken */); + writePunctuation(writer, 50); } - writePunctuation(writer, 51 /* ColonToken */); + writePunctuation(writer, 51); writeSpace(writer); buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack); } function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, typeStack) { if (typeParameters && typeParameters.length) { - writePunctuation(writer, 24 /* LessThanToken */); + writePunctuation(writer, 24); for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { - writePunctuation(writer, 23 /* CommaToken */); + writePunctuation(writer, 23); writeSpace(writer); } buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, typeStack); } - writePunctuation(writer, 25 /* GreaterThanToken */); + writePunctuation(writer, 25); } } function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) { if (typeParameters && typeParameters.length) { - writePunctuation(writer, 24 /* LessThanToken */); + writePunctuation(writer, 24); for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { - writePunctuation(writer, 23 /* CommaToken */); + writePunctuation(writer, 23); writeSpace(writer); } - buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0 /* None */); + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0); } - writePunctuation(writer, 25 /* GreaterThanToken */); + writePunctuation(writer, 25); } } function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, typeStack) { - writePunctuation(writer, 16 /* OpenParenToken */); + writePunctuation(writer, 16); for (var i = 0; i < parameters.length; i++) { if (i > 0) { - writePunctuation(writer, 23 /* CommaToken */); + writePunctuation(writer, 23); writeSpace(writer); } buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, typeStack); } - writePunctuation(writer, 17 /* CloseParenToken */); + writePunctuation(writer, 17); } function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack) { - if (flags & 8 /* WriteArrowStyleSignature */) { + if (flags & 8) { writeSpace(writer); - writePunctuation(writer, 32 /* EqualsGreaterThanToken */); + writePunctuation(writer, 32); } else { - writePunctuation(writer, 51 /* ColonToken */); + writePunctuation(writer, 51); } writeSpace(writer); buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack); } function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, typeStack) { - if (signature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */)) { + if (signature.target && (flags & 32)) { buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration); } else { @@ -8649,12 +8695,12 @@ var ts; function isDeclarationVisible(node) { function getContainingExternalModule(node) { for (; node; node = node.parent) { - if (node.kind === 195 /* ModuleDeclaration */) { - if (node.name.kind === 8 /* StringLiteral */) { + if (node.kind === 195) { + if (node.name.kind === 8) { return node; } } - else if (node.kind === 207 /* SourceFile */) { + else if (node.kind === 207) { return ts.isExternalModule(node) ? node : undefined; } } @@ -8670,7 +8716,7 @@ var ts; if (isSymbolUsedInExportAssignment(symbolOfNode)) { return true; } - if (symbolOfNode.flags & 8388608 /* Import */) { + if (symbolOfNode.flags & 8388608) { return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode)); } } @@ -8678,7 +8724,7 @@ var ts; if (exportAssignmentSymbol === symbol) { return true; } - if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 8388608 /* Import */)) { + if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 8388608)) { resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol); if (resolvedExportSymbol === symbol) { return true; @@ -8696,46 +8742,46 @@ var ts; } function determineIfDeclarationIsVisible() { switch (node.kind) { - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: - case 195 /* ModuleDeclaration */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 190 /* FunctionDeclaration */: - case 194 /* EnumDeclaration */: - case 197 /* ImportDeclaration */: + case 188: + case 146: + case 195: + case 191: + case 192: + case 193: + case 190: + case 194: + case 197: var parent = getDeclarationContainer(node); - if (!(ts.getCombinedNodeFlags(node) & 1 /* Export */) && !(node.kind !== 197 /* ImportDeclaration */ && parent.kind !== 207 /* SourceFile */ && ts.isInAmbientContext(parent))) { + if (!(ts.getCombinedNodeFlags(node) & 1) && !(node.kind !== 197 && parent.kind !== 207 && ts.isInAmbientContext(parent))) { return isGlobalSourceFile(parent) || isUsedInExportAssignment(node); } return isDeclarationVisible(parent); - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - if (node.flags & (32 /* Private */ | 64 /* Protected */)) { + case 126: + case 125: + case 130: + case 131: + case 128: + case 127: + if (node.flags & (32 | 64)) { return false; } - case 129 /* Constructor */: - case 133 /* ConstructSignature */: - case 132 /* CallSignature */: - case 134 /* IndexSignature */: - case 124 /* Parameter */: - case 196 /* ModuleBlock */: - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 139 /* TypeLiteral */: - case 135 /* TypeReference */: - case 140 /* ArrayType */: - case 141 /* TupleType */: - case 142 /* UnionType */: - case 143 /* ParenthesizedType */: + case 129: + case 133: + case 132: + case 134: + case 124: + case 196: + case 136: + case 137: + case 139: + case 135: + case 140: + case 141: + case 142: + case 143: return isDeclarationVisible(node.parent); - case 123 /* TypeParameter */: - case 207 /* SourceFile */: + case 123: + case 207: return true; default: ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind); @@ -8750,14 +8796,14 @@ var ts; } } function getRootDeclaration(node) { - while (node.kind === 146 /* BindingElement */) { + while (node.kind === 146) { node = node.parent.parent; } return node; } function getDeclarationContainer(node) { node = getRootDeclaration(node); - return node.kind === 188 /* VariableDeclaration */ ? node.parent.parent.parent : node.parent; + return node.kind === 188 ? node.parent.parent.parent : node.parent; } function getTypeOfPrototypeProperty(prototype) { var classType = getDeclaredTypeOfSymbol(prototype.parent); @@ -8779,9 +8825,9 @@ var ts; } return parentType; } - if (pattern.kind === 144 /* ObjectBindingPattern */) { + if (pattern.kind === 144) { var name = declaration.propertyName || declaration.name; - var type = getTypeOfPropertyOfType(parentType, name.text) || isNumericLiteralName(name.text) && getIndexTypeOfType(parentType, 1 /* Number */) || getIndexTypeOfType(parentType, 0 /* String */); + var type = getTypeOfPropertyOfType(parentType, name.text) || isNumericLiteralName(name.text) && getIndexTypeOfType(parentType, 1) || getIndexTypeOfType(parentType, 0); if (!type) { error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name)); return unknownType; @@ -8794,20 +8840,20 @@ var ts; } if (!declaration.dotDotDotToken) { var propName = "" + ts.indexOf(pattern.elements, declaration); - var type = isTupleLikeType(parentType) ? getTypeOfPropertyOfType(parentType, propName) : getIndexTypeOfType(parentType, 1 /* Number */); + var type = isTupleLikeType(parentType) ? getTypeOfPropertyOfType(parentType, propName) : getIndexTypeOfType(parentType, 1); if (!type) { error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName); return unknownType; } } else { - var type = createArrayType(getIndexTypeOfType(parentType, 1 /* Number */)); + var type = createArrayType(getIndexTypeOfType(parentType, 1)); } } return type; } function getTypeForVariableLikeDeclaration(declaration) { - if (declaration.parent.parent.kind === 178 /* ForInStatement */) { + if (declaration.parent.parent.kind === 178) { return anyType; } if (ts.isBindingPattern(declaration.parent)) { @@ -8816,10 +8862,10 @@ var ts; if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 124 /* Parameter */) { + if (declaration.kind === 124) { var func = declaration.parent; - if (func.kind === 131 /* SetAccessor */ && !ts.hasDynamicName(func)) { - var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 130 /* GetAccessor */); + if (func.kind === 131 && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 130); if (getter) { return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); } @@ -8832,7 +8878,7 @@ var ts; if (declaration.initializer) { return checkExpressionCached(declaration.initializer); } - if (declaration.kind === 205 /* ShorthandPropertyAssignment */) { + if (declaration.kind === 205) { return checkIdentifier(declaration.name); } return undefined; @@ -8849,7 +8895,7 @@ var ts; function getTypeFromObjectBindingPattern(pattern) { var members = {}; ts.forEach(pattern.elements, function (e) { - var flags = 4 /* Property */ | 67108864 /* Transient */ | (e.initializer ? 536870912 /* Optional */ : 0); + var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0); var name = e.propertyName || e.name; var symbol = createSymbol(flags, name.text); symbol.type = getTypeFromBindingElement(e); @@ -8861,7 +8907,7 @@ var ts; var hasSpreadElement = false; var elementTypes = []; ts.forEach(pattern.elements, function (e) { - elementTypes.push(e.kind === 168 /* OmittedExpression */ || e.dotDotDotToken ? anyType : getTypeFromBindingElement(e)); + elementTypes.push(e.kind === 168 || e.dotDotDotToken ? anyType : getTypeFromBindingElement(e)); if (e.dotDotDotToken) { hasSpreadElement = true; } @@ -8869,7 +8915,7 @@ var ts; return !elementTypes.length ? anyArrayType : hasSpreadElement ? createArrayType(getUnionType(elementTypes)) : createTupleType(elementTypes); } function getTypeFromBindingPattern(pattern) { - return pattern.kind === 144 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern) : getTypeFromArrayBindingPattern(pattern); + return pattern.kind === 144 ? getTypeFromObjectBindingPattern(pattern) : getTypeFromArrayBindingPattern(pattern); } function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) { var type = getTypeForVariableLikeDeclaration(declaration); @@ -8877,7 +8923,7 @@ var ts; if (reportErrors) { reportErrorsFromWidening(declaration, type); } - return declaration.kind !== 204 /* PropertyAssignment */ ? getWidenedType(type) : type; + return declaration.kind !== 204 ? getWidenedType(type) : type; } if (ts.isBindingPattern(declaration.name)) { return getTypeFromBindingPattern(declaration.name); @@ -8885,7 +8931,7 @@ var ts; type = declaration.dotDotDotToken ? anyArrayType : anyType; if (reportErrors && compilerOptions.noImplicitAny) { var root = getRootDeclaration(declaration); - if (!isPrivateWithinAmbient(root) && !(root.kind === 124 /* Parameter */ && isPrivateWithinAmbient(root.parent))) { + if (!isPrivateWithinAmbient(root) && !(root.kind === 124 && isPrivateWithinAmbient(root.parent))) { reportImplicitAnyError(declaration, type); } } @@ -8894,11 +8940,11 @@ var ts; function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - if (symbol.flags & 134217728 /* Prototype */) { + if (symbol.flags & 134217728) { return links.type = getTypeOfPrototypeProperty(symbol); } var declaration = symbol.valueDeclaration; - if (declaration.kind === 203 /* CatchClause */) { + if (declaration.kind === 203) { return links.type = anyType; } links.type = resolvingType; @@ -8921,7 +8967,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 130 /* GetAccessor */) { + if (accessor.kind === 130) { return accessor.type && getTypeFromTypeNode(accessor.type); } else { @@ -8940,8 +8986,8 @@ var ts; links = links || getSymbolLinks(symbol); if (!links.type) { links.type = resolvingType; - var getter = ts.getDeclarationOfKind(symbol, 130 /* GetAccessor */); - var setter = ts.getDeclarationOfKind(symbol, 131 /* SetAccessor */); + var getter = ts.getDeclarationOfKind(symbol, 130); + var setter = ts.getDeclarationOfKind(symbol, 131); var type; var getterReturnType = getAnnotatedAccessorType(getter); if (getterReturnType) { @@ -8971,7 +9017,7 @@ var ts; else if (links.type === resolvingType) { links.type = anyType; if (compilerOptions.noImplicitAny) { - var getter = ts.getDeclarationOfKind(symbol, 130 /* GetAccessor */); + var getter = ts.getDeclarationOfKind(symbol, 130); error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol)); } } @@ -8979,7 +9025,7 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(32768 /* Anonymous */, symbol); + links.type = createObjectType(32768, symbol); } return links.type; } @@ -9005,28 +9051,28 @@ var ts; return links.type; } function getTypeOfSymbol(symbol) { - if (symbol.flags & 16777216 /* Instantiated */) { + if (symbol.flags & 16777216) { return getTypeOfInstantiatedSymbol(symbol); } - if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { + if (symbol.flags & (3 | 4)) { return getTypeOfVariableOrParameterOrProperty(symbol); } - if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { + if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { return getTypeOfFuncClassEnumModule(symbol); } - if (symbol.flags & 8 /* EnumMember */) { + if (symbol.flags & 8) { return getTypeOfEnumMember(symbol); } - if (symbol.flags & 98304 /* Accessor */) { + if (symbol.flags & 98304) { return getTypeOfAccessors(symbol); } - if (symbol.flags & 8388608 /* Import */) { + if (symbol.flags & 8388608) { return getTypeOfImport(symbol); } return unknownType; } function getTargetType(type) { - return type.flags & 4096 /* Reference */ ? type.target : type; + return type.flags & 4096 ? type.target : type; } function hasBaseType(type, checkBase) { return check(type); @@ -9038,7 +9084,7 @@ var ts; function getTypeParametersOfClassOrInterface(symbol) { var result; ts.forEach(symbol.declarations, function (node) { - if (node.kind === 192 /* InterfaceDeclaration */ || node.kind === 191 /* ClassDeclaration */) { + if (node.kind === 192 || node.kind === 191) { var declaration = node; if (declaration.typeParameters && declaration.typeParameters.length) { ts.forEach(declaration.typeParameters, function (node) { @@ -9058,10 +9104,10 @@ var ts; function getDeclaredTypeOfClass(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var type = links.declaredType = createObjectType(1024 /* Class */, symbol); + var type = links.declaredType = createObjectType(1024, symbol); var typeParameters = getTypeParametersOfClassOrInterface(symbol); if (typeParameters) { - type.flags |= 4096 /* Reference */; + type.flags |= 4096; type.typeParameters = typeParameters; type.instantiations = {}; type.instantiations[getTypeListId(type.typeParameters)] = type; @@ -9069,17 +9115,17 @@ var ts; type.typeArguments = type.typeParameters; } type.baseTypes = []; - var declaration = ts.getDeclarationOfKind(symbol, 191 /* ClassDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 191); var baseTypeNode = ts.getClassBaseTypeNode(declaration); if (baseTypeNode) { var baseType = getTypeFromTypeReferenceNode(baseTypeNode); if (baseType !== unknownType) { - if (getTargetType(baseType).flags & 1024 /* Class */) { + if (getTargetType(baseType).flags & 1024) { if (type !== baseType && !hasBaseType(baseType, type)) { type.baseTypes.push(baseType); } else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); } } else { @@ -9090,18 +9136,18 @@ var ts; type.declaredProperties = getNamedMembers(symbol.members); type.declaredCallSignatures = emptyArray; type.declaredConstructSignatures = emptyArray; - type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1); } return links.declaredType; } function getDeclaredTypeOfInterface(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var type = links.declaredType = createObjectType(2048 /* Interface */, symbol); + var type = links.declaredType = createObjectType(2048, symbol); var typeParameters = getTypeParametersOfClassOrInterface(symbol); if (typeParameters) { - type.flags |= 4096 /* Reference */; + type.flags |= 4096; type.typeParameters = typeParameters; type.instantiations = {}; type.instantiations[getTypeListId(type.typeParameters)] = type; @@ -9110,16 +9156,16 @@ var ts; } type.baseTypes = []; ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 192 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 192 && ts.getInterfaceBaseTypeNodes(declaration)) { ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), function (node) { var baseType = getTypeFromTypeReferenceNode(node); if (baseType !== unknownType) { - if (getTargetType(baseType).flags & (1024 /* Class */ | 2048 /* Interface */)) { + if (getTargetType(baseType).flags & (1024 | 2048)) { if (type !== baseType && !hasBaseType(baseType, type)) { type.baseTypes.push(baseType); } else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); } } else { @@ -9132,8 +9178,8 @@ var ts; type.declaredProperties = getNamedMembers(symbol.members); type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); - type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1); } return links.declaredType; } @@ -9141,7 +9187,7 @@ var ts; var links = getSymbolLinks(symbol); if (!links.declaredType) { links.declaredType = resolvingType; - var declaration = ts.getDeclarationOfKind(symbol, 193 /* TypeAliasDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 193); var type = getTypeFromTypeNode(declaration.type); if (links.declaredType === resolvingType) { links.declaredType = type; @@ -9149,7 +9195,7 @@ var ts; } else if (links.declaredType === resolvingType) { links.declaredType = unknownType; - var declaration = ts.getDeclarationOfKind(symbol, 193 /* TypeAliasDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 193); error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); } return links.declaredType; @@ -9157,7 +9203,7 @@ var ts; function getDeclaredTypeOfEnum(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var type = createType(128 /* Enum */); + var type = createType(128); type.symbol = symbol; links.declaredType = type; } @@ -9166,9 +9212,9 @@ var ts; function getDeclaredTypeOfTypeParameter(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { - var type = createType(512 /* TypeParameter */); + var type = createType(512); type.symbol = symbol; - if (!ts.getDeclarationOfKind(symbol, 123 /* TypeParameter */).constraint) { + if (!ts.getDeclarationOfKind(symbol, 123).constraint) { type.constraint = noConstraintType; } links.declaredType = type; @@ -9183,23 +9229,23 @@ var ts; return links.declaredType; } function getDeclaredTypeOfSymbol(symbol) { - ts.Debug.assert((symbol.flags & 16777216 /* Instantiated */) === 0); - if (symbol.flags & 32 /* Class */) { + ts.Debug.assert((symbol.flags & 16777216) === 0); + if (symbol.flags & 32) { return getDeclaredTypeOfClass(symbol); } - if (symbol.flags & 64 /* Interface */) { + if (symbol.flags & 64) { return getDeclaredTypeOfInterface(symbol); } - if (symbol.flags & 524288 /* TypeAlias */) { + if (symbol.flags & 524288) { return getDeclaredTypeOfTypeAlias(symbol); } - if (symbol.flags & 384 /* Enum */) { + if (symbol.flags & 384) { return getDeclaredTypeOfEnum(symbol); } - if (symbol.flags & 262144 /* TypeParameter */) { + if (symbol.flags & 262144) { return getDeclaredTypeOfTypeParameter(symbol); } - if (symbol.flags & 8388608 /* Import */) { + if (symbol.flags & 8388608) { return getDeclaredTypeOfImport(symbol); } return unknownType; @@ -9245,10 +9291,10 @@ var ts; members = createSymbolTable(type.declaredProperties); ts.forEach(type.baseTypes, function (baseType) { addInheritedMembers(members, getPropertiesOfObjectType(baseType)); - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0 /* Call */)); - constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1 /* Construct */)); - stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0 /* String */); - numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1 /* Number */); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1)); + stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0); + numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1); }); } setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); @@ -9264,10 +9310,10 @@ var ts; ts.forEach(target.baseTypes, function (baseType) { var instantiatedBaseType = instantiateType(baseType, mapper); addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType)); - callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); - constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); - stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0 /* String */); - numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1 /* Number */); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1)); + stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0); + numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1); }); setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); } @@ -9288,9 +9334,9 @@ var ts; function getDefaultConstructSignatures(classType) { if (classType.baseTypes.length) { var baseType = classType.baseTypes[0]; - var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1 /* Construct */); + var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1); return ts.map(baseSignatures, function (baseSignature) { - var signature = baseType.flags & 4096 /* Reference */ ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature); + var signature = baseType.flags & 4096 ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature); signature.typeParameters = classType.typeParameters; signature.resolvedReturnType = classType; return signature; @@ -9301,7 +9347,7 @@ var ts; function createTupleTypeMemberSymbols(memberTypes) { var members = {}; for (var i = 0; i < memberTypes.length; i++) { - var symbol = createSymbol(4 /* Property */ | 67108864 /* Transient */, "" + i); + var symbol = createSymbol(4 | 67108864, "" + i); symbol.type = memberTypes[i]; members[i] = symbol; } @@ -9357,32 +9403,32 @@ var ts; return getUnionType(indexTypes); } function resolveUnionTypeMembers(type) { - var callSignatures = getUnionSignatures(type.types, 0 /* Call */); - var constructSignatures = getUnionSignatures(type.types, 1 /* Construct */); - var stringIndexType = getUnionIndexType(type.types, 0 /* String */); - var numberIndexType = getUnionIndexType(type.types, 1 /* Number */); + var callSignatures = getUnionSignatures(type.types, 0); + var constructSignatures = getUnionSignatures(type.types, 1); + var stringIndexType = getUnionIndexType(type.types, 0); + var numberIndexType = getUnionIndexType(type.types, 1); setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType); } function resolveAnonymousTypeMembers(type) { var symbol = type.symbol; - if (symbol.flags & 2048 /* TypeLiteral */) { + if (symbol.flags & 2048) { var members = symbol.members; var callSignatures = getSignaturesOfSymbol(members["__call"]); var constructSignatures = getSignaturesOfSymbol(members["__new"]); - var stringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); - var numberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + var stringIndexType = getIndexTypeOfSymbol(symbol, 0); + var numberIndexType = getIndexTypeOfSymbol(symbol, 1); } else { var members = emptySymbols; var callSignatures = emptyArray; var constructSignatures = emptyArray; - if (symbol.flags & 1952 /* HasExports */) { + if (symbol.flags & 1952) { members = symbol.exports; } - if (symbol.flags & (16 /* Function */ | 8192 /* Method */)) { + if (symbol.flags & (16 | 8192)) { callSignatures = getSignaturesOfSymbol(symbol); } - if (symbol.flags & 32 /* Class */) { + if (symbol.flags & 32) { var classType = getDeclaredTypeOfClass(symbol); constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); if (!constructSignatures.length) { @@ -9394,22 +9440,22 @@ var ts; } } var stringIndexType = undefined; - var numberIndexType = (symbol.flags & 384 /* Enum */) ? stringType : undefined; + var numberIndexType = (symbol.flags & 384) ? stringType : undefined; } setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); } function resolveObjectOrUnionTypeMembers(type) { if (!type.members) { - if (type.flags & (1024 /* Class */ | 2048 /* Interface */)) { + if (type.flags & (1024 | 2048)) { resolveClassOrInterfaceMembers(type); } - else if (type.flags & 32768 /* Anonymous */) { + else if (type.flags & 32768) { resolveAnonymousTypeMembers(type); } - else if (type.flags & 8192 /* Tuple */) { + else if (type.flags & 8192) { resolveTupleTypeMembers(type); } - else if (type.flags & 16384 /* Union */) { + else if (type.flags & 16384) { resolveUnionTypeMembers(type); } else { @@ -9419,13 +9465,13 @@ var ts; return type; } function getPropertiesOfObjectType(type) { - if (type.flags & 48128 /* ObjectType */) { + if (type.flags & 48128) { return resolveObjectOrUnionTypeMembers(type).properties; } return emptyArray; } function getPropertyOfObjectType(type, name) { - if (type.flags & 48128 /* ObjectType */) { + if (type.flags & 48128) { var resolved = resolveObjectOrUnionTypeMembers(type); if (ts.hasProperty(resolved.members, name)) { var symbol = resolved.members[name]; @@ -9446,27 +9492,27 @@ var ts; return result; } function getPropertiesOfType(type) { - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { return getPropertiesOfUnionType(type); } return getPropertiesOfObjectType(getApparentType(type)); } function getApparentType(type) { - if (type.flags & 512 /* TypeParameter */) { + if (type.flags & 512) { do { type = getConstraintOfTypeParameter(type); - } while (type && type.flags & 512 /* TypeParameter */); + } while (type && type.flags & 512); if (!type) { type = emptyObjectType; } } - if (type.flags & 258 /* StringLike */) { + if (type.flags & 258) { type = globalStringType; } - else if (type.flags & 132 /* NumberLike */) { + else if (type.flags & 132) { type = globalNumberType; } - else if (type.flags & 8 /* Boolean */) { + else if (type.flags & 8) { type = globalBooleanType; } return type; @@ -9498,7 +9544,7 @@ var ts; } propTypes.push(getTypeOfSymbol(prop)); } - var result = createSymbol(4 /* Property */ | 67108864 /* Transient */ | 268435456 /* UnionProperty */, name); + var result = createSymbol(4 | 67108864 | 268435456, name); result.unionType = unionType; result.declarations = declarations; result.type = getUnionType(propTypes); @@ -9516,12 +9562,12 @@ var ts; return property; } function getPropertyOfType(type, name) { - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { return getPropertyOfUnionType(type, name); } - if (!(type.flags & 48128 /* ObjectType */)) { + if (!(type.flags & 48128)) { type = getApparentType(type); - if (!(type.flags & 48128 /* ObjectType */)) { + if (!(type.flags & 48128)) { return undefined; } } @@ -9540,9 +9586,9 @@ var ts; return getPropertyOfObjectType(globalObjectType, name); } function getSignaturesOfObjectOrUnionType(type, kind) { - if (type.flags & (48128 /* ObjectType */ | 16384 /* Union */)) { + if (type.flags & (48128 | 16384)) { var resolved = resolveObjectOrUnionTypeMembers(type); - return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; + return kind === 0 ? resolved.callSignatures : resolved.constructSignatures; } return emptyArray; } @@ -9550,9 +9596,9 @@ var ts; return getSignaturesOfObjectOrUnionType(getApparentType(type), kind); } function getIndexTypeOfObjectOrUnionType(type, kind) { - if (type.flags & (48128 /* ObjectType */ | 16384 /* Union */)) { + if (type.flags & (48128 | 16384)) { var resolved = resolveObjectOrUnionTypeMembers(type); - return kind === 0 /* String */ ? resolved.stringIndexType : resolved.numberIndexType; + return kind === 0 ? resolved.stringIndexType : resolved.numberIndexType; } } function getIndexTypeOfType(type, kind) { @@ -9571,7 +9617,7 @@ var ts; function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { - var classType = declaration.kind === 129 /* Constructor */ ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined; + var classType = declaration.kind === 129 ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined; var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined; var parameters = []; var hasStringLiterals = false; @@ -9579,7 +9625,7 @@ var ts; for (var i = 0, n = declaration.parameters.length; i < n; i++) { var param = declaration.parameters[i]; parameters.push(param.symbol); - if (param.type && param.type.kind === 8 /* StringLiteral */) { + if (param.type && param.type.kind === 8) { hasStringLiterals = true; } if (minArgumentCount < 0) { @@ -9599,8 +9645,8 @@ var ts; returnType = getTypeFromTypeNode(declaration.type); } else { - if (declaration.kind === 130 /* GetAccessor */ && !ts.hasDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(declaration.symbol, 131 /* SetAccessor */); + if (declaration.kind === 130 && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 131); returnType = getAnnotatedAccessorType(setter); } if (!returnType && ts.nodeIsMissing(declaration.body)) { @@ -9618,19 +9664,19 @@ var ts; for (var i = 0, len = symbol.declarations.length; i < len; i++) { var node = symbol.declarations[i]; switch (node.kind) { - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 136: + case 137: + case 190: + case 128: + case 127: + case 129: + case 132: + case 133: + case 134: + case 130: + case 131: + case 156: + case 157: if (i > 0 && node.body) { var previous = symbol.declarations[i - 1]; if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { @@ -9675,7 +9721,7 @@ var ts; function getRestTypeOfSignature(signature) { if (signature.hasRestParameter) { var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); - if (type.flags & 4096 /* Reference */ && type.target === globalArrayType) { + if (type.flags & 4096 && type.target === globalArrayType) { return type.typeArguments[0]; } } @@ -9699,8 +9745,8 @@ var ts; } function getOrCreateTypeFromSignature(signature) { if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 129 /* Constructor */ || signature.declaration.kind === 133 /* ConstructSignature */; - var type = createObjectType(32768 /* Anonymous */ | 65536 /* FromSignature */); + var isConstructor = signature.declaration.kind === 129 || signature.declaration.kind === 133; + var type = createObjectType(32768 | 65536); type.members = emptySymbols; type.properties = emptyArray; type.callSignatures = !isConstructor ? [signature] : emptyArray; @@ -9713,7 +9759,7 @@ var ts; return symbol.members["__index"]; } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 /* Number */ ? 117 /* NumberKeyword */ : 119 /* StringKeyword */; + var syntaxKind = kind === 1 ? 117 : 119; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { var len = indexSymbol.declarations.length; @@ -9740,7 +9786,7 @@ var ts; type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType; } else { - type.constraint = getTypeFromTypeNode(ts.getDeclarationOfKind(type.symbol, 123 /* TypeParameter */).constraint); + type.constraint = getTypeFromTypeNode(ts.getDeclarationOfKind(type.symbol, 123).constraint); } } return type.constraint === noConstraintType ? undefined : type.constraint; @@ -9766,13 +9812,13 @@ var ts; for (var i = 0; i < types.length; i++) { result |= types[i].flags; } - return result & 786432 /* RequiresWidening */; + return result & 786432; } function createTypeReference(target, typeArguments) { var id = getTypeListId(typeArguments); var type = target.instantiations[id]; if (!type) { - var flags = 4096 /* Reference */ | getWideningFlagsOfTypes(typeArguments); + var flags = 4096 | getWideningFlagsOfTypes(typeArguments); type = target.instantiations[id] = createObjectType(flags, target.symbol); type.target = target; type.typeArguments = typeArguments; @@ -9788,17 +9834,17 @@ var ts; while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) { currentNode = currentNode.parent; } - links.isIllegalTypeReferenceInConstraint = currentNode.kind === 123 /* TypeParameter */; + links.isIllegalTypeReferenceInConstraint = currentNode.kind === 123; return links.isIllegalTypeReferenceInConstraint; } function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) { var typeParameterSymbol; function check(n) { - if (n.kind === 135 /* TypeReference */ && n.typeName.kind === 64 /* Identifier */) { + if (n.kind === 135 && n.typeName.kind === 64) { var links = getNodeLinks(n); if (links.isIllegalTypeReferenceInConstraint === undefined) { - var symbol = resolveName(typeParameter, n.typeName.text, 793056 /* Type */, undefined, undefined); - if (symbol && (symbol.flags & 262144 /* TypeParameter */)) { + var symbol = resolveName(typeParameter, n.typeName.text, 793056, undefined, undefined); + if (symbol && (symbol.flags & 262144)) { links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; }); } } @@ -9816,21 +9862,21 @@ var ts; function getTypeFromTypeReferenceNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - var symbol = resolveEntityName(node, node.typeName, 793056 /* Type */); + var symbol = resolveEntityName(node, node.typeName, 793056); if (symbol) { var type; - if ((symbol.flags & 262144 /* TypeParameter */) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) { + if ((symbol.flags & 262144) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) { type = unknownType; } else { type = getDeclaredTypeOfSymbol(symbol); - if (type.flags & (1024 /* Class */ | 2048 /* Interface */) && type.flags & 4096 /* Reference */) { + if (type.flags & (1024 | 2048) && type.flags & 4096) { var typeParameters = type.typeParameters; if (node.typeArguments && node.typeArguments.length === typeParameters.length) { type = createTypeReference(type, ts.map(node.typeArguments, getTypeFromTypeNode)); } else { - error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */), typeParameters.length); + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length); type = undefined; } } @@ -9859,9 +9905,9 @@ var ts; for (var i = 0; i < declarations.length; i++) { var declaration = declarations[i]; switch (declaration.kind) { - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: + case 191: + case 192: + case 194: return declaration; } } @@ -9870,7 +9916,7 @@ var ts; return emptyObjectType; } var type = getDeclaredTypeOfSymbol(symbol); - if (!(type.flags & 48128 /* ObjectType */)) { + if (!(type.flags & 48128)) { error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); return emptyObjectType; } @@ -9881,7 +9927,7 @@ var ts; return type; } function getGlobalSymbol(name) { - return resolveName(undefined, name, 793056 /* Type */, ts.Diagnostics.Cannot_find_global_type_0, name); + return resolveName(undefined, name, 793056, ts.Diagnostics.Cannot_find_global_type_0, name); } function getGlobalType(name) { return getTypeOfGlobalSymbol(getGlobalSymbol(name), 0); @@ -9901,7 +9947,7 @@ var ts; var id = getTypeListId(elementTypes); var type = tupleTypes[id]; if (!type) { - type = tupleTypes[id] = createObjectType(8192 /* Tuple */); + type = tupleTypes[id] = createObjectType(8192); type.elementTypes = elementTypes; } return type; @@ -9914,7 +9960,7 @@ var ts; return links.resolvedType; } function addTypeToSortedSet(sortedSet, type) { - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { addTypesToSortedSet(sortedSet, type.types); } else { @@ -9952,7 +9998,7 @@ var ts; } function containsAnyType(types) { for (var i = 0; i < types.length; i++) { - if (types[i].flags & 1 /* Any */) { + if (types[i].flags & 1) { return true; } } @@ -9989,7 +10035,7 @@ var ts; var id = getTypeListId(sortedTypes); var type = unionTypes[id]; if (!type) { - type = unionTypes[id] = createObjectType(16384 /* Union */ | getWideningFlagsOfTypes(sortedTypes)); + type = unionTypes[id] = createObjectType(16384 | getWideningFlagsOfTypes(sortedTypes)); type.types = sortedTypes; } return type; @@ -10004,7 +10050,7 @@ var ts; function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = createObjectType(32768 /* Anonymous */, node.symbol); + links.resolvedType = createObjectType(32768, node.symbol); } return links.resolvedType; } @@ -10012,7 +10058,7 @@ var ts; if (ts.hasProperty(stringLiteralTypes, node.text)) { return stringLiteralTypes[node.text]; } - var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); + var type = stringLiteralTypes[node.text] = createType(256); type.text = ts.getTextOfNode(node); return type; } @@ -10025,36 +10071,36 @@ var ts; } function getTypeFromTypeNode(node) { switch (node.kind) { - case 110 /* AnyKeyword */: + case 110: return anyType; - case 119 /* StringKeyword */: + case 119: return stringType; - case 117 /* NumberKeyword */: + case 117: return numberType; - case 111 /* BooleanKeyword */: + case 111: return booleanType; - case 98 /* VoidKeyword */: + case 98: return voidType; - case 8 /* StringLiteral */: + case 8: return getTypeFromStringLiteral(node); - case 135 /* TypeReference */: + case 135: return getTypeFromTypeReferenceNode(node); - case 138 /* TypeQuery */: + case 138: return getTypeFromTypeQueryNode(node); - case 140 /* ArrayType */: + case 140: return getTypeFromArrayTypeNode(node); - case 141 /* TupleType */: + case 141: return getTypeFromTupleTypeNode(node); - case 142 /* UnionType */: + case 142: return getTypeFromUnionTypeNode(node); - case 143 /* ParenthesizedType */: + case 143: return getTypeFromTypeNode(node.type); - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 139 /* TypeLiteral */: + case 136: + case 137: + case 139: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); - case 64 /* Identifier */: - case 121 /* QualifiedName */: + case 64: + case 121: var symbol = getSymbolInfo(node); return symbol && getDeclaredTypeOfSymbol(symbol); default: @@ -10126,7 +10172,7 @@ var ts; return function (t) { return mapper2(mapper1(t)); }; } function instantiateTypeParameter(typeParameter, mapper) { - var result = createType(512 /* TypeParameter */); + var result = createType(512); result.symbol = typeParameter.symbol; if (typeParameter.constraint) { result.constraint = instantiateType(typeParameter.constraint, mapper); @@ -10148,12 +10194,12 @@ var ts; return result; } function instantiateSymbol(symbol, mapper) { - if (symbol.flags & 16777216 /* Instantiated */) { + if (symbol.flags & 16777216) { var links = getSymbolLinks(symbol); symbol = links.target; mapper = combineTypeMappers(links.mapper, mapper); } - var result = createSymbol(16777216 /* Instantiated */ | 67108864 /* Transient */ | symbol.flags, symbol.name); + var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name); result.declarations = symbol.declarations; result.parent = symbol.parent; result.target = symbol; @@ -10164,13 +10210,13 @@ var ts; return result; } function instantiateAnonymousType(type, mapper) { - var result = createObjectType(32768 /* Anonymous */, type.symbol); + var result = createObjectType(32768, type.symbol); result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol); result.members = createSymbolTable(result.properties); - result.callSignatures = instantiateList(getSignaturesOfType(type, 0 /* Call */), mapper, instantiateSignature); - result.constructSignatures = instantiateList(getSignaturesOfType(type, 1 /* Construct */), mapper, instantiateSignature); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + result.callSignatures = instantiateList(getSignaturesOfType(type, 0), mapper, instantiateSignature); + result.constructSignatures = instantiateList(getSignaturesOfType(type, 1), mapper, instantiateSignature); + var stringIndexType = getIndexTypeOfType(type, 0); + var numberIndexType = getIndexTypeOfType(type, 1); if (stringIndexType) result.stringIndexType = instantiateType(stringIndexType, mapper); if (numberIndexType) @@ -10179,44 +10225,44 @@ var ts; } function instantiateType(type, mapper) { if (mapper !== identityMapper) { - if (type.flags & 512 /* TypeParameter */) { + if (type.flags & 512) { return mapper(type); } - if (type.flags & 32768 /* Anonymous */) { - return type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) ? instantiateAnonymousType(type, mapper) : type; + if (type.flags & 32768) { + return type.symbol && type.symbol.flags & (16 | 8192 | 2048 | 4096) ? instantiateAnonymousType(type, mapper) : type; } - if (type.flags & 4096 /* Reference */) { + if (type.flags & 4096) { return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); } - if (type.flags & 8192 /* Tuple */) { + if (type.flags & 8192) { return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType)); } - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { return getUnionType(instantiateList(type.types, mapper, instantiateType), true); } } return type; } function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 128 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 128 || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 156: + case 157: return isContextSensitiveFunctionLikeDeclaration(node); - case 148 /* ObjectLiteralExpression */: + case 148: return ts.forEach(node.properties, isContextSensitive); - case 147 /* ArrayLiteralExpression */: + case 147: return ts.forEach(node.elements, isContextSensitive); - case 164 /* ConditionalExpression */: + case 164: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 163 /* BinaryExpression */: - return node.operator === 49 /* BarBarToken */ && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 204 /* PropertyAssignment */: + case 163: + return node.operator === 49 && (isContextSensitive(node.left) || isContextSensitive(node.right)); + case 204: return isContextSensitive(node.initializer); - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: return isContextSensitiveFunctionLikeDeclaration(node); - case 155 /* ParenthesizedExpression */: + case 155: return isContextSensitive(node.expression); } return false; @@ -10225,10 +10271,10 @@ var ts; return !node.typeParameters && node.parameters.length && !ts.forEach(node.parameters, function (p) { return p.type; }); } function getTypeWithoutConstructors(type) { - if (type.flags & 48128 /* ObjectType */) { + if (type.flags & 48128) { var resolved = resolveObjectOrUnionTypeMembers(type); if (resolved.constructSignatures.length) { - var result = createObjectType(32768 /* Anonymous */, type.symbol); + var result = createObjectType(32768, type.symbol); result.members = resolved.members; result.properties = resolved.properties; result.callSignatures = resolved.callSignatures; @@ -10245,7 +10291,7 @@ var ts; return checkTypeRelatedTo(source, target, identityRelation, undefined); } function compareTypes(source, target) { - return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 /* True */ : 0 /* False */; + return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0; } function isTypeSubtypeOf(source, target) { return checkTypeSubtypeOf(source, target, undefined); @@ -10285,9 +10331,9 @@ var ts; if (containingMessageChain) { errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); } - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); } - return result !== 0 /* False */; + return result !== 0; function reportError(message, arg0, arg1, arg2) { errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); } @@ -10295,35 +10341,35 @@ var ts; if (elaborateErrors === void 0) { elaborateErrors = false; } var result; if (source === target) - return -1 /* True */; + return -1; if (relation !== identityRelation) { - if (target.flags & 1 /* Any */) - return -1 /* True */; + if (target.flags & 1) + return -1; if (source === undefinedType) - return -1 /* True */; + return -1; if (source === nullType && target !== undefinedType) - return -1 /* True */; - if (source.flags & 128 /* Enum */ && target === numberType) - return -1 /* True */; - if (source.flags & 256 /* StringLiteral */ && target === stringType) - return -1 /* True */; + return -1; + if (source.flags & 128 && target === numberType) + return -1; + if (source.flags & 256 && target === stringType) + return -1; if (relation === assignableRelation) { - if (source.flags & 1 /* Any */) - return -1 /* True */; - if (source === numberType && target.flags & 128 /* Enum */) - return -1 /* True */; + if (source.flags & 1) + return -1; + if (source === numberType && target.flags & 128) + return -1; } } - if (source.flags & 16384 /* Union */ || target.flags & 16384 /* Union */) { + if (source.flags & 16384 || target.flags & 16384) { if (relation === identityRelation) { - if (source.flags & 16384 /* Union */ && target.flags & 16384 /* Union */) { + if (source.flags & 16384 && target.flags & 16384) { if (result = unionTypeRelatedToUnionType(source, target)) { if (result &= unionTypeRelatedToUnionType(target, source)) { return result; } } } - else if (source.flags & 16384 /* Union */) { + else if (source.flags & 16384) { if (result = unionTypeRelatedToType(source, target, reportErrors)) { return result; } @@ -10335,7 +10381,7 @@ var ts; } } else { - if (source.flags & 16384 /* Union */) { + if (source.flags & 16384) { if (result = unionTypeRelatedToType(source, target, reportErrors)) { return result; } @@ -10347,38 +10393,44 @@ var ts; } } } - else if (source.flags & 512 /* TypeParameter */ && target.flags & 512 /* TypeParameter */) { + else if (source.flags & 512 && target.flags & 512) { if (result = typeParameterRelatedTo(source, target, reportErrors)) { return result; } } else { var saveErrorInfo = errorInfo; - if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { if (result = typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) { return result; } } var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo; var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source); - if (sourceOrApparentType.flags & 48128 /* ObjectType */ && target.flags & 48128 /* ObjectType */ && (result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors, elaborateErrors))) { + if (sourceOrApparentType.flags & 48128 && target.flags & 48128 && (result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors, elaborateErrors))) { errorInfo = saveErrorInfo; return result; } } if (reportErrors) { headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1; - reportError(headMessage, typeToString(source), typeToString(target)); + var sourceType = typeToString(source); + var targetType = typeToString(target); + if (sourceType === targetType) { + sourceType = typeToString(source, undefined, 128); + targetType = typeToString(target, undefined, 128); + } + reportError(headMessage, sourceType, targetType); } - return 0 /* False */; + return 0; } function unionTypeRelatedToUnionType(source, target) { - var result = -1 /* True */; + var result = -1; var sourceTypes = source.types; for (var i = 0, len = sourceTypes.length; i < len; i++) { var related = typeRelatedToUnionType(sourceTypes[i], target, false); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -10392,26 +10444,26 @@ var ts; return related; } } - return 0 /* False */; + return 0; } function unionTypeRelatedToType(source, target, reportErrors) { - var result = -1 /* True */; + var result = -1; var sourceTypes = source.types; for (var i = 0, len = sourceTypes.length; i < len; i++) { var related = isRelatedTo(sourceTypes[i], target, reportErrors); if (!related) { - return 0 /* False */; + return 0; } result &= related; } return result; } function typesRelatedTo(sources, targets, reportErrors) { - var result = -1 /* True */; + var result = -1; for (var i = 0, len = sources.length; i < len; i++) { var related = isRelatedTo(sources[i], targets[i], reportErrors); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -10420,13 +10472,13 @@ var ts; function typeParameterRelatedTo(source, target, reportErrors) { if (relation === identityRelation) { if (source.symbol.name !== target.symbol.name) { - return 0 /* False */; + return 0; } if (source.constraint === target.constraint) { - return -1 /* True */; + return -1; } if (source.constraint === noConstraintType || target.constraint === noConstraintType) { - return 0 /* False */; + return 0; } return isRelatedTo(source.constraint, target.constraint, reportErrors); } @@ -10434,35 +10486,35 @@ var ts; while (true) { var constraint = getConstraintOfTypeParameter(source); if (constraint === target) - return -1 /* True */; - if (!(constraint && constraint.flags & 512 /* TypeParameter */)) + return -1; + if (!(constraint && constraint.flags & 512)) break; source = constraint; } - return 0 /* False */; + return 0; } } function objectTypeRelatedTo(source, target, reportErrors, elaborateErrors) { if (elaborateErrors === void 0) { elaborateErrors = false; } if (overflow) { - return 0 /* False */; + return 0; } var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id; var related = relation[id]; if (related !== undefined) { - if (!elaborateErrors || (related === 3 /* FailedAndReported */)) { - return related === 1 /* Succeeded */ ? -1 /* True */ : 0 /* False */; + if (!elaborateErrors || (related === 3)) { + return related === 1 ? -1 : 0; } } if (depth > 0) { for (var i = 0; i < depth; i++) { if (maybeStack[i][id]) { - return 1 /* Maybe */; + return 1; } } if (depth === 100) { overflow = true; - return 0 /* False */; + return 0; } } else { @@ -10474,7 +10526,7 @@ var ts; sourceStack[depth] = source; targetStack[depth] = target; maybeStack[depth] = {}; - maybeStack[depth][id] = 1 /* Succeeded */; + maybeStack[depth][id] = 1; depth++; var saveExpandingFlags = expandingFlags; if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack)) @@ -10482,14 +10534,14 @@ var ts; if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack)) expandingFlags |= 2; if (expandingFlags === 3) { - var result = 1 /* Maybe */; + var result = 1; } else { var result = propertiesRelatedTo(source, target, reportErrors); if (result) { - result &= signaturesRelatedTo(source, target, 0 /* Call */, reportErrors); + result &= signaturesRelatedTo(source, target, 0, reportErrors); if (result) { - result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportErrors); + result &= signaturesRelatedTo(source, target, 1, reportErrors); if (result) { result &= stringIndexTypesRelatedTo(source, target, reportErrors); if (result) { @@ -10503,21 +10555,21 @@ var ts; depth--; if (result) { var maybeCache = maybeStack[depth]; - var destinationCache = (result === -1 /* True */ || depth === 0) ? relation : maybeStack[depth - 1]; + var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1]; ts.copyMap(maybeCache, destinationCache); } else { - relation[id] = reportErrors ? 3 /* FailedAndReported */ : 2 /* Failed */; + relation[id] = reportErrors ? 3 : 2; } return result; } function isDeeplyNestedGeneric(type, stack) { - if (type.flags & 4096 /* Reference */ && depth >= 10) { + if (type.flags & 4096 && depth >= 10) { var target = type.target; var count = 0; for (var i = 0; i < depth; i++) { var t = stack[i]; - if (t.flags & 4096 /* Reference */ && t.target === target) { + if (t.flags & 4096 && t.target === target) { count++; if (count >= 10) return true; @@ -10530,67 +10582,67 @@ var ts; if (relation === identityRelation) { return propertiesIdenticalTo(source, target); } - var result = -1 /* True */; + var result = -1; var properties = getPropertiesOfObjectType(target); - var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 131072 /* ObjectLiteral */); + var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 131072); for (var i = 0; i < properties.length; i++) { var targetProp = properties[i]; var sourceProp = getPropertyOfType(source, targetProp.name); if (sourceProp !== targetProp) { if (!sourceProp) { - if (!(targetProp.flags & 536870912 /* Optional */) || requireOptionalProperties) { + if (!(targetProp.flags & 536870912) || requireOptionalProperties) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); } - return 0 /* False */; + return 0; } } - else if (!(targetProp.flags & 134217728 /* Prototype */)) { + else if (!(targetProp.flags & 134217728)) { var sourceFlags = getDeclarationFlagsFromSymbol(sourceProp); var targetFlags = getDeclarationFlagsFromSymbol(targetProp); - if (sourceFlags & 32 /* Private */ || targetFlags & 32 /* Private */) { + if (sourceFlags & 32 || targetFlags & 32) { if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) { if (reportErrors) { - if (sourceFlags & 32 /* Private */ && targetFlags & 32 /* Private */) { + if (sourceFlags & 32 && targetFlags & 32) { reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp)); } else { - reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourceFlags & 32 /* Private */ ? source : target), typeToString(sourceFlags & 32 /* Private */ ? target : source)); + reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourceFlags & 32 ? source : target), typeToString(sourceFlags & 32 ? target : source)); } } - return 0 /* False */; + return 0; } } - else if (targetFlags & 64 /* Protected */) { - var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32 /* Class */; + else if (targetFlags & 64) { + var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32; var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined; var targetClass = getDeclaredTypeOfSymbol(targetProp.parent); if (!sourceClass || !hasBaseType(sourceClass, targetClass)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass)); } - return 0 /* False */; + return 0; } } - else if (sourceFlags & 64 /* Protected */) { + else if (sourceFlags & 64) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target)); } - return 0 /* False */; + return 0; } var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); if (!related) { if (reportErrors) { reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp)); } - return 0 /* False */; + return 0; } result &= related; - if (sourceProp.flags & 536870912 /* Optional */ && !(targetProp.flags & 536870912 /* Optional */)) { + if (sourceProp.flags & 536870912 && !(targetProp.flags & 536870912)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target)); } - return 0 /* False */; + return 0; } } } @@ -10601,18 +10653,18 @@ var ts; var sourceProperties = getPropertiesOfObjectType(source); var targetProperties = getPropertiesOfObjectType(target); if (sourceProperties.length !== targetProperties.length) { - return 0 /* False */; + return 0; } - var result = -1 /* True */; + var result = -1; for (var i = 0, len = sourceProperties.length; i < len; ++i) { var sourceProp = sourceProperties[i]; var targetProp = getPropertyOfObjectType(target, sourceProp.name); if (!targetProp) { - return 0 /* False */; + return 0; } var related = compareProperties(sourceProp, targetProp, isRelatedTo); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -10623,19 +10675,19 @@ var ts; return signaturesIdenticalTo(source, target, kind); } if (target === anyFunctionType || source === anyFunctionType) { - return -1 /* True */; + return -1; } var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); - var result = -1 /* True */; + var result = -1; var saveErrorInfo = errorInfo; outer: for (var i = 0; i < targetSignatures.length; i++) { var t = targetSignatures[i]; - if (!t.hasStringLiterals || target.flags & 65536 /* FromSignature */) { + if (!t.hasStringLiterals || target.flags & 65536) { var localErrors = reportErrors; for (var j = 0; j < sourceSignatures.length; j++) { var s = sourceSignatures[j]; - if (!s.hasStringLiterals || source.flags & 65536 /* FromSignature */) { + if (!s.hasStringLiterals || source.flags & 65536) { var related = signatureRelatedTo(s, t, localErrors); if (related) { result &= related; @@ -10645,17 +10697,17 @@ var ts; localErrors = false; } } - return 0 /* False */; + return 0; } } return result; } function signatureRelatedTo(source, target, reportErrors) { if (source === target) { - return -1 /* True */; + return -1; } if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { - return 0 /* False */; + return 0; } var sourceMax = source.parameters.length; var targetMax = target.parameters.length; @@ -10678,7 +10730,7 @@ var ts; } source = getErasedSignature(source); target = getErasedSignature(target); - var result = -1 /* True */; + var result = -1; for (var i = 0; i < checkCount; i++) { var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); @@ -10690,7 +10742,7 @@ var ts; if (reportErrors) { reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name); } - return 0 /* False */; + return 0; } errorInfo = saveErrorInfo; } @@ -10706,13 +10758,13 @@ var ts; var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); if (sourceSignatures.length !== targetSignatures.length) { - return 0 /* False */; + return 0; } - var result = -1 /* True */; + var result = -1; for (var i = 0, len = sourceSignatures.length; i < len; ++i) { var related = compareSignatures(sourceSignatures[i], targetSignatures[i], true, isRelatedTo); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -10720,41 +10772,41 @@ var ts; } function stringIndexTypesRelatedTo(source, target, reportErrors) { if (relation === identityRelation) { - return indexTypesIdenticalTo(0 /* String */, source, target); + return indexTypesIdenticalTo(0, source, target); } - var targetType = getIndexTypeOfType(target, 0 /* String */); + var targetType = getIndexTypeOfType(target, 0); if (targetType) { - var sourceType = getIndexTypeOfType(source, 0 /* String */); + var sourceType = getIndexTypeOfType(source, 0); if (!sourceType) { if (reportErrors) { reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); } - return 0 /* False */; + return 0; } var related = isRelatedTo(sourceType, targetType, reportErrors); if (!related) { if (reportErrors) { reportError(ts.Diagnostics.Index_signatures_are_incompatible); } - return 0 /* False */; + return 0; } return related; } - return -1 /* True */; + return -1; } function numberIndexTypesRelatedTo(source, target, reportErrors) { if (relation === identityRelation) { - return indexTypesIdenticalTo(1 /* Number */, source, target); + return indexTypesIdenticalTo(1, source, target); } - var targetType = getIndexTypeOfType(target, 1 /* Number */); + var targetType = getIndexTypeOfType(target, 1); if (targetType) { - var sourceStringType = getIndexTypeOfType(source, 0 /* String */); - var sourceNumberType = getIndexTypeOfType(source, 1 /* Number */); + var sourceStringType = getIndexTypeOfType(source, 0); + var sourceNumberType = getIndexTypeOfType(source, 1); if (!(sourceStringType || sourceNumberType)) { if (reportErrors) { reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); } - return 0 /* False */; + return 0; } if (sourceStringType && sourceNumberType) { var related = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors); @@ -10766,70 +10818,70 @@ var ts; if (reportErrors) { reportError(ts.Diagnostics.Index_signatures_are_incompatible); } - return 0 /* False */; + return 0; } return related; } - return -1 /* True */; + return -1; } function indexTypesIdenticalTo(indexKind, source, target) { var targetType = getIndexTypeOfType(target, indexKind); var sourceType = getIndexTypeOfType(source, indexKind); if (!sourceType && !targetType) { - return -1 /* True */; + return -1; } if (sourceType && targetType) { return isRelatedTo(sourceType, targetType); } - return 0 /* False */; + return 0; } } function isPropertyIdenticalTo(sourceProp, targetProp) { - return compareProperties(sourceProp, targetProp, compareTypes) !== 0 /* False */; + return compareProperties(sourceProp, targetProp, compareTypes) !== 0; } function compareProperties(sourceProp, targetProp, compareTypes) { if (sourceProp === targetProp) { - return -1 /* True */; + return -1; } - var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 /* Private */ | 64 /* Protected */); - var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 /* Private */ | 64 /* Protected */); + var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 | 64); + var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 | 64); if (sourcePropAccessibility !== targetPropAccessibility) { - return 0 /* False */; + return 0; } if (sourcePropAccessibility) { if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) { - return 0 /* False */; + return 0; } } else { - if ((sourceProp.flags & 536870912 /* Optional */) !== (targetProp.flags & 536870912 /* Optional */)) { - return 0 /* False */; + if ((sourceProp.flags & 536870912) !== (targetProp.flags & 536870912)) { + return 0; } } return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); } function compareSignatures(source, target, compareReturnTypes, compareTypes) { if (source === target) { - return -1 /* True */; + return -1; } if (source.parameters.length !== target.parameters.length || source.minArgumentCount !== target.minArgumentCount || source.hasRestParameter !== target.hasRestParameter) { - return 0 /* False */; + return 0; } - var result = -1 /* True */; + var result = -1; if (source.typeParameters && target.typeParameters) { if (source.typeParameters.length !== target.typeParameters.length) { - return 0 /* False */; + return 0; } for (var i = 0, len = source.typeParameters.length; i < len; ++i) { var related = compareTypes(source.typeParameters[i], target.typeParameters[i]); if (!related) { - return 0 /* False */; + return 0; } result &= related; } } else if (source.typeParameters || target.typeParameters) { - return 0 /* False */; + return 0; } source = getErasedSignature(source); target = getErasedSignature(target); @@ -10838,7 +10890,7 @@ var ts; var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]); var related = compareTypes(s, t); if (!related) { - return 0 /* False */; + return 0; } result &= related; } @@ -10884,7 +10936,7 @@ var ts; checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead); } function isArrayType(type) { - return type.flags & 4096 /* Reference */ && type.target === globalArrayType; + return type.flags & 4096 && type.target === globalArrayType; } function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); @@ -10896,7 +10948,7 @@ var ts; var propType = getTypeOfSymbol(p); var widenedType = getWidenedType(propType); if (propType !== widenedType) { - var symbol = createSymbol(p.flags | 67108864 /* Transient */, p.name); + var symbol = createSymbol(p.flags | 67108864, p.name); symbol.declarations = p.declarations; symbol.parent = p.parent; symbol.type = widenedType; @@ -10907,8 +10959,8 @@ var ts; } members[p.name] = p; }); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + var stringIndexType = getIndexTypeOfType(type, 0); + var numberIndexType = getIndexTypeOfType(type, 1); if (stringIndexType) stringIndexType = getWidenedType(stringIndexType); if (numberIndexType) @@ -10916,14 +10968,14 @@ var ts; return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType); } function getWidenedType(type) { - if (type.flags & 786432 /* RequiresWidening */) { - if (type.flags & (32 /* Undefined */ | 64 /* Null */)) { + if (type.flags & 786432) { + if (type.flags & (32 | 64)) { return anyType; } - if (type.flags & 131072 /* ObjectLiteral */) { + if (type.flags & 131072) { return getWidenedTypeOfObjectLiteral(type); } - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { return getUnionType(ts.map(type.types, getWidenedType)); } if (isArrayType(type)) { @@ -10933,7 +10985,7 @@ var ts; return type; } function reportWideningErrorsInType(type) { - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { var errorReported = false; ts.forEach(type.types, function (t) { if (reportWideningErrorsInType(t)) { @@ -10945,11 +10997,11 @@ var ts; if (isArrayType(type)) { return reportWideningErrorsInType(type.typeArguments[0]); } - if (type.flags & 131072 /* ObjectLiteral */) { + if (type.flags & 131072) { var errorReported = false; ts.forEach(getPropertiesOfObjectType(type), function (p) { var t = getTypeOfSymbol(p); - if (t.flags & 262144 /* ContainsUndefinedOrNull */) { + if (t.flags & 262144) { if (!reportWideningErrorsInType(t)) { error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(getWidenedType(t))); } @@ -10963,20 +11015,20 @@ var ts; function reportImplicitAnyError(declaration, type) { var typeAsString = typeToString(getWidenedType(type)); switch (declaration.kind) { - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 126: + case 125: var diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 124 /* Parameter */: + case 124: var diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 190: + case 128: + case 127: + case 130: + case 131: + case 156: + case 157: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; @@ -10989,7 +11041,7 @@ var ts; error(declaration, diagnostic, ts.declarationNameToString(declaration.name), typeAsString); } function reportErrorsFromWidening(declaration, type) { - if (produceDiagnostics && compilerOptions.noImplicitAny && type.flags & 262144 /* ContainsUndefinedOrNull */) { + if (produceDiagnostics && compilerOptions.noImplicitAny && type.flags & 262144) { if (!reportWideningErrorsInType(type)) { reportImplicitAnyError(declaration, type); } @@ -11053,7 +11105,7 @@ var ts; var count = 0; for (var i = 0; i < depth; i++) { var t = stack[i]; - if (t.flags & 4096 /* Reference */ && t.target === target) + if (t.flags & 4096 && t.target === target) count++; } return count < 5; @@ -11061,7 +11113,10 @@ var ts; return true; } function inferFromTypes(source, target) { - if (target.flags & 512 /* TypeParameter */) { + if (source === anyFunctionType) { + return; + } + if (target.flags & 512) { var typeParameters = context.typeParameters; for (var i = 0; i < typeParameters.length; i++) { if (target === typeParameters[i]) { @@ -11073,20 +11128,20 @@ var ts; } } } - else if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { var sourceTypes = source.typeArguments; var targetTypes = target.typeArguments; for (var i = 0; i < sourceTypes.length; i++) { inferFromTypes(sourceTypes[i], targetTypes[i]); } } - else if (target.flags & 16384 /* Union */) { + else if (target.flags & 16384) { var targetTypes = target.types; var typeParameterCount = 0; var typeParameter; for (var i = 0; i < targetTypes.length; i++) { var t = targetTypes[i]; - if (t.flags & 512 /* TypeParameter */ && ts.contains(context.typeParameters, t)) { + if (t.flags & 512 && ts.contains(context.typeParameters, t)) { typeParameter = t; typeParameterCount++; } @@ -11100,13 +11155,13 @@ var ts; inferiority--; } } - else if (source.flags & 16384 /* Union */) { + else if (source.flags & 16384) { var sourceTypes = source.types; for (var i = 0; i < sourceTypes.length; i++) { inferFromTypes(sourceTypes[i], target); } } - else if (source.flags & 48128 /* ObjectType */ && (target.flags & (4096 /* Reference */ | 8192 /* Tuple */) || (target.flags & 32768 /* Anonymous */) && target.symbol && target.symbol.flags & (8192 /* Method */ | 2048 /* TypeLiteral */))) { + else if (source.flags & 48128 && (target.flags & (4096 | 8192) || (target.flags & 32768) && target.symbol && target.symbol.flags & (8192 | 2048))) { if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) { if (depth === 0) { sourceStack = []; @@ -11116,11 +11171,11 @@ var ts; targetStack[depth] = target; depth++; inferFromProperties(source, target); - inferFromSignatures(source, target, 0 /* Call */); - inferFromSignatures(source, target, 1 /* Construct */); - inferFromIndexTypes(source, target, 0 /* String */, 0 /* String */); - inferFromIndexTypes(source, target, 1 /* Number */, 1 /* Number */); - inferFromIndexTypes(source, target, 0 /* String */, 1 /* Number */); + inferFromSignatures(source, target, 0); + inferFromSignatures(source, target, 1); + inferFromIndexTypes(source, target, 0, 0); + inferFromIndexTypes(source, target, 1, 1); + inferFromIndexTypes(source, target, 0, 1); depth--; } } @@ -11194,17 +11249,17 @@ var ts; function getResolvedSymbol(node) { var links = getNodeLinks(node); if (!links.resolvedSymbol) { - links.resolvedSymbol = (ts.getFullWidth(node) > 0 && resolveName(node, node.text, 107455 /* Value */ | 1048576 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, node)) || unknownSymbol; + links.resolvedSymbol = (ts.getFullWidth(node) > 0 && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node)) || unknownSymbol; } return links.resolvedSymbol; } function isInTypeQuery(node) { while (node) { switch (node.kind) { - case 138 /* TypeQuery */: + case 138: return true; - case 64 /* Identifier */: - case 121 /* QualifiedName */: + case 64: + case 121: node = node.parent; continue; default: @@ -11214,7 +11269,7 @@ var ts; ts.Debug.fail("should not get here"); } function removeTypesFromUnionType(type, typeKind, isOfTypeKind) { - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { var types = type.types; if (ts.forEach(types, function (t) { return !!(t.flags & typeKind) === isOfTypeKind; })) { var narrowedType = getUnionType(ts.filter(types, function (t) { return !(t.flags & typeKind) === isOfTypeKind; })); @@ -11241,12 +11296,12 @@ var ts; } return links.assignmentChecks[symbol.id] = isAssignedIn(node); function isAssignedInBinaryExpression(node) { - if (node.operator >= 52 /* FirstAssignment */ && node.operator <= 63 /* LastAssignment */) { + if (node.operator >= 52 && node.operator <= 63) { var n = node.left; - while (n.kind === 155 /* ParenthesizedExpression */) { + while (n.kind === 155) { n = n.expression; } - if (n.kind === 64 /* Identifier */ && getResolvedSymbol(n) === symbol) { + if (n.kind === 64 && getResolvedSymbol(n) === symbol) { return true; } } @@ -11260,45 +11315,45 @@ var ts; } function isAssignedIn(node) { switch (node.kind) { - case 163 /* BinaryExpression */: + case 163: return isAssignedInBinaryExpression(node); - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: + case 188: + case 146: return isAssignedInVariableDeclaration(node); - case 144 /* ObjectBindingPattern */: - case 145 /* ArrayBindingPattern */: - case 147 /* ArrayLiteralExpression */: - case 148 /* ObjectLiteralExpression */: - case 149 /* PropertyAccessExpression */: - case 150 /* ElementAccessExpression */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: - case 154 /* TypeAssertionExpression */: - case 155 /* ParenthesizedExpression */: - case 161 /* PrefixUnaryExpression */: - case 158 /* DeleteExpression */: - case 159 /* TypeOfExpression */: - case 160 /* VoidExpression */: - case 162 /* PostfixUnaryExpression */: - case 164 /* ConditionalExpression */: - case 167 /* SpreadElementExpression */: - case 170 /* Block */: - case 171 /* VariableStatement */: - case 173 /* ExpressionStatement */: - case 174 /* IfStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 181 /* ReturnStatement */: - case 182 /* WithStatement */: - case 183 /* SwitchStatement */: - case 200 /* CaseClause */: - case 201 /* DefaultClause */: - case 184 /* LabeledStatement */: - case 185 /* ThrowStatement */: - case 186 /* TryStatement */: - case 203 /* CatchClause */: + case 144: + case 145: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 154: + case 155: + case 161: + case 158: + case 159: + case 160: + case 162: + case 164: + case 167: + case 170: + case 171: + case 173: + case 174: + case 175: + case 176: + case 177: + case 178: + case 181: + case 182: + case 183: + case 200: + case 201: + case 184: + case 185: + case 186: + case 203: return ts.forEachChild(node, isAssignedIn); } return false; @@ -11329,40 +11384,40 @@ var ts; } function getNarrowedTypeOfSymbol(symbol, node) { var type = getTypeOfSymbol(symbol); - if (node && symbol.flags & 3 /* Variable */ && type.flags & (1 /* Any */ | 48128 /* ObjectType */ | 16384 /* Union */ | 512 /* TypeParameter */)) { + if (node && symbol.flags & 3 && type.flags & (1 | 48128 | 16384 | 512)) { loop: while (node.parent) { var child = node; node = node.parent; var narrowedType = type; switch (node.kind) { - case 174 /* IfStatement */: + case 174: if (child !== node.expression) { narrowedType = narrowType(type, node.expression, child === node.thenStatement); } break; - case 164 /* ConditionalExpression */: + case 164: if (child !== node.condition) { narrowedType = narrowType(type, node.condition, child === node.whenTrue); } break; - case 163 /* BinaryExpression */: + case 163: if (child === node.right) { - if (node.operator === 48 /* AmpersandAmpersandToken */) { + if (node.operator === 48) { narrowedType = narrowType(type, node.left, true); } - else if (node.operator === 49 /* BarBarToken */) { + else if (node.operator === 49) { narrowedType = narrowType(type, node.left, false); } } break; - case 207 /* SourceFile */: - case 195 /* ModuleDeclaration */: - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 129 /* Constructor */: + case 207: + case 195: + case 190: + case 128: + case 127: + case 130: + case 131: + case 129: break loop; } if (narrowedType !== type) { @@ -11375,21 +11430,21 @@ var ts; } return type; function narrowTypeByEquality(type, expr, assumeTrue) { - if (expr.left.kind !== 159 /* TypeOfExpression */ || expr.right.kind !== 8 /* StringLiteral */) { + if (expr.left.kind !== 159 || expr.right.kind !== 8) { return type; } var left = expr.left; var right = expr.right; - if (left.expression.kind !== 64 /* Identifier */ || getResolvedSymbol(left.expression) !== symbol) { + if (left.expression.kind !== 64 || getResolvedSymbol(left.expression) !== symbol) { return type; } var typeInfo = primitiveTypeInfo[right.text]; - if (expr.operator === 31 /* ExclamationEqualsEqualsToken */) { + if (expr.operator === 31) { assumeTrue = !assumeTrue; } if (assumeTrue) { if (!typeInfo) { - return removeTypesFromUnionType(type, 258 /* StringLike */ | 132 /* NumberLike */ | 8 /* Boolean */, true); + return removeTypesFromUnionType(type, 258 | 132 | 8, true); } if (isTypeSubtypeOf(typeInfo.type, type)) { return typeInfo.type; @@ -11426,7 +11481,7 @@ var ts; } } function narrowTypeByInstanceof(type, expr, assumeTrue) { - if (type.flags & 1 /* Any */ || !assumeTrue || expr.left.kind !== 64 /* Identifier */ || getResolvedSymbol(expr.left) !== symbol) { + if (type.flags & 1 || !assumeTrue || expr.left.kind !== 64 || getResolvedSymbol(expr.left) !== symbol) { return type; } var rightType = checkExpression(expr.right); @@ -11441,32 +11496,32 @@ var ts; if (isTypeSubtypeOf(targetType, type)) { return targetType; } - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { return getUnionType(ts.filter(type.types, function (t) { return isTypeSubtypeOf(t, targetType); })); } return type; } function narrowType(type, expr, assumeTrue) { switch (expr.kind) { - case 155 /* ParenthesizedExpression */: + case 155: return narrowType(type, expr.expression, assumeTrue); - case 163 /* BinaryExpression */: + case 163: var operator = expr.operator; - if (operator === 30 /* EqualsEqualsEqualsToken */ || operator === 31 /* ExclamationEqualsEqualsToken */) { + if (operator === 30 || operator === 31) { return narrowTypeByEquality(type, expr, assumeTrue); } - else if (operator === 48 /* AmpersandAmpersandToken */) { + else if (operator === 48) { return narrowTypeByAnd(type, expr, assumeTrue); } - else if (operator === 49 /* BarBarToken */) { + else if (operator === 49) { return narrowTypeByOr(type, expr, assumeTrue); } - else if (operator === 86 /* InstanceOfKeyword */) { + else if (operator === 86) { return narrowTypeByInstanceof(type, expr, assumeTrue); } break; - case 161 /* PrefixUnaryExpression */: - if (expr.operator === 46 /* ExclamationToken */) { + case 161: + if (expr.operator === 46) { return narrowType(type, expr.operand, !assumeTrue); } break; @@ -11480,17 +11535,20 @@ var ts; var rightSide = nodeLinks.importOnRightSide; nodeLinks.importOnRightSide = undefined; getSymbolLinks(rightSide).referenced = true; - ts.Debug.assert((rightSide.flags & 8388608 /* Import */) !== 0); - nodeLinks = getNodeLinks(ts.getDeclarationOfKind(rightSide, 197 /* ImportDeclaration */)); + ts.Debug.assert((rightSide.flags & 8388608) !== 0); + nodeLinks = getNodeLinks(ts.getDeclarationOfKind(rightSide, 197)); } } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); - if (symbol.flags & 8388608 /* Import */) { + if (symbol === argumentsSymbol && ts.getContainingFunction(node).kind === 157) { + error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression); + } + if (symbol.flags & 8388608) { var symbolLinks = getSymbolLinks(symbol); if (!symbolLinks.referenced) { var importOrExportAssignment = getLeftSideOfImportOrExportAssignment(node); - if (!importOrExportAssignment || (importOrExportAssignment.flags & 1 /* Export */) || (importOrExportAssignment.kind === 198 /* ExportAssignment */)) { + if (!importOrExportAssignment || (importOrExportAssignment.flags & 1) || (importOrExportAssignment.kind === 198)) { symbolLinks.referenced = !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveImport(symbol)); } else { @@ -11500,7 +11558,7 @@ var ts; } } if (symbolLinks.referenced) { - markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 197 /* ImportDeclaration */)); + markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 197)); } } checkCollisionWithCapturedSuperVariable(node, node); @@ -11508,65 +11566,65 @@ var ts; return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node); } function captureLexicalThis(node, container) { - var classNode = container.parent && container.parent.kind === 191 /* ClassDeclaration */ ? container.parent : undefined; - getNodeLinks(node).flags |= 2 /* LexicalThis */; - if (container.kind === 126 /* PropertyDeclaration */ || container.kind === 129 /* Constructor */) { - getNodeLinks(classNode).flags |= 4 /* CaptureThis */; + var classNode = container.parent && container.parent.kind === 191 ? container.parent : undefined; + getNodeLinks(node).flags |= 2; + if (container.kind === 126 || container.kind === 129) { + getNodeLinks(classNode).flags |= 4; } else { - getNodeLinks(container).flags |= 4 /* CaptureThis */; + getNodeLinks(container).flags |= 4; } } function checkThisExpression(node) { var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; - if (container.kind === 157 /* ArrowFunction */) { + if (container.kind === 157) { container = ts.getThisContainer(container, false); - needToCaptureLexicalThis = true; + needToCaptureLexicalThis = (languageVersion < 2); } switch (container.kind) { - case 195 /* ModuleDeclaration */: + case 195: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body); break; - case 194 /* EnumDeclaration */: + case 194: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); break; - case 129 /* Constructor */: + case 129: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - if (container.flags & 128 /* Static */) { + case 126: + case 125: + if (container.flags & 128) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; - case 122 /* ComputedPropertyName */: + case 122: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } if (needToCaptureLexicalThis) { captureLexicalThis(node, container); } - var classNode = container.parent && container.parent.kind === 191 /* ClassDeclaration */ ? container.parent : undefined; + var classNode = container.parent && container.parent.kind === 191 ? container.parent : undefined; if (classNode) { var symbol = getSymbolOfNode(classNode); - return container.flags & 128 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol); + return container.flags & 128 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol); } return anyType; } function isInConstructorArgumentInitializer(node, constructorDecl) { for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 124 /* Parameter */) { + if (n.kind === 124) { return true; } } return false; } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 151 /* CallExpression */ && node.parent.expression === node; - var enclosingClass = ts.getAncestor(node, 191 /* ClassDeclaration */); + var isCallExpression = node.parent.kind === 151 && node.parent.expression === node; + var enclosingClass = ts.getAncestor(node, 191); var baseClass; if (enclosingClass && ts.getClassBaseTypeNode(enclosingClass)) { var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass)); @@ -11580,34 +11638,34 @@ var ts; if (container) { var canUseSuperExpression = false; if (isCallExpression) { - canUseSuperExpression = container.kind === 129 /* Constructor */; + canUseSuperExpression = container.kind === 129; } else { var needToCaptureLexicalThis = false; - while (container && container.kind === 157 /* ArrowFunction */) { + while (container && container.kind === 157) { container = ts.getSuperContainer(container, true); needToCaptureLexicalThis = true; } - if (container && container.parent && container.parent.kind === 191 /* ClassDeclaration */) { - if (container.flags & 128 /* Static */) { - canUseSuperExpression = container.kind === 128 /* MethodDeclaration */ || container.kind === 127 /* MethodSignature */ || container.kind === 130 /* GetAccessor */ || container.kind === 131 /* SetAccessor */; + if (container && container.parent && container.parent.kind === 191) { + if (container.flags & 128) { + canUseSuperExpression = container.kind === 128 || container.kind === 127 || container.kind === 130 || container.kind === 131; } else { - canUseSuperExpression = container.kind === 128 /* MethodDeclaration */ || container.kind === 127 /* MethodSignature */ || container.kind === 130 /* GetAccessor */ || container.kind === 131 /* SetAccessor */ || container.kind === 126 /* PropertyDeclaration */ || container.kind === 125 /* PropertySignature */ || container.kind === 129 /* Constructor */; + canUseSuperExpression = container.kind === 128 || container.kind === 127 || container.kind === 130 || container.kind === 131 || container.kind === 126 || container.kind === 125 || container.kind === 129; } } } if (canUseSuperExpression) { var returnType; - if ((container.flags & 128 /* Static */) || isCallExpression) { - getNodeLinks(node).flags |= 32 /* SuperStatic */; + if ((container.flags & 128) || isCallExpression) { + getNodeLinks(node).flags |= 32; returnType = getTypeOfSymbol(baseClass.symbol); } else { - getNodeLinks(node).flags |= 16 /* SuperInstance */; + getNodeLinks(node).flags |= 16; returnType = baseClass; } - if (container.kind === 129 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + if (container.kind === 129 && isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); returnType = unknownType; } @@ -11617,7 +11675,7 @@ var ts; return returnType; } } - if (container.kind === 122 /* ComputedPropertyName */) { + if (container.kind === 122) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name); } else if (isCallExpression) { @@ -11654,7 +11712,7 @@ var ts; if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 124 /* Parameter */) { + if (declaration.kind === 124) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; @@ -11669,7 +11727,7 @@ var ts; function getContextualTypeForReturnExpression(node) { var func = ts.getContainingFunction(node); if (func) { - if (func.type || func.kind === 129 /* Constructor */ || func.kind === 130 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(func.symbol, 131 /* SetAccessor */))) { + if (func.type || func.kind === 129 || func.kind === 130 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(func.symbol, 131))) { return getReturnTypeOfSignature(getSignatureFromDeclaration(func)); } var signature = getContextualSignatureForFunctionLikeDeclaration(func); @@ -11689,7 +11747,7 @@ var ts; return undefined; } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 153 /* TaggedTemplateExpression */) { + if (template.parent.kind === 153) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -11697,12 +11755,12 @@ var ts; function getContextualTypeForBinaryOperand(node) { var binaryExpression = node.parent; var operator = binaryExpression.operator; - if (operator >= 52 /* FirstAssignment */ && operator <= 63 /* LastAssignment */) { + if (operator >= 52 && operator <= 63) { if (node === binaryExpression.right) { return checkExpression(binaryExpression.left); } } - else if (operator === 49 /* BarBarToken */) { + else if (operator === 49) { var type = getContextualType(binaryExpression); if (!type && node === binaryExpression.right) { type = checkExpression(binaryExpression.left); @@ -11712,7 +11770,7 @@ var ts; return undefined; } function applyToContextualType(type, mapper) { - if (!(type.flags & 16384 /* Union */)) { + if (!(type.flags & 16384)) { return mapper(type); } var types = type.types; @@ -11744,10 +11802,10 @@ var ts; return applyToContextualType(type, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }); } function contextualTypeIsTupleLikeType(type) { - return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); + return !!(type.flags & 16384 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); } function contextualTypeHasIndexSignature(type, kind) { - return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(type, kind)); + return !!(type.flags & 16384 ? ts.forEach(type.types, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(type, kind)); } function getContextualTypeForObjectLiteralMethod(node) { ts.Debug.assert(ts.isObjectLiteralMethod(node)); @@ -11767,7 +11825,7 @@ var ts; return propertyType; } } - return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) || getIndexTypeOfContextualType(type, 0 /* String */); + return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) || getIndexTypeOfContextualType(type, 0); } return undefined; } @@ -11776,7 +11834,7 @@ var ts; var type = getContextualType(arrayLiteral); if (type) { var index = ts.indexOf(arrayLiteral.elements, node); - return getTypeOfPropertyOfContextualType(type, "" + index) || getIndexTypeOfContextualType(type, 1 /* Number */); + return getTypeOfPropertyOfContextualType(type, "" + index) || getIndexTypeOfContextualType(type, 1); } return undefined; } @@ -11793,38 +11851,38 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 188 /* VariableDeclaration */: - case 124 /* Parameter */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 146 /* BindingElement */: + case 188: + case 124: + case 126: + case 125: + case 146: return getContextualTypeForInitializerExpression(node); - case 157 /* ArrowFunction */: - case 181 /* ReturnStatement */: + case 157: + case 181: return getContextualTypeForReturnExpression(node); - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: return getContextualTypeForArgument(parent, node); - case 154 /* TypeAssertionExpression */: + case 154: return getTypeFromTypeNode(parent.type); - case 163 /* BinaryExpression */: + case 163: return getContextualTypeForBinaryOperand(node); - case 204 /* PropertyAssignment */: + case 204: return getContextualTypeForObjectLiteralElement(parent); - case 147 /* ArrayLiteralExpression */: + case 147: return getContextualTypeForElementExpression(node); - case 164 /* ConditionalExpression */: + case 164: return getContextualTypeForConditionalOperand(node); - case 169 /* TemplateSpan */: - ts.Debug.assert(parent.parent.kind === 165 /* TemplateExpression */); + case 169: + ts.Debug.assert(parent.parent.kind === 165); return getContextualTypeForSubstitutionExpression(parent.parent, node); - case 155 /* ParenthesizedExpression */: + case 155: return getContextualType(parent); } return undefined; } function getNonGenericSignature(type) { - var signatures = getSignaturesOfObjectOrUnionType(type, 0 /* Call */); + var signatures = getSignaturesOfObjectOrUnionType(type, 0); if (signatures.length === 1) { var signature = signatures[0]; if (!signature.typeParameters) { @@ -11833,24 +11891,24 @@ var ts; } } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 156 /* FunctionExpression */ || node.kind === 157 /* ArrowFunction */; + return node.kind === 156 || node.kind === 157; } function getContextualSignatureForFunctionLikeDeclaration(node) { return isFunctionExpressionOrArrowFunction(node) ? getContextualSignature(node) : undefined; } function getContextualSignature(node) { - ts.Debug.assert(node.kind !== 128 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 128 || ts.isObjectLiteralMethod(node)); var type = ts.isObjectLiteralMethod(node) ? getContextualTypeForObjectLiteralMethod(node) : getContextualType(node); if (!type) { return undefined; } - if (!(type.flags & 16384 /* Union */)) { + if (!(type.flags & 16384)) { return getNonGenericSignature(type); } var signatureList; var types = type.types; for (var i = 0; i < types.length; i++) { - if (signatureList && getSignaturesOfObjectOrUnionType(types[i], 0 /* Call */).length > 1) { + if (signatureList && getSignaturesOfObjectOrUnionType(types[i], 0).length > 1) { return undefined; } var signature = getNonGenericSignature(types[i]); @@ -11879,13 +11937,13 @@ var ts; } function isAssignmentTarget(node) { var parent = node.parent; - if (parent.kind === 163 /* BinaryExpression */ && parent.operator === 52 /* EqualsToken */ && parent.left === node) { + if (parent.kind === 163 && parent.operator === 52 && parent.left === node) { return true; } - if (parent.kind === 204 /* PropertyAssignment */) { + if (parent.kind === 204) { return isAssignmentTarget(parent.parent); } - if (parent.kind === 147 /* ArrayLiteralExpression */) { + if (parent.kind === 147) { return isAssignmentTarget(parent); } return false; @@ -11907,8 +11965,8 @@ var ts; var elementTypes = []; ts.forEach(elements, function (e) { var type = checkExpression(e, contextualMapper); - if (e.kind === 167 /* SpreadElementExpression */) { - elementTypes.push(getIndexTypeOfType(type, 1 /* Number */) || anyType); + if (e.kind === 167) { + elementTypes.push(getIndexTypeOfType(type, 1) || anyType); hasSpreadElement = true; } else { @@ -11924,10 +11982,10 @@ var ts; return createArrayType(getUnionType(elementTypes)); } function isNumericName(name) { - return name.kind === 122 /* ComputedPropertyName */ ? isNumericComputedName(name) : isNumericLiteralName(name.text); + return name.kind === 122 ? isNumericComputedName(name) : isNumericLiteralName(name.text); } function isNumericComputedName(name) { - return isTypeOfKind(checkComputedPropertyName(name), 1 /* Any */ | 132 /* NumberLike */); + return isTypeOfKind(checkComputedPropertyName(name), 1 | 132); } function isNumericLiteralName(name) { return (+name).toString() === name; @@ -11936,7 +11994,7 @@ var ts; var links = getNodeLinks(node.expression); if (!links.resolvedType) { links.resolvedType = checkExpression(node.expression); - if (!isTypeOfKind(links.resolvedType, 1 /* Any */ | 132 /* NumberLike */ | 258 /* StringLike */)) { + if (!isTypeOfKind(links.resolvedType, 1 | 132 | 258)) { error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_or_any); } } @@ -11951,19 +12009,19 @@ var ts; for (var i = 0; i < node.properties.length; i++) { var memberDecl = node.properties[i]; var member = memberDecl.symbol; - if (memberDecl.kind === 204 /* PropertyAssignment */ || memberDecl.kind === 205 /* ShorthandPropertyAssignment */ || ts.isObjectLiteralMethod(memberDecl)) { - if (memberDecl.kind === 204 /* PropertyAssignment */) { + if (memberDecl.kind === 204 || memberDecl.kind === 205 || ts.isObjectLiteralMethod(memberDecl)) { + if (memberDecl.kind === 204) { var type = checkPropertyAssignment(memberDecl, contextualMapper); } - else if (memberDecl.kind === 128 /* MethodDeclaration */) { + else if (memberDecl.kind === 128) { var type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { - ts.Debug.assert(memberDecl.kind === 205 /* ShorthandPropertyAssignment */); - var type = memberDecl.name.kind === 122 /* ComputedPropertyName */ ? unknownType : checkExpression(memberDecl.name, contextualMapper); + ts.Debug.assert(memberDecl.kind === 205); + var type = memberDecl.name.kind === 122 ? unknownType : checkExpression(memberDecl.name, contextualMapper); } typeFlags |= type.flags; - var prop = createSymbol(4 /* Property */ | 67108864 /* Transient */ | member.flags, member.name); + var prop = createSymbol(4 | 67108864 | member.flags, member.name); prop.declarations = member.declarations; prop.parent = member.parent; if (member.valueDeclaration) { @@ -11974,7 +12032,7 @@ var ts; member = prop; } else { - ts.Debug.assert(memberDecl.kind === 130 /* GetAccessor */ || memberDecl.kind === 131 /* SetAccessor */); + ts.Debug.assert(memberDecl.kind === 130 || memberDecl.kind === 131); checkAccessorDeclaration(memberDecl); } if (!ts.hasDynamicName(memberDecl)) { @@ -11982,17 +12040,17 @@ var ts; } propertiesArray.push(member); } - var stringIndexType = getIndexType(0 /* String */); - var numberIndexType = getIndexType(1 /* Number */); + var stringIndexType = getIndexType(0); + var numberIndexType = getIndexType(1); var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexType, numberIndexType); - result.flags |= 131072 /* ObjectLiteral */ | 524288 /* ContainsObjectLiteral */ | (typeFlags & 262144 /* ContainsUndefinedOrNull */); + result.flags |= 131072 | 524288 | (typeFlags & 262144); return result; function getIndexType(kind) { if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) { var propTypes = []; for (var i = 0; i < propertiesArray.length; i++) { var propertyDecl = node.properties[i]; - if (kind === 0 /* String */ || isNumericName(propertyDecl.name)) { + if (kind === 0 || isNumericName(propertyDecl.name)) { var type = getTypeOfSymbol(propertiesArray[i]); if (!ts.contains(propTypes, type)) { propTypes.push(type); @@ -12007,36 +12065,36 @@ var ts; } } function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 126 /* PropertyDeclaration */; + return s.valueDeclaration ? s.valueDeclaration.kind : 126; } function getDeclarationFlagsFromSymbol(s) { - return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 /* Prototype */ ? 16 /* Public */ | 128 /* Static */ : 0; + return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 16 | 128 : 0; } function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); - if (!(flags & (32 /* Private */ | 64 /* Protected */))) { + if (!(flags & (32 | 64))) { return; } - var enclosingClassDeclaration = ts.getAncestor(node, 191 /* ClassDeclaration */); + var enclosingClassDeclaration = ts.getAncestor(node, 191); var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined; var declaringClass = getDeclaredTypeOfSymbol(prop.parent); - if (flags & 32 /* Private */) { + if (flags & 32) { if (declaringClass !== enclosingClass) { error(node, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(declaringClass)); } return; } - if (left.kind === 90 /* SuperKeyword */) { + if (left.kind === 90) { return; } if (!enclosingClass || !hasBaseType(enclosingClass, declaringClass)) { error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass)); return; } - if (flags & 128 /* Static */) { + if (flags & 128) { return; } - if (!(getTargetType(type).flags & (1024 /* Class */ | 2048 /* Interface */) && hasBaseType(type, enclosingClass))) { + if (!(getTargetType(type).flags & (1024 | 2048) && hasBaseType(type, enclosingClass))) { error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass)); } } @@ -12063,8 +12121,8 @@ var ts; return unknownType; } getNodeLinks(node).resolvedSymbol = prop; - if (prop.parent && prop.parent.flags & 32 /* Class */) { - if (left.kind === 90 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 128 /* MethodDeclaration */) { + if (prop.parent && prop.parent.flags & 32) { + if (left.kind === 90 && getDeclarationKindFromSymbol(prop) !== 128) { error(right, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); } else { @@ -12076,18 +12134,18 @@ var ts; return anyType; } function isValidPropertyAccess(node, propertyName) { - var left = node.kind === 149 /* PropertyAccessExpression */ ? node.expression : node.left; + var left = node.kind === 149 ? node.expression : node.left; var type = checkExpressionOrQualifiedName(left); if (type !== unknownType && type !== anyType) { var prop = getPropertyOfType(getWidenedType(type), propertyName); - if (prop && prop.parent && prop.parent.flags & 32 /* Class */) { - if (left.kind === 90 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 128 /* MethodDeclaration */) { + if (prop && prop.parent && prop.parent.flags & 32) { + if (left.kind === 90 && getDeclarationKindFromSymbol(prop) !== 128) { return false; } else { - var diagnosticsCount = diagnostics.length; + var modificationCount = diagnostics.getModificationCount(); checkClassPropertyAccess(node, left, type, prop); - return diagnostics.length === diagnosticsCount; + return diagnostics.getModificationCount() === modificationCount; } } } @@ -12096,7 +12154,7 @@ var ts; function checkIndexedAccess(node) { if (!node.argumentExpression) { var sourceFile = getSourceFile(node); - if (node.parent.kind === 152 /* NewExpression */ && node.parent.expression === node) { + if (node.parent.kind === 152 && node.parent.expression === node) { var start = ts.skipTrivia(sourceFile.text, node.expression.end); var end = node.end; grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); @@ -12113,12 +12171,12 @@ var ts; return unknownType; } var isConstEnum = isConstEnumObjectType(objectType); - if (isConstEnum && (!node.argumentExpression || node.argumentExpression.kind !== 8 /* StringLiteral */)) { + if (isConstEnum && (!node.argumentExpression || node.argumentExpression.kind !== 8)) { error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal); return unknownType; } if (node.argumentExpression) { - if (node.argumentExpression.kind === 8 /* StringLiteral */ || node.argumentExpression.kind === 7 /* NumericLiteral */) { + if (node.argumentExpression.kind === 8 || node.argumentExpression.kind === 7) { var name = node.argumentExpression.text; var prop = getPropertyOfType(objectType, name); if (prop) { @@ -12131,14 +12189,14 @@ var ts; } } } - if (isTypeOfKind(indexType, 1 /* Any */ | 258 /* StringLike */ | 132 /* NumberLike */)) { - if (isTypeOfKind(indexType, 1 /* Any */ | 132 /* NumberLike */)) { - var numberIndexType = getIndexTypeOfType(objectType, 1 /* Number */); + if (isTypeOfKind(indexType, 1 | 258 | 132)) { + if (isTypeOfKind(indexType, 1 | 132)) { + var numberIndexType = getIndexTypeOfType(objectType, 1); if (numberIndexType) { return numberIndexType; } } - var stringIndexType = getIndexTypeOfType(objectType, 0 /* String */); + var stringIndexType = getIndexTypeOfType(objectType, 0); if (stringIndexType) { return stringIndexType; } @@ -12151,7 +12209,7 @@ var ts; return unknownType; } function resolveUntypedCall(node) { - if (node.kind === 153 /* TaggedTemplateExpression */) { + if (node.kind === 153) { checkExpression(node.template); } else { @@ -12169,11 +12227,11 @@ var ts; var adjustedArgCount; var typeArguments; var callIsIncomplete; - if (node.kind === 153 /* TaggedTemplateExpression */) { + if (node.kind === 153) { var tagExpression = node; adjustedArgCount = args.length; typeArguments = undefined; - if (tagExpression.template.kind === 165 /* TemplateExpression */) { + if (tagExpression.template.kind === 165) { var templateExpression = tagExpression.template; var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans); ts.Debug.assert(lastSpan !== undefined); @@ -12181,14 +12239,14 @@ var ts; } else { var templateLiteral = tagExpression.template; - ts.Debug.assert(templateLiteral.kind === 10 /* NoSubstitutionTemplateLiteral */); + ts.Debug.assert(templateLiteral.kind === 10); callIsIncomplete = !!templateLiteral.isUnterminated; } } else { var callExpression = node; if (!callExpression.arguments) { - ts.Debug.assert(callExpression.kind === 152 /* NewExpression */); + ts.Debug.assert(callExpression.kind === 152); return signature.minArgumentCount === 0; } adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length; @@ -12211,7 +12269,7 @@ var ts; } } function getSingleCallSignature(type) { - if (type.flags & 48128 /* ObjectType */) { + if (type.flags & 48128) { var resolved = resolveObjectOrUnionTypeMembers(type); if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) { return resolved.callSignatures[0]; @@ -12229,28 +12287,27 @@ var ts; function inferTypeArguments(signature, args, excludeArgument) { var typeParameters = signature.typeParameters; var context = createInferenceContext(typeParameters, false); - var mapper = createInferenceMapper(context); + var inferenceMapper = createInferenceMapper(context); for (var i = 0; i < args.length; i++) { - if (args[i].kind === 168 /* OmittedExpression */) { + if (args[i].kind === 168) { continue; } - if (!excludeArgument || excludeArgument[i] === undefined) { - var parameterType = getTypeAtPosition(signature, i); - if (i === 0 && args[i].parent.kind === 153 /* TaggedTemplateExpression */) { - inferTypes(context, globalTemplateStringsArrayType, parameterType); - continue; - } - inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); + var parameterType = getTypeAtPosition(signature, i); + if (i === 0 && args[i].parent.kind === 153) { + inferTypes(context, globalTemplateStringsArrayType, parameterType); + continue; } + var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper; + inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); } if (excludeArgument) { for (var i = 0; i < args.length; i++) { - if (args[i].kind === 168 /* OmittedExpression */) { + if (args[i].kind === 168) { continue; } if (excludeArgument[i] === false) { var parameterType = getTypeAtPosition(signature, i); - inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType); + inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, inferenceMapper), parameterType); } } } @@ -12283,15 +12340,15 @@ var ts; for (var i = 0; i < args.length; i++) { var arg = args[i]; var argType; - if (arg.kind === 168 /* OmittedExpression */) { + if (arg.kind === 168) { continue; } var paramType = getTypeAtPosition(signature, i); - if (i === 0 && node.kind === 153 /* TaggedTemplateExpression */) { + if (i === 0 && node.kind === 153) { argType = globalTemplateStringsArrayType; } else { - argType = arg.kind === 8 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); + argType = arg.kind === 8 && !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); if (!isValidArgument) { @@ -12302,10 +12359,10 @@ var ts; } function getEffectiveCallArguments(node) { var args; - if (node.kind === 153 /* TaggedTemplateExpression */) { + if (node.kind === 153) { var template = node.template; args = [template]; - if (template.kind === 165 /* TemplateExpression */) { + if (template.kind === 165) { ts.forEach(template.templateSpans, function (span) { args.push(span.expression); }); @@ -12317,8 +12374,8 @@ var ts; return args; } function getEffectiveTypeArguments(callExpression) { - if (callExpression.expression.kind === 90 /* SuperKeyword */) { - var containingClass = ts.getAncestor(callExpression, 191 /* ClassDeclaration */); + if (callExpression.expression.kind === 90) { + var containingClass = ts.getAncestor(callExpression, 191); var baseClassTypeNode = containingClass && ts.getClassBaseTypeNode(containingClass); return baseClassTypeNode && baseClassTypeNode.typeArguments; } @@ -12327,11 +12384,11 @@ var ts; } } function resolveCall(node, signatures, candidatesOutArray) { - var isTaggedTemplate = node.kind === 153 /* TaggedTemplateExpression */; + var isTaggedTemplate = node.kind === 153; var typeArguments; if (!isTaggedTemplate) { typeArguments = getEffectiveTypeArguments(node); - if (node.expression.kind !== 90 /* SuperKeyword */) { + if (node.expression.kind !== 90) { ts.forEach(typeArguments, checkSourceElement); } } @@ -12487,10 +12544,10 @@ var ts; } } function resolveCallExpression(node, candidatesOutArray) { - if (node.expression.kind === 90 /* SuperKeyword */) { + if (node.expression.kind === 90) { var superType = checkSuperExpression(node.expression); if (superType !== unknownType) { - return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */), candidatesOutArray); + return resolveCall(node, getSignaturesOfType(superType, 1), candidatesOutArray); } return resolveUntypedCall(node); } @@ -12499,9 +12556,9 @@ var ts; if (apparentType === unknownType) { return resolveErrorCall(node); } - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); - if (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384 /* Union */) && isTypeAssignableTo(funcType, globalFunctionType))) { + var callSignatures = getSignaturesOfType(apparentType, 0); + var constructSignatures = getSignaturesOfType(apparentType, 1); + if (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) { if (node.typeArguments) { error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } @@ -12530,11 +12587,11 @@ var ts; if (expressionType === unknownType) { return resolveErrorCall(node); } - var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); + var constructSignatures = getSignaturesOfType(expressionType, 1); if (constructSignatures.length) { return resolveCall(node, constructSignatures, candidatesOutArray); } - var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); + var callSignatures = getSignaturesOfType(expressionType, 0); if (callSignatures.length) { var signature = resolveCall(node, callSignatures, candidatesOutArray); if (getReturnTypeOfSignature(signature) !== voidType) { @@ -12551,8 +12608,8 @@ var ts; if (apparentType === unknownType) { return resolveErrorCall(node); } - var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); - if (tagType === anyType || (!callSignatures.length && !(tagType.flags & 16384 /* Union */) && isTypeAssignableTo(tagType, globalFunctionType))) { + var callSignatures = getSignaturesOfType(apparentType, 0); + if (tagType === anyType || (!callSignatures.length && !(tagType.flags & 16384) && isTypeAssignableTo(tagType, globalFunctionType))) { return resolveUntypedCall(node); } if (!callSignatures.length) { @@ -12565,13 +12622,13 @@ var ts; var links = getNodeLinks(node); if (!links.resolvedSignature || candidatesOutArray) { links.resolvedSignature = anySignature; - if (node.kind === 151 /* CallExpression */) { + if (node.kind === 151) { links.resolvedSignature = resolveCallExpression(node, candidatesOutArray); } - else if (node.kind === 152 /* NewExpression */) { + else if (node.kind === 152) { links.resolvedSignature = resolveNewExpression(node, candidatesOutArray); } - else if (node.kind === 153 /* TaggedTemplateExpression */) { + else if (node.kind === 153) { links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray); } else { @@ -12583,12 +12640,12 @@ var ts; function checkCallExpression(node) { checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node, node.arguments); var signature = getResolvedSignature(node); - if (node.expression.kind === 90 /* SuperKeyword */) { + if (node.expression.kind === 90) { return voidType; } - if (node.kind === 152 /* NewExpression */) { + if (node.kind === 152) { var declaration = signature.declaration; - if (declaration && declaration.kind !== 129 /* Constructor */ && declaration.kind !== 133 /* ConstructSignature */ && declaration.kind !== 137 /* ConstructorType */) { + if (declaration && declaration.kind !== 129 && declaration.kind !== 133 && declaration.kind !== 137) { if (compilerOptions.noImplicitAny) { error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); } @@ -12598,7 +12655,7 @@ var ts; return getReturnTypeOfSignature(signature); } function checkTaggedTemplateExpression(node) { - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { grammarErrorOnFirstToken(node.template, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher); } return getReturnTypeOfSignature(getResolvedSignature(node)); @@ -12632,7 +12689,10 @@ var ts; } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); - if (func.body.kind !== 170 /* Block */) { + if (!func.body) { + return unknownType; + } + if (func.body.kind !== 170) { var type = checkExpressionCached(func.body, contextualMapper); } else { @@ -12670,7 +12730,7 @@ var ts; }); } function bodyContainsSingleThrowStatement(body) { - return (body.statements.length === 1) && (body.statements[0].kind === 185 /* ThrowStatement */); + return (body.statements.length === 1) && (body.statements[0].kind === 185); } function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { if (!produceDiagnostics) { @@ -12679,7 +12739,7 @@ var ts; if (returnType === voidType || returnType === anyType) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 170 /* Block */) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 170) { return; } var bodyBlock = func.body; @@ -12692,22 +12752,22 @@ var ts; error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement); } function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { - ts.Debug.assert(node.kind !== 128 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 128 || ts.isObjectLiteralMethod(node)); var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 156 /* FunctionExpression */) { + if (!hasGrammarError && node.kind === 156) { checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node); } - if (contextualMapper === identityMapper) { + if (contextualMapper === identityMapper && isContextSensitive(node)) { return anyFunctionType; } var links = getNodeLinks(node); var type = getTypeOfSymbol(node.symbol); - if (!(links.flags & 64 /* ContextChecked */)) { + if (!(links.flags & 64)) { var contextualSignature = getContextualSignature(node); - if (!(links.flags & 64 /* ContextChecked */)) { - links.flags |= 64 /* ContextChecked */; + if (!(links.flags & 64)) { + links.flags |= 64; if (contextualSignature) { - var signature = getSignaturesOfType(type, 0 /* Call */)[0]; + var signature = getSignaturesOfType(type, 0)[0]; if (isContextSensitive(node)) { assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); } @@ -12722,19 +12782,19 @@ var ts; checkSignatureDeclaration(node); } } - if (produceDiagnostics && node.kind !== 128 /* MethodDeclaration */ && node.kind !== 127 /* MethodSignature */) { + if (produceDiagnostics && node.kind !== 128 && node.kind !== 127) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); } return type; } function checkFunctionExpressionOrObjectLiteralMethodBody(node) { - ts.Debug.assert(node.kind !== 128 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 128 || ts.isObjectLiteralMethod(node)); if (node.type) { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); } if (node.body) { - if (node.body.kind === 170 /* Block */) { + if (node.body.kind === 170) { checkSourceElement(node.body); } else { @@ -12747,7 +12807,7 @@ var ts; } } function checkArithmeticOperandType(operand, type, diagnostic) { - if (!isTypeOfKind(type, 1 /* Any */ | 132 /* NumberLike */)) { + if (!isTypeOfKind(type, 1 | 132)) { error(operand, diagnostic); return false; } @@ -12760,15 +12820,15 @@ var ts; } function isReferenceOrErrorExpression(n) { switch (n.kind) { - case 64 /* Identifier */: + case 64: var symbol = findSymbol(n); - return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3 /* Variable */) !== 0; - case 149 /* PropertyAccessExpression */: + return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3) !== 0; + case 149: var symbol = findSymbol(n); - return !symbol || symbol === unknownSymbol || (symbol.flags & ~8 /* EnumMember */) !== 0; - case 150 /* ElementAccessExpression */: + return !symbol || symbol === unknownSymbol || (symbol.flags & ~8) !== 0; + case 150: return true; - case 155 /* ParenthesizedExpression */: + case 155: return isReferenceOrErrorExpression(n.expression); default: return false; @@ -12776,20 +12836,20 @@ var ts; } function isConstVariableReference(n) { switch (n.kind) { - case 64 /* Identifier */: - case 149 /* PropertyAccessExpression */: + case 64: + case 149: var symbol = findSymbol(n); - return symbol && (symbol.flags & 3 /* Variable */) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 4096 /* Const */) !== 0; - case 150 /* ElementAccessExpression */: + return symbol && (symbol.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 4096) !== 0; + case 150: var index = n.argumentExpression; var symbol = findSymbol(n.expression); - if (symbol && index && index.kind === 8 /* StringLiteral */) { + if (symbol && index && index.kind === 8) { var name = index.text; var prop = getPropertyOfType(getTypeOfSymbol(symbol), name); - return prop && (prop.flags & 3 /* Variable */) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 4096 /* Const */) !== 0; + return prop && (prop.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 4096) !== 0; } return false; - case 155 /* ParenthesizedExpression */: + case 155: return isConstVariableReference(n.expression); default: return false; @@ -12806,7 +12866,7 @@ var ts; return true; } function checkDeleteExpression(node) { - if (node.parserContextFlags & 1 /* StrictMode */ && node.expression.kind === 64 /* Identifier */) { + if (node.parserContextFlags & 1 && node.expression.kind === 64) { grammarErrorOnNode(node.expression, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); } var operandType = checkExpression(node.expression); @@ -12821,19 +12881,19 @@ var ts; return undefinedType; } function checkPrefixUnaryExpression(node) { - if ((node.operator === 38 /* PlusPlusToken */ || node.operator === 39 /* MinusMinusToken */)) { + if ((node.operator === 38 || node.operator === 39)) { checkGrammarEvalOrArgumentsInStrictMode(node, node.operand); } var operandType = checkExpression(node.operand); switch (node.operator) { - case 33 /* PlusToken */: - case 34 /* MinusToken */: - case 47 /* TildeToken */: + case 33: + case 34: + case 47: return numberType; - case 46 /* ExclamationToken */: + case 46: return booleanType; - case 38 /* PlusPlusToken */: - case 39 /* MinusMinusToken */: + case 38: + case 39: var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); if (ok) { checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant); @@ -12855,7 +12915,7 @@ var ts; if (type.flags & kind) { return true; } - if (type.flags & 16384 /* Union */) { + if (type.flags & 16384) { var types = type.types; for (var i = 0; i < types.length; i++) { if (!(types[i].flags & kind)) { @@ -12867,25 +12927,25 @@ var ts; return false; } function isConstEnumObjectType(type) { - return type.flags & (48128 /* ObjectType */ | 32768 /* Anonymous */) && type.symbol && isConstEnumSymbol(type.symbol); + return type.flags & (48128 | 32768) && type.symbol && isConstEnumSymbol(type.symbol); } function isConstEnumSymbol(symbol) { - return (symbol.flags & 128 /* ConstEnum */) !== 0; + return (symbol.flags & 128) !== 0; } function checkInstanceOfExpression(node, leftType, rightType) { - if (isTypeOfKind(leftType, 510 /* Primitive */)) { + if (isTypeOfKind(leftType, 510)) { 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.flags & 1 /* Any */ || isTypeSubtypeOf(rightType, globalFunctionType))) { + if (!(rightType.flags & 1 || 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; } function checkInExpression(node, leftType, rightType) { - if (!isTypeOfKind(leftType, 1 /* Any */ | 258 /* StringLike */ | 132 /* NumberLike */)) { + if (!isTypeOfKind(leftType, 1 | 258 | 132)) { error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number); } - if (!isTypeOfKind(rightType, 1 /* Any */ | 48128 /* ObjectType */ | 512 /* TypeParameter */)) { + if (!isTypeOfKind(rightType, 1 | 48128 | 512)) { error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } return booleanType; @@ -12894,9 +12954,9 @@ var ts; var properties = node.properties; for (var i = 0; i < properties.length; i++) { var p = properties[i]; - if (p.kind === 204 /* PropertyAssignment */ || p.kind === 205 /* ShorthandPropertyAssignment */) { + if (p.kind === 204 || p.kind === 205) { var name = p.name; - var type = sourceType.flags & 1 /* Any */ ? sourceType : getTypeOfPropertyOfType(sourceType, name.text) || isNumericLiteralName(name.text) && getIndexTypeOfType(sourceType, 1 /* Number */) || getIndexTypeOfType(sourceType, 0 /* String */); + var type = sourceType.flags & 1 ? sourceType : getTypeOfPropertyOfType(sourceType, name.text) || isNumericLiteralName(name.text) && getIndexTypeOfType(sourceType, 1) || getIndexTypeOfType(sourceType, 0); if (type) { checkDestructuringAssignment(p.initializer || name, type); } @@ -12918,10 +12978,10 @@ var ts; var elements = node.elements; for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 168 /* OmittedExpression */) { - if (e.kind !== 167 /* SpreadElementExpression */) { + if (e.kind !== 168) { + if (e.kind !== 167) { var propName = "" + i; - var type = sourceType.flags & 1 /* Any */ ? sourceType : isTupleLikeType(sourceType) ? getTypeOfPropertyOfType(sourceType, propName) : getIndexTypeOfType(sourceType, 1 /* Number */); + var type = sourceType.flags & 1 ? sourceType : isTupleLikeType(sourceType) ? getTypeOfPropertyOfType(sourceType, propName) : getIndexTypeOfType(sourceType, 1); if (type) { checkDestructuringAssignment(e, type, contextualMapper); } @@ -12942,14 +13002,14 @@ var ts; return sourceType; } function checkDestructuringAssignment(target, sourceType, contextualMapper) { - if (target.kind === 163 /* BinaryExpression */ && target.operator === 52 /* EqualsToken */) { + if (target.kind === 163 && target.operator === 52) { checkBinaryExpression(target, contextualMapper); target = target.left; } - if (target.kind === 148 /* ObjectLiteralExpression */) { + if (target.kind === 148) { return checkObjectLiteralAssignment(target, sourceType, contextualMapper); } - if (target.kind === 147 /* ArrayLiteralExpression */) { + if (target.kind === 147) { return checkArrayLiteralAssignment(target, sourceType, contextualMapper); } return checkReferenceAssignment(target, sourceType, contextualMapper); @@ -12966,38 +13026,38 @@ var ts; checkGrammarEvalOrArgumentsInStrictMode(node, node.left); } var operator = node.operator; - if (operator === 52 /* EqualsToken */ && (node.left.kind === 148 /* ObjectLiteralExpression */ || node.left.kind === 147 /* ArrayLiteralExpression */)) { + if (operator === 52 && (node.left.kind === 148 || node.left.kind === 147)) { return checkDestructuringAssignment(node.left, checkExpression(node.right, contextualMapper), contextualMapper); } var leftType = checkExpression(node.left, contextualMapper); var rightType = checkExpression(node.right, contextualMapper); switch (operator) { - case 35 /* AsteriskToken */: - case 55 /* AsteriskEqualsToken */: - case 36 /* SlashToken */: - case 56 /* SlashEqualsToken */: - case 37 /* PercentToken */: - case 57 /* PercentEqualsToken */: - case 34 /* MinusToken */: - case 54 /* MinusEqualsToken */: - case 40 /* LessThanLessThanToken */: - case 58 /* LessThanLessThanEqualsToken */: - case 41 /* GreaterThanGreaterThanToken */: - case 59 /* GreaterThanGreaterThanEqualsToken */: - case 42 /* GreaterThanGreaterThanGreaterThanToken */: - case 60 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 44 /* BarToken */: - case 62 /* BarEqualsToken */: - case 45 /* CaretToken */: - case 63 /* CaretEqualsToken */: - case 43 /* AmpersandToken */: - case 61 /* AmpersandEqualsToken */: - if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + case 35: + case 55: + case 36: + case 56: + case 37: + case 57: + case 34: + case 54: + case 40: + case 58: + case 41: + case 59: + case 42: + case 60: + case 44: + case 62: + case 45: + case 63: + case 43: + case 61: + if (leftType.flags & (32 | 64)) leftType = rightType; - if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + if (rightType.flags & (32 | 64)) rightType = leftType; var suggestedOperator; - if ((leftType.flags & 8 /* Boolean */) && (rightType.flags & 8 /* Boolean */) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { + if ((leftType.flags & 8) && (rightType.flags & 8) && (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 { @@ -13008,73 +13068,73 @@ var ts; } } return numberType; - case 33 /* PlusToken */: - case 53 /* PlusEqualsToken */: - if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + case 33: + case 53: + if (leftType.flags & (32 | 64)) leftType = rightType; - if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + if (rightType.flags & (32 | 64)) rightType = leftType; var resultType; - if (isTypeOfKind(leftType, 132 /* NumberLike */) && isTypeOfKind(rightType, 132 /* NumberLike */)) { + if (isTypeOfKind(leftType, 132) && isTypeOfKind(rightType, 132)) { resultType = numberType; } - else if (isTypeOfKind(leftType, 258 /* StringLike */) || isTypeOfKind(rightType, 258 /* StringLike */)) { + else if (isTypeOfKind(leftType, 258) || isTypeOfKind(rightType, 258)) { resultType = stringType; } - else if (leftType.flags & 1 /* Any */ || rightType.flags & 1 /* Any */) { + else if (leftType.flags & 1 || rightType.flags & 1) { resultType = anyType; } if (!resultType) { reportOperatorError(); return anyType; } - if (operator === 53 /* PlusEqualsToken */) { + if (operator === 53) { checkAssignmentOperator(resultType); } return resultType; - case 28 /* EqualsEqualsToken */: - case 29 /* ExclamationEqualsToken */: - case 30 /* EqualsEqualsEqualsToken */: - case 31 /* ExclamationEqualsEqualsToken */: - case 24 /* LessThanToken */: - case 25 /* GreaterThanToken */: - case 26 /* LessThanEqualsToken */: - case 27 /* GreaterThanEqualsToken */: + case 28: + case 29: + case 30: + case 31: + case 24: + case 25: + case 26: + case 27: if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; - case 86 /* InstanceOfKeyword */: + case 86: return checkInstanceOfExpression(node, leftType, rightType); - case 85 /* InKeyword */: + case 85: return checkInExpression(node, leftType, rightType); - case 48 /* AmpersandAmpersandToken */: + case 48: return rightType; - case 49 /* BarBarToken */: + case 49: return getUnionType([leftType, rightType]); - case 52 /* EqualsToken */: + case 52: checkAssignmentOperator(rightType); return rightType; - case 23 /* CommaToken */: + case 23: return rightType; } function getSuggestedBooleanOperator(operator) { switch (operator) { - case 44 /* BarToken */: - case 62 /* BarEqualsToken */: - return 49 /* BarBarToken */; - case 45 /* CaretToken */: - case 63 /* CaretEqualsToken */: - return 31 /* ExclamationEqualsEqualsToken */; - case 43 /* AmpersandToken */: - case 61 /* AmpersandEqualsToken */: - return 48 /* AmpersandAmpersandToken */; + case 44: + case 62: + return 49; + case 45: + case 63: + return 31; + case 43: + case 61: + return 48; default: return undefined; } } function checkAssignmentOperator(valueType) { - if (produceDiagnostics && operator >= 52 /* FirstAssignment */ && operator <= 63 /* LastAssignment */) { + if (produceDiagnostics && operator >= 52 && operator <= 63) { var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant); if (ok) { checkTypeAssignableTo(valueType, leftType, node.left, undefined); @@ -13086,7 +13146,7 @@ var ts; } } function checkYieldExpression(node) { - if (!(node.parserContextFlags & 4 /* Yield */)) { + if (!(node.parserContextFlags & 4)) { grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration); } else { @@ -13153,7 +13213,7 @@ var ts; } function checkExpressionOrQualifiedName(node, contextualMapper) { var type; - if (node.kind == 121 /* QualifiedName */) { + if (node.kind == 121) { type = checkQualifiedName(node); } else { @@ -13161,7 +13221,7 @@ var ts; type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); } if (isConstEnumObjectType(type)) { - var ok = (node.parent.kind === 149 /* PropertyAccessExpression */ && node.parent.expression === node) || (node.parent.kind === 150 /* ElementAccessExpression */ && node.parent.expression === node) || ((node.kind === 64 /* Identifier */ || node.kind === 121 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node)); + var ok = (node.parent.kind === 149 && node.parent.expression === node) || (node.parent.kind === 150 && node.parent.expression === node) || ((node.kind === 64 || node.kind === 121) && isInRightSideOfImportOrExportAssignment(node)); if (!ok) { error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment); } @@ -13174,65 +13234,65 @@ var ts; } function checkExpressionWorker(node, contextualMapper) { switch (node.kind) { - case 64 /* Identifier */: + case 64: return checkIdentifier(node); - case 92 /* ThisKeyword */: + case 92: return checkThisExpression(node); - case 90 /* SuperKeyword */: + case 90: return checkSuperExpression(node); - case 88 /* NullKeyword */: + case 88: return nullType; - case 94 /* TrueKeyword */: - case 79 /* FalseKeyword */: + case 94: + case 79: return booleanType; - case 7 /* NumericLiteral */: + case 7: return checkNumericLiteral(node); - case 165 /* TemplateExpression */: + case 165: return checkTemplateExpression(node); - case 8 /* StringLiteral */: - case 10 /* NoSubstitutionTemplateLiteral */: + case 8: + case 10: return stringType; - case 9 /* RegularExpressionLiteral */: + case 9: return globalRegExpType; - case 147 /* ArrayLiteralExpression */: + case 147: return checkArrayLiteral(node, contextualMapper); - case 148 /* ObjectLiteralExpression */: + case 148: return checkObjectLiteral(node, contextualMapper); - case 149 /* PropertyAccessExpression */: + case 149: return checkPropertyAccessExpression(node); - case 150 /* ElementAccessExpression */: + case 150: return checkIndexedAccess(node); - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: return checkCallExpression(node); - case 153 /* TaggedTemplateExpression */: + case 153: return checkTaggedTemplateExpression(node); - case 154 /* TypeAssertionExpression */: + case 154: return checkTypeAssertion(node); - case 155 /* ParenthesizedExpression */: - return checkExpression(node.expression); - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 155: + return checkExpression(node.expression, contextualMapper); + case 156: + case 157: return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); - case 159 /* TypeOfExpression */: + case 159: return checkTypeOfExpression(node); - case 158 /* DeleteExpression */: + case 158: return checkDeleteExpression(node); - case 160 /* VoidExpression */: + case 160: return checkVoidExpression(node); - case 161 /* PrefixUnaryExpression */: + case 161: return checkPrefixUnaryExpression(node); - case 162 /* PostfixUnaryExpression */: + case 162: return checkPostfixUnaryExpression(node); - case 163 /* BinaryExpression */: + case 163: return checkBinaryExpression(node, contextualMapper); - case 164 /* ConditionalExpression */: + case 164: return checkConditionalExpression(node, contextualMapper); - case 167 /* SpreadElementExpression */: + case 167: return checkSpreadElementExpression(node, contextualMapper); - case 168 /* OmittedExpression */: + case 168: return undefinedType; - case 166 /* YieldExpression */: + case 166: checkYieldExpression(node); return unknownType; } @@ -13252,9 +13312,9 @@ var ts; checkGrammarModifiers(node) || checkGrammarEvalOrArgumentsInStrictMode(node, node.name); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (node.flags & 112 /* AccessibilityModifier */) { + if (node.flags & 112) { func = ts.getContainingFunction(node); - if (!(func.kind === 129 /* Constructor */ && ts.nodeIsPresent(func.body))) { + if (!(func.kind === 129 && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -13268,10 +13328,10 @@ var ts; } } function checkSignatureDeclaration(node) { - if (node.kind === 134 /* IndexSignature */) { + if (node.kind === 134) { checkGrammarIndexSignature(node); } - else if (node.kind === 136 /* FunctionType */ || node.kind === 190 /* FunctionDeclaration */ || node.kind === 137 /* ConstructorType */ || node.kind === 132 /* CallSignature */ || node.kind === 129 /* Constructor */ || node.kind === 133 /* ConstructSignature */) { + else if (node.kind === 136 || node.kind === 190 || node.kind === 137 || node.kind === 132 || node.kind === 129 || node.kind === 133) { checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); @@ -13283,10 +13343,10 @@ var ts; checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { - case 133 /* ConstructSignature */: + case 133: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 132 /* CallSignature */: + case 132: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } @@ -13295,7 +13355,7 @@ var ts; checkSpecializedSignatureDeclaration(node); } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 192 /* InterfaceDeclaration */) { + if (node.kind === 192) { var nodeSymbol = getSymbolOfNode(node); if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { return; @@ -13309,7 +13369,7 @@ var ts; var declaration = indexSymbol.declarations[i]; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 119 /* StringKeyword */: + case 119: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -13317,7 +13377,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 117 /* NumberKeyword */: + case 117: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -13354,37 +13414,37 @@ var ts; return; } function isSuperCallExpression(n) { - return n.kind === 151 /* CallExpression */ && n.expression.kind === 90 /* SuperKeyword */; + return n.kind === 151 && n.expression.kind === 90; } function containsSuperCall(n) { if (isSuperCallExpression(n)) { return true; } switch (n.kind) { - case 156 /* FunctionExpression */: - case 190 /* FunctionDeclaration */: - case 157 /* ArrowFunction */: - case 148 /* ObjectLiteralExpression */: return false; + case 156: + case 190: + case 157: + case 148: return false; default: return ts.forEachChild(n, containsSuperCall); } } function markThisReferencesAsErrors(n) { - if (n.kind === 92 /* ThisKeyword */) { + if (n.kind === 92) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); } - else if (n.kind !== 156 /* FunctionExpression */ && n.kind !== 190 /* FunctionDeclaration */) { + else if (n.kind !== 156 && n.kind !== 190) { ts.forEachChild(n, markThisReferencesAsErrors); } } function isInstancePropertyWithInitializer(n) { - return n.kind === 126 /* PropertyDeclaration */ && !(n.flags & 128 /* Static */) && !!n.initializer; + return n.kind === 126 && !(n.flags & 128) && !!n.initializer; } if (ts.getClassBaseTypeNode(node.parent)) { if (containsSuperCall(node.body)) { - var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 /* Public */ | 32 /* Private */ | 64 /* Protected */); }); + var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 | 32 | 64); }); if (superCallShouldBeFirst) { var statements = node.body.statements; - if (!statements.length || statements[0].kind !== 173 /* ExpressionStatement */ || !isSuperCallExpression(statements[0].expression)) { + if (!statements.length || statements[0].kind !== 173 || !isSuperCallExpression(statements[0].expression)) { error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); } else { @@ -13400,16 +13460,16 @@ var ts; function checkAccessorDeclaration(node) { if (produceDiagnostics) { checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name); - if (node.kind === 130 /* GetAccessor */) { + if (node.kind === 130) { if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); } } if (!ts.hasDynamicName(node)) { - var otherKind = node.kind === 130 /* GetAccessor */ ? 131 /* SetAccessor */ : 130 /* GetAccessor */; + var otherKind = node.kind === 130 ? 131 : 130; var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); if (otherAccessor) { - if (((node.flags & 112 /* AccessibilityModifier */) !== (otherAccessor.flags & 112 /* AccessibilityModifier */))) { + if (((node.flags & 112) !== (otherAccessor.flags & 112))) { error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); } var currentAccessorType = getAnnotatedAccessorType(node); @@ -13465,7 +13525,7 @@ var ts; ts.forEach(node.types, checkSourceElement); } function isPrivateWithinAmbient(node) { - return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); + return (node.flags & 32) && ts.isInAmbientContext(node); } function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { if (!produceDiagnostics) { @@ -13480,9 +13540,9 @@ var ts; return; } var signaturesToCheck; - if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 192 /* InterfaceDeclaration */) { - ts.Debug.assert(signatureDeclarationNode.kind === 132 /* CallSignature */ || signatureDeclarationNode.kind === 133 /* ConstructSignature */); - var signatureKind = signatureDeclarationNode.kind === 132 /* CallSignature */ ? 0 /* Call */ : 1 /* Construct */; + if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 192) { + ts.Debug.assert(signatureDeclarationNode.kind === 132 || signatureDeclarationNode.kind === 133); + var signatureKind = signatureDeclarationNode.kind === 132 ? 0 : 1; var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent); var containingType = getDeclaredTypeOfSymbol(containingSymbol); signaturesToCheck = getSignaturesOfType(containingType, signatureKind); @@ -13500,11 +13560,11 @@ var ts; } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = ts.getCombinedNodeFlags(n); - if (n.parent.kind !== 192 /* InterfaceDeclaration */ && ts.isInAmbientContext(n)) { - if (!(flags & 2 /* Ambient */)) { - flags |= 1 /* Export */; + if (n.parent.kind !== 192 && ts.isInAmbientContext(n)) { + if (!(flags & 2)) { + flags |= 1; } - flags |= 2 /* Ambient */; + flags |= 2; } return flags & flagsToCheck; } @@ -13522,13 +13582,13 @@ var ts; var canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck); ts.forEach(overloads, function (o) { var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags; - if (deviation & 1 /* Export */) { + if (deviation & 1) { error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported); } - else if (deviation & 2 /* Ambient */) { + else if (deviation & 2) { error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); } - else if (deviation & (32 /* Private */ | 64 /* Protected */)) { + else if (deviation & (32 | 64)) { error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); } }); @@ -13545,7 +13605,7 @@ var ts; }); } } - var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 32 /* Private */ | 64 /* Protected */; + var flagsToCheck = 1 | 2 | 32 | 64; var someNodeFlags = 0; var allNodeFlags = flagsToCheck; var someHaveQuestionToken = false; @@ -13555,7 +13615,7 @@ var ts; var lastSeenNonAmbientDeclaration; var previousDeclaration; var declarations = symbol.declarations; - var isConstructor = (symbol.flags & 16384 /* Constructor */) !== 0; + var isConstructor = (symbol.flags & 16384) !== 0; function reportImplementationExpectedError(node) { if (node.name && ts.getFullWidth(node.name) === 0) { return; @@ -13573,9 +13633,9 @@ var ts; if (subsequentNode.kind === node.kind) { var errorNode = subsequentNode.name || subsequentNode; if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { - ts.Debug.assert(node.kind === 128 /* MethodDeclaration */ || node.kind === 127 /* MethodSignature */); - ts.Debug.assert((node.flags & 128 /* Static */) !== (subsequentNode.flags & 128 /* Static */)); - var diagnostic = node.flags & 128 /* Static */ ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; + ts.Debug.assert(node.kind === 128 || node.kind === 127); + ts.Debug.assert((node.flags & 128) !== (subsequentNode.flags & 128)); + var diagnostic = node.flags & 128 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; error(errorNode, diagnostic); return; } @@ -13593,17 +13653,17 @@ var ts; error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); } } - var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536 /* Module */; + var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536; var duplicateFunctionDeclaration = false; var multipleConstructorImplementation = false; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; var inAmbientContext = ts.isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 192 /* InterfaceDeclaration */ || node.parent.kind === 139 /* TypeLiteral */ || inAmbientContext; + var inAmbientContextOrInterface = node.parent.kind === 192 || node.parent.kind === 139 || inAmbientContext; if (inAmbientContextOrInterface) { previousDeclaration = undefined; } - if (node.kind === 190 /* FunctionDeclaration */ || node.kind === 128 /* MethodDeclaration */ || node.kind === 127 /* MethodSignature */ || node.kind === 129 /* Constructor */) { + if (node.kind === 190 || node.kind === 128 || node.kind === 127 || node.kind === 129) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -13672,7 +13732,7 @@ var ts; var symbol = node.localSymbol; if (!symbol) { symbol = getSymbolOfNode(node); - if (!(symbol.flags & 7340032 /* Export */)) { + if (!(symbol.flags & 7340032)) { return; } } @@ -13683,7 +13743,7 @@ var ts; var nonExportedDeclarationSpaces = 0; ts.forEach(symbol.declarations, function (d) { var declarationSpaces = getDeclarationSpaces(d); - if (getEffectiveDeclarationFlags(d, 1 /* Export */)) { + if (getEffectiveDeclarationFlags(d, 1)) { exportedDeclarationSpaces |= declarationSpaces; } else { @@ -13700,14 +13760,14 @@ var ts; } function getDeclarationSpaces(d) { switch (d.kind) { - case 192 /* InterfaceDeclaration */: - return 2097152 /* ExportType */; - case 195 /* ModuleDeclaration */: - return d.name.kind === 8 /* StringLiteral */ || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */ ? 4194304 /* ExportNamespace */ | 1048576 /* ExportValue */ : 4194304 /* ExportNamespace */; - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - return 2097152 /* ExportType */ | 1048576 /* ExportValue */; - case 197 /* ImportDeclaration */: + case 192: + return 2097152; + case 195: + return d.name.kind === 8 || ts.getModuleInstanceState(d) !== 0 ? 4194304 | 1048576 : 4194304; + case 191: + case 194: + return 2097152 | 1048576; + case 197: var result = 0; var target = resolveImport(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { @@ -13715,7 +13775,7 @@ var ts; }); return result; default: - return 1048576 /* ExportValue */; + return 1048576; } } } @@ -13754,11 +13814,11 @@ var ts; } } function checkBlock(node) { - if (node.kind === 170 /* Block */) { + if (node.kind === 170) { checkGrammarForStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); - if (ts.isFunctionBlock(node) || node.kind === 196 /* ModuleBlock */) { + if (ts.isFunctionBlock(node) || node.kind === 196) { checkFunctionExpressionBodies(node); } } @@ -13776,14 +13836,14 @@ var ts; if (!(identifier && identifier.text === name)) { return false; } - if (node.kind === 126 /* PropertyDeclaration */ || node.kind === 125 /* PropertySignature */ || node.kind === 128 /* MethodDeclaration */ || node.kind === 127 /* MethodSignature */ || node.kind === 130 /* GetAccessor */ || node.kind === 131 /* SetAccessor */) { + if (node.kind === 126 || node.kind === 125 || node.kind === 128 || node.kind === 127 || node.kind === 130 || node.kind === 131) { return false; } if (ts.isInAmbientContext(node)) { return false; } var root = getRootDeclaration(node); - if (root.kind === 124 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { + if (root.kind === 124 && ts.nodeIsMissing(root.parent.body)) { return false; } return true; @@ -13796,8 +13856,8 @@ var ts; function checkIfThisIsCapturedInEnclosingScope(node) { var current = node; while (current) { - if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { - var isDeclaration = node.kind !== 64 /* Identifier */; + if (getNodeCheckFlags(current) & 4) { + var isDeclaration = node.kind !== 64; if (isDeclaration) { error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); } @@ -13813,12 +13873,12 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "_super")) { return; } - var enclosingClass = ts.getAncestor(node, 191 /* ClassDeclaration */); + var enclosingClass = ts.getAncestor(node, 191); if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) { return; } if (ts.getClassBaseTypeNode(enclosingClass)) { - var isDeclaration = node.kind !== 64 /* Identifier */; + var isDeclaration = node.kind !== 64; if (isDeclaration) { error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference); } @@ -13831,21 +13891,21 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } - if (node.kind === 195 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (node.kind === 195 && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); - if (parent.kind === 207 /* SourceFile */ && ts.isExternalModule(parent)) { + if (parent.kind === 207 && ts.isExternalModule(parent)) { error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, ts.declarationNameToString(name), ts.declarationNameToString(name)); } } function checkCollisionWithConstDeclarations(node) { - if (node.initializer && (ts.getCombinedNodeFlags(node) & 6144 /* BlockScoped */) === 0) { + if (node.initializer && (ts.getCombinedNodeFlags(node) & 6144) === 0) { var symbol = getSymbolOfNode(node); - if (symbol.flags & 1 /* FunctionScopedVariable */) { - var localDeclarationSymbol = resolveName(node, node.name.text, 3 /* Variable */, undefined, undefined); - if (localDeclarationSymbol && localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) { - if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 4096 /* Const */) { + if (symbol.flags & 1) { + var localDeclarationSymbol = resolveName(node, node.name.text, 3, undefined, undefined); + if (localDeclarationSymbol && localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2) { + if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 4096) { error(node, ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0, symbolToString(localDeclarationSymbol)); } } @@ -13853,21 +13913,21 @@ var ts; } } function isParameterDeclaration(node) { - while (node.kind === 146 /* BindingElement */) { + while (node.kind === 146) { node = node.parent.parent; } - return node.kind === 124 /* Parameter */; + return node.kind === 124; } function checkParameterInitializer(node) { - if (getRootDeclaration(node).kind === 124 /* Parameter */) { + if (getRootDeclaration(node).kind === 124) { var func = ts.getContainingFunction(node); visit(node.initializer); } function visit(n) { - if (n.kind === 64 /* Identifier */) { + if (n.kind === 64) { var referencedSymbol = getNodeLinks(n).resolvedSymbol; - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455 /* Value */) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 124 /* Parameter */) { + if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) { + if (referencedSymbol.valueDeclaration.kind === 124) { if (referencedSymbol.valueDeclaration === node) { error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); return; @@ -13896,7 +13956,7 @@ var ts; if (ts.isBindingPattern(node.name)) { ts.forEach(node.name.elements, checkSourceElement); } - if (node.initializer && getRootDeclaration(node).kind === 124 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && getRootDeclaration(node).kind === 124 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); return; } @@ -13924,7 +13984,7 @@ var ts; checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined); } } - if (node.kind !== 126 /* PropertyDeclaration */ && node.kind !== 125 /* PropertySignature */) { + if (node.kind !== 126 && node.kind !== 125) { checkExportsOnMergedDeclarations(node); checkCollisionWithConstDeclarations(node); checkCollisionWithCapturedSuperVariable(node, node.name); @@ -13953,7 +14013,7 @@ var ts; } function inBlockOrObjectLiteralExpression(node) { while (node) { - if (node.kind === 170 /* Block */ || node.kind === 148 /* ObjectLiteralExpression */) { + if (node.kind === 170 || node.kind === 148) { return true; } node = node.parent; @@ -13981,12 +14041,12 @@ var ts; } function checkForStatement(node) { if (!checkGrammarForStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind == 189 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind == 189) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 189 /* VariableDeclarationList */) { + if (node.initializer.kind === 189) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -14001,7 +14061,7 @@ var ts; } function checkForInStatement(node) { if (!checkGrammarForStatementInAmbientContext(node)) { - if (node.initializer.kind === 189 /* VariableDeclarationList */) { + if (node.initializer.kind === 189) { var variableList = node.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { if (variableList.declarations.length > 1) { @@ -14010,7 +14070,7 @@ var ts; } } } - if (node.initializer.kind === 189 /* VariableDeclarationList */) { + if (node.initializer.kind === 189) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { var decl = variableDeclarationList.declarations[0]; @@ -14031,7 +14091,7 @@ var ts; } } var exprType = checkExpression(node.expression); - if (!isTypeOfKind(exprType, 1 /* Any */ | 48128 /* ObjectType */ | 512 /* TypeParameter */)) { + if (!isTypeOfKind(exprType, 1 | 48128 | 512)) { error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); @@ -14040,7 +14100,7 @@ var ts; checkGrammarForStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node); } function isGetAccessorWithAnnotatatedSetAccessor(node) { - return !!(node.kind === 130 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 131 /* SetAccessor */))); + return !!(node.kind === 130 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 131))); } function checkReturnStatement(node) { if (!checkGrammarForStatementInAmbientContext(node)) { @@ -14054,11 +14114,11 @@ var ts; if (func) { var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); var exprType = checkExpressionCached(node.expression); - if (func.kind === 131 /* SetAccessor */) { + if (func.kind === 131) { error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); } else { - if (func.kind === 129 /* Constructor */) { + if (func.kind === 129) { if (!isTypeAssignableTo(exprType, returnType)) { error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } @@ -14072,7 +14132,7 @@ var ts; } function checkWithStatement(node) { if (!checkGrammarForStatementInAmbientContext(node)) { - if (node.parserContextFlags & 1 /* StrictMode */) { + if (node.parserContextFlags & 1) { grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); } } @@ -14085,7 +14145,7 @@ var ts; var hasDuplicateDefaultClause = false; var expressionType = checkExpression(node.expression); ts.forEach(node.clauses, function (clause) { - if (clause.kind === 201 /* DefaultClause */ && !hasDuplicateDefaultClause) { + if (clause.kind === 201 && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -14097,7 +14157,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 200 /* CaseClause */) { + if (produceDiagnostics && clause.kind === 200) { var caseClause = clause; var caseType = checkExpression(caseClause.expression); if (!isTypeAssignableTo(expressionType, caseType)) { @@ -14114,7 +14174,7 @@ var ts; if (ts.isAnyFunction(current)) { break; } - if (current.kind === 184 /* LabeledStatement */ && current.label.text === node.label.text) { + if (current.kind === 184 && current.label.text === node.label.text) { var sourceFile = ts.getSourceFileOfNode(node); grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); break; @@ -14151,24 +14211,24 @@ var ts; checkBlock(node.finallyBlock); } function checkIndexConstraints(type) { - var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */); - var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */); - var stringIndexType = getIndexTypeOfType(type, 0 /* String */); - var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1); + var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0); + var stringIndexType = getIndexTypeOfType(type, 0); + var numberIndexType = getIndexTypeOfType(type, 1); if (stringIndexType || numberIndexType) { ts.forEach(getPropertiesOfObjectType(type), function (prop) { var propType = getTypeOfSymbol(prop); - checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */); - checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */); + checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0); + checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1); }); - if (type.flags & 1024 /* Class */ && type.symbol.valueDeclaration.kind === 191 /* ClassDeclaration */) { + if (type.flags & 1024 && type.symbol.valueDeclaration.kind === 191) { var classDeclaration = type.symbol.valueDeclaration; for (var i = 0; i < classDeclaration.members.length; i++) { var member = classDeclaration.members[i]; - if (!(member.flags & 128 /* Static */) && ts.hasDynamicName(member)) { + if (!(member.flags & 128) && ts.hasDynamicName(member)) { var propType = getTypeOfSymbol(member.symbol); - checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */); - checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */); + checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0); + checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1); } } } @@ -14176,8 +14236,8 @@ var ts; var errorNode; if (stringIndexType && numberIndexType) { errorNode = declaredNumberIndexer || declaredStringIndexer; - if (!errorNode && (type.flags & 2048 /* Interface */)) { - var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); }); + if (!errorNode && (type.flags & 2048)) { + var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); }); errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0]; } } @@ -14188,22 +14248,22 @@ var ts; if (!indexType) { return; } - if (indexKind === 1 /* Number */ && !isNumericName(prop.valueDeclaration.name)) { + if (indexKind === 1 && !isNumericName(prop.valueDeclaration.name)) { return; } var errorNode; - if (prop.valueDeclaration.name.kind === 122 /* ComputedPropertyName */ || prop.parent === containingType.symbol) { + if (prop.valueDeclaration.name.kind === 122 || prop.parent === containingType.symbol) { errorNode = prop.valueDeclaration; } else if (indexDeclaration) { errorNode = indexDeclaration; } - else if (containingType.flags & 2048 /* Interface */) { + else if (containingType.flags & 2048) { var someBaseClassHasBothPropertyAndIndexer = ts.forEach(containingType.baseTypes, function (base) { return getPropertyOfObjectType(base, prop.name) && getIndexTypeOfType(base, indexKind); }); errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0]; } if (errorNode && !isTypeAssignableTo(propertyType, indexType)) { - var errorMessage = indexKind === 0 /* String */ ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; + var errorMessage = indexKind === 0 ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType)); } } @@ -14254,7 +14314,7 @@ var ts; checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); var staticBaseType = getTypeOfSymbol(baseType.symbol); checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); - if (baseType.symbol !== resolveEntityName(node, baseTypeNode.typeName, 107455 /* Value */)) { + if (baseType.symbol !== resolveEntityName(node, baseTypeNode.typeName, 107455)) { error(baseTypeNode, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); } checkKindsOfPropertyMemberOverrides(type, baseType); @@ -14268,8 +14328,8 @@ var ts; if (produceDiagnostics) { var t = getTypeFromTypeReferenceNode(typeRefNode); if (t !== unknownType) { - var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; - if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { + var declaredType = (t.flags & 4096) ? t.target : t; + if (declaredType.flags & (1024 | 2048)) { checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); } else { @@ -14286,45 +14346,45 @@ var ts; } } function getTargetSymbol(s) { - return s.flags & 16777216 /* Instantiated */ ? getSymbolLinks(s).target : s; + return s.flags & 16777216 ? getSymbolLinks(s).target : s; } function checkKindsOfPropertyMemberOverrides(type, baseType) { var baseProperties = getPropertiesOfObjectType(baseType); for (var i = 0, len = baseProperties.length; i < len; ++i) { var base = getTargetSymbol(baseProperties[i]); - if (base.flags & 134217728 /* Prototype */) { + if (base.flags & 134217728) { continue; } var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name)); if (derived) { var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base); var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived); - if ((baseDeclarationFlags & 32 /* Private */) || (derivedDeclarationFlags & 32 /* Private */)) { + if ((baseDeclarationFlags & 32) || (derivedDeclarationFlags & 32)) { continue; } - if ((baseDeclarationFlags & 128 /* Static */) !== (derivedDeclarationFlags & 128 /* Static */)) { + if ((baseDeclarationFlags & 128) !== (derivedDeclarationFlags & 128)) { continue; } - if ((base.flags & derived.flags & 8192 /* Method */) || ((base.flags & 98308 /* PropertyOrAccessor */) && (derived.flags & 98308 /* PropertyOrAccessor */))) { + if ((base.flags & derived.flags & 8192) || ((base.flags & 98308) && (derived.flags & 98308))) { continue; } var errorMessage; - if (base.flags & 8192 /* Method */) { - if (derived.flags & 98304 /* Accessor */) { + if (base.flags & 8192) { + if (derived.flags & 98304) { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; } else { - ts.Debug.assert((derived.flags & 4 /* Property */) !== 0); + ts.Debug.assert((derived.flags & 4) !== 0); errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; } } - else if (base.flags & 4 /* Property */) { - ts.Debug.assert((derived.flags & 8192 /* Method */) !== 0); + else if (base.flags & 4) { + ts.Debug.assert((derived.flags & 8192) !== 0); errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; } else { - ts.Debug.assert((base.flags & 98304 /* Accessor */) !== 0); - ts.Debug.assert((derived.flags & 8192 /* Method */) !== 0); + ts.Debug.assert((base.flags & 98304) !== 0); + ts.Debug.assert((derived.flags & 8192) !== 0); errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; } error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); @@ -14332,7 +14392,7 @@ var ts; } } function isAccessor(kind) { - return kind === 130 /* GetAccessor */ || kind === 131 /* SetAccessor */; + return kind === 130 || kind === 131; } function areTypeParametersIdentical(list1, list2) { if (!list1 && !list2) { @@ -14385,7 +14445,7 @@ var ts; var typeName2 = typeToString(base); var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, host.getCompilerHost().getNewLine())); + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); } } } @@ -14399,7 +14459,7 @@ var ts; checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 192 /* InterfaceDeclaration */); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 192); if (symbol.declarations.length > 1) { if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); @@ -14428,14 +14488,14 @@ var ts; } function computeEnumMemberValues(node) { var nodeLinks = getNodeLinks(node); - if (!(nodeLinks.flags & 128 /* EnumValuesComputed */)) { + if (!(nodeLinks.flags & 128)) { var enumSymbol = getSymbolOfNode(node); var enumType = getDeclaredTypeOfSymbol(enumSymbol); var autoValue = 0; var ambient = ts.isInAmbientContext(node); var enumIsConst = ts.isConst(node); ts.forEach(node.members, function (member) { - if (member.name.kind !== 122 /* ComputedPropertyName */ && isNumericLiteralName(member.name.text)) { + if (member.name.kind !== 122 && isNumericLiteralName(member.name.text)) { error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name); } var initializer = member.initializer; @@ -14465,24 +14525,24 @@ var ts; getNodeLinks(member).enumMemberValue = autoValue++; } }); - nodeLinks.flags |= 128 /* EnumValuesComputed */; + nodeLinks.flags |= 128; } function getConstantValueForEnumMemberInitializer(initializer, enumIsConst) { return evalConstant(initializer); function evalConstant(e) { switch (e.kind) { - case 161 /* PrefixUnaryExpression */: + case 161: var value = evalConstant(e.operand); if (value === undefined) { return undefined; } switch (e.operator) { - case 33 /* PlusToken */: return value; - case 34 /* MinusToken */: return -value; - case 47 /* TildeToken */: return enumIsConst ? ~value : undefined; + case 33: return value; + case 34: return -value; + case 47: return enumIsConst ? ~value : undefined; } return undefined; - case 163 /* BinaryExpression */: + case 163: if (!enumIsConst) { return undefined; } @@ -14495,26 +14555,26 @@ var ts; return undefined; } switch (e.operator) { - case 44 /* BarToken */: return left | right; - case 43 /* AmpersandToken */: return left & right; - case 41 /* GreaterThanGreaterThanToken */: return left >> right; - case 42 /* GreaterThanGreaterThanGreaterThanToken */: return left >>> right; - case 40 /* LessThanLessThanToken */: return left << right; - case 45 /* CaretToken */: return left ^ right; - case 35 /* AsteriskToken */: return left * right; - case 36 /* SlashToken */: return left / right; - case 33 /* PlusToken */: return left + right; - case 34 /* MinusToken */: return left - right; - case 37 /* PercentToken */: return left % right; + case 44: return left | right; + case 43: return left & right; + case 41: return left >> right; + case 42: return left >>> right; + case 40: return left << right; + case 45: return left ^ right; + case 35: return left * right; + case 36: return left / right; + case 33: return left + right; + case 34: return left - right; + case 37: return left % right; } return undefined; - case 7 /* NumericLiteral */: + case 7: return +e.text; - case 155 /* ParenthesizedExpression */: + case 155: return enumIsConst ? evalConstant(e.expression) : undefined; - case 64 /* Identifier */: - case 150 /* ElementAccessExpression */: - case 149 /* PropertyAccessExpression */: + case 64: + case 150: + case 149: if (!enumIsConst) { return undefined; } @@ -14522,13 +14582,13 @@ var ts; var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); var enumType; var propertyName; - if (e.kind === 64 /* Identifier */) { + if (e.kind === 64) { enumType = currentType; propertyName = e.text; } else { - if (e.kind === 150 /* ElementAccessExpression */) { - if (e.argumentExpression === undefined || e.argumentExpression.kind !== 8 /* StringLiteral */) { + if (e.kind === 150) { + if (e.argumentExpression === undefined || e.argumentExpression.kind !== 8) { return undefined; } var enumType = getTypeOfNode(e.expression); @@ -14546,7 +14606,7 @@ var ts; return undefined; } var property = getPropertyOfObjectType(enumType, propertyName); - if (!property || !(property.flags & 8 /* EnumMember */)) { + if (!property || !(property.flags & 8)) { return undefined; } var propertyDecl = property.valueDeclaration; @@ -14584,7 +14644,7 @@ var ts; } var seenEnumMissingInitialInitializer = false; ts.forEach(enumSymbol.declarations, function (declaration) { - if (declaration.kind !== 194 /* EnumDeclaration */) { + if (declaration.kind !== 194) { return false; } var enumDeclaration = declaration; @@ -14607,7 +14667,7 @@ var ts; var declarations = symbol.declarations; for (var i = 0; i < declarations.length; i++) { var declaration = declarations[i]; - if ((declaration.kind === 191 /* ClassDeclaration */ || (declaration.kind === 190 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { + if ((declaration.kind === 191 || (declaration.kind === 190 && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { return declaration; } } @@ -14616,14 +14676,14 @@ var ts; function checkModuleDeclaration(node) { if (produceDiagnostics) { if (!checkGrammarModifiers(node)) { - if (!ts.isInAmbientContext(node) && node.name.kind === 8 /* StringLiteral */) { + if (!ts.isInAmbientContext(node) && node.name.kind === 8) { grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); } - else if (node.name.kind === 64 /* Identifier */ && node.body.kind === 196 /* ModuleBlock */) { + else if (node.name.kind === 64 && node.body.kind === 196) { var statements = node.body.statements; for (var i = 0, n = statements.length; i < n; i++) { var statement = statements[i]; - if (statement.kind === 198 /* ExportAssignment */) { + if (statement.kind === 198) { grammarErrorOnNode(statement, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); } else if (ts.isExternalModuleImportDeclaration(statement)) { @@ -14636,7 +14696,7 @@ var ts; checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); - if (symbol.flags & 512 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node) && ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums)) { + if (symbol.flags & 512 && symbol.declarations.length > 1 && !ts.isInAmbientContext(node) && ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums)) { var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); if (classOrFunc) { if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { @@ -14647,7 +14707,7 @@ var ts; } } } - if (node.name.kind === 8 /* StringLiteral */) { + if (node.name.kind === 8) { if (!isGlobalSourceFile(node.parent)) { error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); } @@ -14659,7 +14719,7 @@ var ts; checkSourceElement(node.body); } function getFirstIdentifier(node) { - while (node.kind === 121 /* QualifiedName */) { + while (node.kind === 121) { node = node.left; } return node; @@ -14673,26 +14733,26 @@ var ts; if (ts.isInternalModuleImportDeclaration(node)) { target = resolveImport(symbol); if (target !== unknownSymbol) { - if (target.flags & 107455 /* Value */) { + if (target.flags & 107455) { var moduleName = getFirstIdentifier(node.moduleReference); - if (resolveEntityName(node, moduleName, 107455 /* Value */ | 1536 /* Namespace */).flags & 1536 /* Namespace */) { + if (resolveEntityName(node, moduleName, 107455 | 1536).flags & 1536) { checkExpressionOrQualifiedName(node.moduleReference); } else { error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName)); } } - if (target.flags & 793056 /* Type */) { + if (target.flags & 793056) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); } } } else { - if (node.parent.kind === 207 /* SourceFile */) { + if (node.parent.kind === 207) { target = resolveImport(symbol); } - else if (node.parent.kind === 196 /* ModuleBlock */ && node.parent.parent.name.kind === 8 /* StringLiteral */) { - if (ts.getExternalModuleImportDeclarationExpression(node).kind === 8 /* StringLiteral */) { + else if (node.parent.kind === 196 && node.parent.parent.name.kind === 8) { + if (ts.getExternalModuleImportDeclarationExpression(node).kind === 8) { if (isExternalModuleNameRelative(ts.getExternalModuleImportDeclarationExpression(node).text)) { error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name); target = unknownSymbol; @@ -14710,18 +14770,18 @@ var ts; } } if (target !== unknownSymbol) { - var excludedMeanings = (symbol.flags & 107455 /* Value */ ? 107455 /* Value */ : 0) | (symbol.flags & 793056 /* Type */ ? 793056 /* Type */ : 0) | (symbol.flags & 1536 /* Namespace */ ? 1536 /* Namespace */ : 0); + var excludedMeanings = (symbol.flags & 107455 ? 107455 : 0) | (symbol.flags & 793056 ? 793056 : 0) | (symbol.flags & 1536 ? 1536 : 0); if (target.flags & excludedMeanings) { error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol)); } } } function checkExportAssignment(node) { - if (!checkGrammarModifiers(node) && (node.flags & 243 /* Modifier */)) { + if (!checkGrammarModifiers(node) && (node.flags & 243)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } var container = node.parent; - if (container.kind !== 207 /* SourceFile */) { + if (container.kind !== 207) { container = container.parent; } checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container)); @@ -14730,183 +14790,188 @@ var ts; if (!node) return; switch (node.kind) { - case 123 /* TypeParameter */: + case 123: return checkTypeParameter(node); - case 124 /* Parameter */: + case 124: return checkParameter(node); - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 126: + case 125: return checkPropertyDeclaration(node); - case 136 /* FunctionType */: - case 137 /* ConstructorType */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: + case 136: + case 137: + case 132: + case 133: return checkSignatureDeclaration(node); - case 134 /* IndexSignature */: + case 134: return checkSignatureDeclaration(node); - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: return checkMethodDeclaration(node); - case 129 /* Constructor */: + case 129: return checkConstructorDeclaration(node); - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 130: + case 131: return checkAccessorDeclaration(node); - case 135 /* TypeReference */: + case 135: return checkTypeReference(node); - case 138 /* TypeQuery */: + case 138: return checkTypeQuery(node); - case 139 /* TypeLiteral */: + case 139: return checkTypeLiteral(node); - case 140 /* ArrayType */: + case 140: return checkArrayType(node); - case 141 /* TupleType */: + case 141: return checkTupleType(node); - case 142 /* UnionType */: + case 142: return checkUnionType(node); - case 143 /* ParenthesizedType */: + case 143: return checkSourceElement(node.type); - case 190 /* FunctionDeclaration */: + case 190: return checkFunctionDeclaration(node); - case 170 /* Block */: - case 196 /* ModuleBlock */: + case 170: + case 196: return checkBlock(node); - case 171 /* VariableStatement */: + case 171: return checkVariableStatement(node); - case 173 /* ExpressionStatement */: + case 173: return checkExpressionStatement(node); - case 174 /* IfStatement */: + case 174: return checkIfStatement(node); - case 175 /* DoStatement */: + case 175: return checkDoStatement(node); - case 176 /* WhileStatement */: + case 176: return checkWhileStatement(node); - case 177 /* ForStatement */: + case 177: return checkForStatement(node); - case 178 /* ForInStatement */: + case 178: return checkForInStatement(node); - case 179 /* ContinueStatement */: - case 180 /* BreakStatement */: + case 179: + case 180: return checkBreakOrContinueStatement(node); - case 181 /* ReturnStatement */: + case 181: return checkReturnStatement(node); - case 182 /* WithStatement */: + case 182: return checkWithStatement(node); - case 183 /* SwitchStatement */: + case 183: return checkSwitchStatement(node); - case 184 /* LabeledStatement */: + case 184: return checkLabeledStatement(node); - case 185 /* ThrowStatement */: + case 185: return checkThrowStatement(node); - case 186 /* TryStatement */: + case 186: return checkTryStatement(node); - case 188 /* VariableDeclaration */: + case 188: return checkVariableDeclaration(node); - case 146 /* BindingElement */: + case 146: return checkBindingElement(node); - case 191 /* ClassDeclaration */: + case 191: return checkClassDeclaration(node); - case 192 /* InterfaceDeclaration */: + case 192: return checkInterfaceDeclaration(node); - case 193 /* TypeAliasDeclaration */: + case 193: return checkTypeAliasDeclaration(node); - case 194 /* EnumDeclaration */: + case 194: return checkEnumDeclaration(node); - case 195 /* ModuleDeclaration */: + case 195: return checkModuleDeclaration(node); - case 197 /* ImportDeclaration */: + case 197: return checkImportDeclaration(node); - case 198 /* ExportAssignment */: + case 198: return checkExportAssignment(node); - case 172 /* EmptyStatement */: + case 172: checkGrammarForStatementInAmbientContext(node); return; - case 187 /* DebuggerStatement */: + case 187: checkGrammarForStatementInAmbientContext(node); return; } } function checkFunctionExpressionBodies(node) { switch (node.kind) { - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 156: + case 157: ts.forEach(node.parameters, checkFunctionExpressionBodies); checkFunctionExpressionOrObjectLiteralMethodBody(node); break; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: ts.forEach(node.parameters, checkFunctionExpressionBodies); if (ts.isObjectLiteralMethod(node)) { checkFunctionExpressionOrObjectLiteralMethodBody(node); } break; - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 190 /* FunctionDeclaration */: + case 129: + case 130: + case 131: + case 190: ts.forEach(node.parameters, checkFunctionExpressionBodies); break; - case 182 /* WithStatement */: + case 182: checkFunctionExpressionBodies(node.expression); break; - case 124 /* Parameter */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 144 /* ObjectBindingPattern */: - case 145 /* ArrayBindingPattern */: - case 146 /* BindingElement */: - case 147 /* ArrayLiteralExpression */: - case 148 /* ObjectLiteralExpression */: - case 204 /* PropertyAssignment */: - case 149 /* PropertyAccessExpression */: - case 150 /* ElementAccessExpression */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: - case 153 /* TaggedTemplateExpression */: - case 165 /* TemplateExpression */: - case 169 /* TemplateSpan */: - case 154 /* TypeAssertionExpression */: - case 155 /* ParenthesizedExpression */: - case 159 /* TypeOfExpression */: - case 160 /* VoidExpression */: - case 158 /* DeleteExpression */: - case 161 /* PrefixUnaryExpression */: - case 162 /* PostfixUnaryExpression */: - case 163 /* BinaryExpression */: - case 164 /* ConditionalExpression */: - case 167 /* SpreadElementExpression */: - case 170 /* Block */: - case 196 /* ModuleBlock */: - case 171 /* VariableStatement */: - case 173 /* ExpressionStatement */: - case 174 /* IfStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 179 /* ContinueStatement */: - case 180 /* BreakStatement */: - case 181 /* ReturnStatement */: - case 183 /* SwitchStatement */: - case 200 /* CaseClause */: - case 201 /* DefaultClause */: - case 184 /* LabeledStatement */: - case 185 /* ThrowStatement */: - case 186 /* TryStatement */: - case 203 /* CatchClause */: - case 188 /* VariableDeclaration */: - case 189 /* VariableDeclarationList */: - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - case 206 /* EnumMember */: - case 207 /* SourceFile */: + case 124: + case 126: + case 125: + case 144: + case 145: + case 146: + case 147: + case 148: + case 204: + case 149: + case 150: + case 151: + case 152: + case 153: + case 165: + case 169: + case 154: + case 155: + case 159: + case 160: + case 158: + case 161: + case 162: + case 163: + case 164: + case 167: + case 170: + case 196: + case 171: + case 173: + case 174: + case 175: + case 176: + case 177: + case 178: + case 179: + case 180: + case 181: + case 183: + case 200: + case 201: + case 184: + case 185: + case 186: + case 203: + case 188: + case 189: + case 191: + case 194: + case 206: + case 207: ts.forEachChild(node, checkFunctionExpressionBodies); break; } } function checkSourceFile(node) { + var start = new Date().getTime(); + checkSourceFileWorker(node); + ts.checkTime += new Date().getTime() - start; + } + function checkSourceFileWorker(node) { var links = getNodeLinks(node); - if (!(links.flags & 1 /* TypeChecked */)) { + if (!(links.flags & 1)) { checkGrammarSourceFile(node); emitExtends = false; potentialThisCollisions.length = 0; @@ -14914,9 +14979,9 @@ var ts; checkFunctionExpressionBodies(node); if (ts.isExternalModule(node)) { var symbol = getExportAssignmentSymbol(node.symbol); - if (symbol && symbol.flags & 8388608 /* Import */) { + if (symbol && symbol.flags & 8388608) { getSymbolLinks(symbol).referenced = true; - markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 197 /* ImportDeclaration */)); + markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 197)); } } if (potentialThisCollisions.length) { @@ -14924,32 +14989,23 @@ var ts; potentialThisCollisions.length = 0; } if (emitExtends) { - links.flags |= 8 /* EmitExtends */; + links.flags |= 8; } - links.flags |= 1 /* TypeChecked */; + links.flags |= 1; } } - function getSortedDiagnostics() { - ts.Debug.assert(produceDiagnostics, "diagnostics are available only in the full typecheck mode"); - if (diagnosticsModified) { - diagnostics.sort(ts.compareDiagnostics); - diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); - diagnosticsModified = false; - } - return diagnostics; - } function getDiagnostics(sourceFile) { throwIfNonDiagnosticsProducing(); if (sourceFile) { checkSourceFile(sourceFile); - return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; }); + return diagnostics.getDiagnostics(sourceFile.fileName); } ts.forEach(host.getSourceFiles(), checkSourceFile); - return getSortedDiagnostics(); + return diagnostics.getDiagnostics(); } function getGlobalDiagnostics() { throwIfNonDiagnosticsProducing(); - return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); + return diagnostics.getGlobalDiagnostics(); } function throwIfNonDiagnosticsProducing() { if (!produceDiagnostics) { @@ -14959,7 +15015,7 @@ var ts; function isInsideWithStatementBody(node) { if (node) { while (node.parent) { - if (node.parent.kind === 182 /* WithStatement */ && node.parent.statement === node) { + if (node.parent.kind === 182 && node.parent.statement === node) { return true; } node = node.parent; @@ -14995,27 +15051,27 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 207 /* SourceFile */: + case 207: if (!ts.isExternalModule(location)) break; - case 195 /* ModuleDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & 8914931 /* ModuleMember */); + case 195: + copySymbols(getSymbolOfNode(location).exports, meaning & 8914931); break; - case 194 /* EnumDeclaration */: - copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */); + case 194: + copySymbols(getSymbolOfNode(location).exports, meaning & 8); break; - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - if (!(memberFlags & 128 /* Static */)) { - copySymbols(getSymbolOfNode(location).members, meaning & 793056 /* Type */); + case 191: + case 192: + if (!(memberFlags & 128)) { + copySymbols(getSymbolOfNode(location).members, meaning & 793056); } break; - case 156 /* FunctionExpression */: + case 156: if (location.name) { copySymbol(location.symbol, meaning); } break; - case 203 /* CatchClause */: + case 203: if (location.name.text) { copySymbol(location.symbol, meaning); } @@ -15028,91 +15084,91 @@ var ts; return ts.mapToArray(symbols); } function isTypeDeclarationName(name) { - return name.kind == 64 /* Identifier */ && isTypeDeclaration(name.parent) && name.parent.name === name; + return name.kind == 64 && isTypeDeclaration(name.parent) && name.parent.name === name; } function isTypeDeclaration(node) { switch (node.kind) { - case 123 /* TypeParameter */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 194 /* EnumDeclaration */: + case 123: + case 191: + case 192: + case 193: + case 194: return true; } } function isTypeReferenceIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 121 /* QualifiedName */) + while (node.parent && node.parent.kind === 121) node = node.parent; - return node.parent && node.parent.kind === 135 /* TypeReference */; + return node.parent && node.parent.kind === 135; } function isTypeNode(node) { - if (135 /* FirstTypeNode */ <= node.kind && node.kind <= 143 /* LastTypeNode */) { + if (135 <= node.kind && node.kind <= 143) { return true; } switch (node.kind) { - case 110 /* AnyKeyword */: - case 117 /* NumberKeyword */: - case 119 /* StringKeyword */: - case 111 /* BooleanKeyword */: + case 110: + case 117: + case 119: + case 111: return true; - case 98 /* VoidKeyword */: - return node.parent.kind !== 160 /* VoidExpression */; - case 8 /* StringLiteral */: - return node.parent.kind === 124 /* Parameter */; - case 64 /* Identifier */: - if (node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node) { + case 98: + return node.parent.kind !== 160; + case 8: + return node.parent.kind === 124; + case 64: + if (node.parent.kind === 121 && node.parent.right === node) { node = node.parent; } - case 121 /* QualifiedName */: - ts.Debug.assert(node.kind === 64 /* Identifier */ || node.kind === 121 /* QualifiedName */, "'node' was expected to be a qualified name or identifier in 'isTypeNode'."); + case 121: + ts.Debug.assert(node.kind === 64 || node.kind === 121, "'node' was expected to be a qualified name or identifier in 'isTypeNode'."); var parent = node.parent; - if (parent.kind === 138 /* TypeQuery */) { + if (parent.kind === 138) { return false; } - if (135 /* FirstTypeNode */ <= parent.kind && parent.kind <= 143 /* LastTypeNode */) { + if (135 <= parent.kind && parent.kind <= 143) { return true; } switch (parent.kind) { - case 123 /* TypeParameter */: + case 123: return node === parent.constraint; - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 124 /* Parameter */: - case 188 /* VariableDeclaration */: + case 126: + case 125: + case 124: + case 188: return node === parent.type; - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 129 /* Constructor */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 190: + case 156: + case 157: + case 129: + case 128: + case 127: + case 130: + case 131: return node === parent.type; - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: + case 132: + case 133: + case 134: return node === parent.type; - case 154 /* TypeAssertionExpression */: + case 154: return node === parent.type; - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: return parent.typeArguments && ts.indexOf(parent.typeArguments, node) >= 0; - case 153 /* TaggedTemplateExpression */: + case 153: return false; } } return false; } function getLeftSideOfImportOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 121 /* QualifiedName */) { + while (nodeOnRightSide.parent.kind === 121) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 197 /* ImportDeclaration */) { + if (nodeOnRightSide.parent.kind === 197) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 198 /* ExportAssignment */) { + if (nodeOnRightSide.parent.kind === 198) { return nodeOnRightSide.parent.exportName === nodeOnRightSide && nodeOnRightSide.parent; } return undefined; @@ -15121,16 +15177,16 @@ var ts; return getLeftSideOfImportOrExportAssignment(node) !== undefined; } function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node) || (node.parent.kind === 149 /* PropertyAccessExpression */ && node.parent.name === node); + return (node.parent.kind === 121 && node.parent.right === node) || (node.parent.kind === 149 && node.parent.name === node); } function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) { if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) { return getSymbolOfNode(entityName.parent); } - if (entityName.parent.kind === 198 /* ExportAssignment */) { - return resolveEntityName(entityName.parent.parent, entityName, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Import */); + if (entityName.parent.kind === 198) { + return resolveEntityName(entityName.parent.parent, entityName, 107455 | 793056 | 1536 | 8388608); } - if (entityName.kind !== 149 /* PropertyAccessExpression */) { + if (entityName.kind !== 149) { if (isInRightSideOfImportOrExportAssignment(entityName)) { return getSymbolOfPartOfRightHandSideOfImport(entityName); } @@ -15142,18 +15198,18 @@ var ts; if (ts.getFullWidth(entityName) === 0) { return undefined; } - if (entityName.kind === 64 /* Identifier */) { - var meaning = 107455 /* Value */ | 8388608 /* Import */; + if (entityName.kind === 64) { + var meaning = 107455 | 8388608; return resolveEntityName(entityName, entityName, meaning); } - else if (entityName.kind === 149 /* PropertyAccessExpression */) { + else if (entityName.kind === 149) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkPropertyAccessExpression(entityName); } return getNodeLinks(entityName).resolvedSymbol; } - else if (entityName.kind === 121 /* QualifiedName */) { + else if (entityName.kind === 121) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkQualifiedName(entityName); @@ -15162,8 +15218,8 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 135 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; - meaning |= 8388608 /* Import */; + var meaning = entityName.parent.kind === 135 ? 793056 : 1536; + meaning |= 8388608; return resolveEntityName(entityName, entityName, meaning); } return undefined; @@ -15175,32 +15231,32 @@ var ts; if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { return getSymbolOfNode(node.parent); } - if (node.kind === 64 /* Identifier */ && isInRightSideOfImportOrExportAssignment(node)) { - return node.parent.kind === 198 /* ExportAssignment */ ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImport(node); + if (node.kind === 64 && isInRightSideOfImportOrExportAssignment(node)) { + return node.parent.kind === 198 ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImport(node); } switch (node.kind) { - case 64 /* Identifier */: - case 149 /* PropertyAccessExpression */: - case 121 /* QualifiedName */: + case 64: + case 149: + case 121: return getSymbolOfEntityNameOrPropertyAccessExpression(node); - case 92 /* ThisKeyword */: - case 90 /* SuperKeyword */: + case 92: + case 90: var type = checkExpression(node); return type.symbol; - case 112 /* ConstructorKeyword */: + case 112: var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 129 /* Constructor */) { + if (constructorDeclaration && constructorDeclaration.kind === 129) { return constructorDeclaration.parent.symbol; } return undefined; - case 8 /* StringLiteral */: + case 8: if (ts.isExternalModuleImportDeclaration(node.parent.parent) && ts.getExternalModuleImportDeclarationExpression(node.parent.parent) === node) { var importSymbol = getSymbolOfNode(node.parent.parent); var moduleType = getTypeOfSymbol(importSymbol); return moduleType ? moduleType.symbol : undefined; } - case 7 /* NumericLiteral */: - if (node.parent.kind == 150 /* ElementAccessExpression */ && node.parent.argumentExpression === node) { + case 7: + if (node.parent.kind == 150 && node.parent.argumentExpression === node) { var objectType = checkExpression(node.parent.expression); if (objectType === unknownType) return undefined; @@ -15214,8 +15270,8 @@ var ts; return undefined; } function getShorthandAssignmentValueSymbol(location) { - if (location && location.kind === 205 /* ShorthandPropertyAssignment */) { - return resolveEntityName(location, location.name, 107455 /* Value */); + if (location && location.kind === 205) { + return resolveEntityName(location, location.name, 107455); } return undefined; } @@ -15261,7 +15317,7 @@ var ts; function getAugmentedPropertiesOfType(type) { var type = getApparentType(type); var propsByName = createSymbolTable(getPropertiesOfType(type)); - if (getSignaturesOfType(type, 0 /* Call */).length || getSignaturesOfType(type, 1 /* Construct */).length) { + if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) { ts.forEach(getPropertiesOfType(globalFunctionType), function (p) { if (!ts.hasProperty(propsByName, p.name)) { propsByName[p.name] = p; @@ -15271,7 +15327,7 @@ var ts; return getNamedMembers(propsByName); } function getRootSymbols(symbol) { - if (symbol.flags & 268435456 /* UnionProperty */) { + if (symbol.flags & 268435456) { var symbols = []; var name = symbol.name; ts.forEach(getSymbolLinks(symbol).unionType.types, function (t) { @@ -15279,7 +15335,7 @@ var ts; }); return symbols; } - else if (symbol.flags & 67108864 /* Transient */) { + else if (symbol.flags & 67108864) { var target = getSymbolLinks(symbol).target; if (target) { return [target]; @@ -15288,7 +15344,7 @@ var ts; return [symbol]; } function isExternalModuleSymbol(symbol) { - return symbol.flags & 512 /* ValueModule */ && symbol.declarations.length === 1 && symbol.declarations[0].kind === 207 /* SourceFile */; + return symbol.flags & 512 && symbol.declarations.length === 1 && symbol.declarations[0].kind === 207; } function isNodeDescendentOf(node, ancestor) { while (node) { @@ -15302,11 +15358,11 @@ var ts; for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { if (node.locals && ts.hasProperty(node.locals, name)) { var symbolWithRelevantName = node.locals[name]; - if (symbolWithRelevantName.flags & (107455 /* Value */ | 1048576 /* ExportValue */)) { + if (symbolWithRelevantName.flags & (107455 | 1048576)) { return false; } - if (symbolWithRelevantName.flags & 8388608 /* Import */) { - var importDeclarationWithRelevantName = ts.getDeclarationOfKind(symbolWithRelevantName, 197 /* ImportDeclaration */); + if (symbolWithRelevantName.flags & 8388608) { + var importDeclarationWithRelevantName = ts.getDeclarationOfKind(symbolWithRelevantName, 197); if (isReferencedImportDeclaration(importDeclarationWithRelevantName)) { return false; } @@ -15330,7 +15386,7 @@ var ts; function getLocalNameForSymbol(symbol, location) { var node = location; while (node) { - if ((node.kind === 195 /* ModuleDeclaration */ || node.kind === 194 /* EnumDeclaration */) && getSymbolOfNode(node) === symbol) { + if ((node.kind === 195 || node.kind === 194) && getSymbolOfNode(node) === symbol) { return getLocalNameOfContainer(node); } node = node.parent; @@ -15341,7 +15397,7 @@ var ts; var symbol = getNodeLinks(node).resolvedSymbol; if (symbol) { var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); - if (symbol !== exportSymbol && !(exportSymbol.flags & 944 /* ExportHasLocal */)) { + if (symbol !== exportSymbol && !(exportSymbol.flags & 944)) { symbol = exportSymbol; } if (symbol.parent) { @@ -15354,17 +15410,14 @@ var ts; return symbol && symbolIsValue(symbol) && !isConstEnumSymbol(symbol) ? symbolToString(symbol) : undefined; } function isTopLevelValueImportWithEntityName(node) { - if (node.parent.kind !== 207 /* SourceFile */ || !ts.isInternalModuleImportDeclaration(node)) { + if (node.parent.kind !== 207 || !ts.isInternalModuleImportDeclaration(node)) { return false; } return isImportResolvedToValue(getSymbolOfNode(node)); } - function hasSemanticErrors(sourceFile) { - return getDiagnostics(sourceFile).length > 0 || getGlobalDiagnostics().length > 0; - } function isImportResolvedToValue(symbol) { var target = resolveImport(symbol); - return target !== unknownSymbol && target.flags & 107455 /* Value */ && !isConstEnumOrConstEnumOnlyModule(target); + return target !== unknownSymbol && target.flags & 107455 && !isConstEnumOrConstEnumOnlyModule(target); } function isConstEnumOrConstEnumOnlyModule(s) { return isConstEnumSymbol(s) || s.constEnumOnlyModule; @@ -15374,7 +15427,7 @@ var ts; if (getSymbolLinks(symbol).referenced) { return true; } - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { return isImportResolvedToValue(symbol); } return false; @@ -15395,11 +15448,14 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { + if (node.kind === 206) { + return getEnumMemberValue(node); + } var symbol = getNodeLinks(node).resolvedSymbol; - if (symbol && (symbol.flags & 8 /* EnumMember */)) { + if (symbol && (symbol.flags & 8)) { var declaration = symbol.valueDeclaration; var constantValue; - if (declaration.kind === 206 /* EnumMember */) { + if (declaration.kind === 206) { return getEnumMemberValue(declaration); } } @@ -15407,7 +15463,7 @@ var ts; } function writeTypeOfDeclaration(declaration, enclosingDeclaration, flags, writer) { var symbol = getSymbolOfNode(declaration); - var type = symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? getTypeOfSymbol(symbol) : unknownType; + var type = symbol && !(symbol.flags & (2048 | 131072)) ? getTypeOfSymbol(symbol) : unknownType; getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); } function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { @@ -15415,7 +15471,7 @@ var ts; getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags); } function isUnknownIdentifier(location, name) { - return !resolveName(location, name, 107455 /* Value */, undefined, undefined); + return !resolveName(location, name, 107455, undefined, undefined); } function createResolver() { return { @@ -15424,9 +15480,7 @@ var ts; getExportAssignmentName: getExportAssignmentName, isReferencedImportDeclaration: isReferencedImportDeclaration, getNodeCheckFlags: getNodeCheckFlags, - getEnumMemberValue: getEnumMemberValue, isTopLevelValueImportWithEntityName: isTopLevelValueImportWithEntityName, - hasSemanticErrors: hasSemanticErrors, isDeclarationVisible: isDeclarationVisible, isImplementationOfOverload: isImplementationOfOverload, writeTypeOfDeclaration: writeTypeOfDeclaration, @@ -15440,7 +15494,6 @@ var ts; function initializeTypeChecker() { ts.forEach(host.getSourceFiles(), function (file) { ts.bindSourceFile(file); - ts.forEach(file.semanticDiagnostics, addDiagnostic); }); ts.forEach(host.getSourceFiles(), function (file) { if (!ts.isExternalModule(file)) { @@ -15459,29 +15512,29 @@ var ts; globalNumberType = getGlobalType("Number"); globalBooleanType = getGlobalType("Boolean"); globalRegExpType = getGlobalType("RegExp"); - globalTemplateStringsArrayType = languageVersion >= 2 /* ES6 */ ? getGlobalType("TemplateStringsArray") : unknownType; + globalTemplateStringsArrayType = languageVersion >= 2 ? getGlobalType("TemplateStringsArray") : unknownType; anyArrayType = createArrayType(anyType); } function checkGrammarModifiers(node) { switch (node.kind) { - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 129 /* Constructor */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 134 /* IndexSignature */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 195 /* ModuleDeclaration */: - case 194 /* EnumDeclaration */: - case 198 /* ExportAssignment */: - case 171 /* VariableStatement */: - case 190 /* FunctionDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 197 /* ImportDeclaration */: - case 124 /* Parameter */: + case 130: + case 131: + case 129: + case 126: + case 125: + case 128: + case 127: + case 134: + case 191: + case 192: + case 195: + case 194: + case 198: + case 171: + case 190: + case 193: + case 197: + case 124: break; default: return false; @@ -15494,14 +15547,14 @@ var ts; for (var i = 0, n = node.modifiers.length; i < n; i++) { var modifier = node.modifiers[i]; switch (modifier.kind) { - case 107 /* PublicKeyword */: - case 106 /* ProtectedKeyword */: - case 105 /* PrivateKeyword */: + case 107: + case 106: + case 105: var text; - if (modifier.kind === 107 /* PublicKeyword */) { + if (modifier.kind === 107) { text = "public"; } - else if (modifier.kind === 106 /* ProtectedKeyword */) { + else if (modifier.kind === 106) { text = "protected"; lastProtected = modifier; } @@ -15509,81 +15562,81 @@ var ts; text = "private"; lastPrivate = modifier; } - if (flags & 112 /* AccessibilityModifier */) { + if (flags & 112) { return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen); } - else if (flags & 128 /* Static */) { + else if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); } - else if (node.parent.kind === 196 /* ModuleBlock */ || node.parent.kind === 207 /* SourceFile */) { + else if (node.parent.kind === 196 || node.parent.kind === 207) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text); } flags |= ts.modifierToFlag(modifier.kind); break; - case 108 /* StaticKeyword */: - if (flags & 128 /* Static */) { + case 108: + if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static"); } - else if (node.parent.kind === 196 /* ModuleBlock */ || node.parent.kind === 207 /* SourceFile */) { + else if (node.parent.kind === 196 || node.parent.kind === 207) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); } - else if (node.kind === 124 /* Parameter */) { + else if (node.kind === 124) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } - flags |= 128 /* Static */; + flags |= 128; lastStatic = modifier; break; - case 77 /* ExportKeyword */: - if (flags & 1 /* Export */) { + case 77: + if (flags & 1) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export"); } - else if (flags & 2 /* Ambient */) { + else if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); } - else if (node.parent.kind === 191 /* ClassDeclaration */) { + else if (node.parent.kind === 191) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 124 /* Parameter */) { + else if (node.kind === 124) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } - flags |= 1 /* Export */; + flags |= 1; break; - case 113 /* DeclareKeyword */: - if (flags & 2 /* Ambient */) { + case 113: + if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare"); } - else if (node.parent.kind === 191 /* ClassDeclaration */) { + else if (node.parent.kind === 191) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 124 /* Parameter */) { + else if (node.kind === 124) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 196 /* ModuleBlock */) { + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 196) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } - flags |= 2 /* Ambient */; + flags |= 2; lastDeclare = modifier; break; } } - if (node.kind === 129 /* Constructor */) { - if (flags & 128 /* Static */) { + if (node.kind === 129) { + if (flags & 128) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } - else if (flags & 64 /* Protected */) { + else if (flags & 64) { return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected"); } - else if (flags & 32 /* Private */) { + else if (flags & 32) { return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); } } - else if (node.kind === 197 /* ImportDeclaration */ && flags & 2 /* Ambient */) { + else if (node.kind === 197 && flags & 2) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 192 /* InterfaceDeclaration */ && flags & 2 /* Ambient */) { + else if (node.kind === 192 && flags & 2) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); } - else if (node.kind === 124 /* Parameter */ && (flags & 112 /* AccessibilityModifier */) && ts.isBindingPattern(node.name)) { + else if (node.kind === 124 && (flags & 112) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); } } @@ -15654,7 +15707,7 @@ var ts; else if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } - else if (parameter.flags & 243 /* Modifier */) { + else if (parameter.flags & 243) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } else if (parameter.questionToken) { @@ -15666,7 +15719,7 @@ var ts; else if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - else if (parameter.type.kind !== 119 /* StringKeyword */ && parameter.type.kind !== 117 /* NumberKeyword */) { + else if (parameter.type.kind !== 119 && parameter.type.kind !== 117) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } else if (!node.type) { @@ -15674,7 +15727,7 @@ var ts; } } function checkGrammarForIndexSignatureModifier(node) { - if (node.flags & 243 /* Modifier */) { + if (node.flags & 243) { grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); } } @@ -15697,7 +15750,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); for (var i = 0, n = arguments.length; i < n; i++) { var arg = arguments[i]; - if (arg.kind === 168 /* OmittedExpression */) { + if (arg.kind === 168) { return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -15724,7 +15777,7 @@ var ts; for (var i = 0, n = node.heritageClauses.length; i < n; i++) { ts.Debug.assert(i <= 2); var heritageClause = node.heritageClauses[i]; - if (heritageClause.token === 78 /* ExtendsKeyword */) { + if (heritageClause.token === 78) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } @@ -15737,7 +15790,7 @@ var ts; seenExtendsClause = true; } else { - ts.Debug.assert(heritageClause.token === 101 /* ImplementsKeyword */); + ts.Debug.assert(heritageClause.token === 101); if (seenImplementsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen); } @@ -15753,14 +15806,14 @@ var ts; for (var i = 0, n = node.heritageClauses.length; i < n; i++) { ts.Debug.assert(i <= 1); var heritageClause = node.heritageClauses[i]; - if (heritageClause.token === 78 /* ExtendsKeyword */) { + if (heritageClause.token === 78) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } seenExtendsClause = true; } else { - ts.Debug.assert(heritageClause.token === 101 /* ImplementsKeyword */); + ts.Debug.assert(heritageClause.token === 101); return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause); } checkGrammarHeritageClause(heritageClause); @@ -15769,14 +15822,14 @@ var ts; return false; } function checkGrammarComputedPropertyName(node) { - if (node.kind !== 122 /* ComputedPropertyName */) { + if (node.kind !== 122) { return false; } var computedPropertyName = node; - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { return grammarErrorOnNode(node, ts.Diagnostics.Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher); } - else if (computedPropertyName.expression.kind === 163 /* BinaryExpression */ && computedPropertyName.expression.operator === 23 /* CommaToken */) { + else if (computedPropertyName.expression.kind === 163 && computedPropertyName.expression.operator === 23) { return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name); } } @@ -15799,29 +15852,29 @@ var ts; var GetAccessor = 2; var SetAccesor = 4; var GetOrSetAccessor = GetAccessor | SetAccesor; - var inStrictMode = (node.parserContextFlags & 1 /* StrictMode */) !== 0; + var inStrictMode = (node.parserContextFlags & 1) !== 0; for (var i = 0, n = node.properties.length; i < n; i++) { var prop = node.properties[i]; var name = prop.name; - if (prop.kind === 168 /* OmittedExpression */ || name.kind === 122 /* ComputedPropertyName */) { + if (prop.kind === 168 || name.kind === 122) { checkGrammarComputedPropertyName(name); continue; } var currentKind; - if (prop.kind === 204 /* PropertyAssignment */ || prop.kind === 205 /* ShorthandPropertyAssignment */) { + if (prop.kind === 204 || prop.kind === 205) { checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); - if (name.kind === 7 /* NumericLiteral */) { + if (name.kind === 7) { checkGrammarNumbericLiteral(name); } currentKind = Property; } - else if (prop.kind === 128 /* MethodDeclaration */) { + else if (prop.kind === 128) { currentKind = Property; } - else if (prop.kind === 130 /* GetAccessor */) { + else if (prop.kind === 130) { currentKind = GetAccessor; } - else if (prop.kind === 131 /* SetAccessor */) { + else if (prop.kind === 131) { currentKind = SetAccesor; } else { @@ -15853,7 +15906,7 @@ var ts; } function checkGrammarAccessor(accessor) { var kind = accessor.kind; - if (languageVersion < 1 /* ES5 */) { + if (languageVersion < 1) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } else if (ts.isInAmbientContext(accessor)) { @@ -15865,10 +15918,10 @@ var ts; else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } - else if (kind === 130 /* GetAccessor */ && accessor.parameters.length) { + else if (kind === 130 && accessor.parameters.length) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); } - else if (kind === 131 /* SetAccessor */) { + else if (kind === 131) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } @@ -15880,7 +15933,7 @@ var ts; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); } - else if (parameter.flags & 243 /* Modifier */) { + else if (parameter.flags & 243) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } else if (parameter.questionToken) { @@ -15893,7 +15946,7 @@ var ts; } } function checkGrammarForDisallowedComputedProperty(node, message) { - if (node.kind === 122 /* ComputedPropertyName */) { + if (node.kind === 122) { return grammarErrorOnNode(node, message); } } @@ -15901,7 +15954,7 @@ var ts; if (checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) || checkGrammarFunctionLikeDeclaration(node) || checkGrammarForGenerator(node)) { return true; } - if (node.parent.kind === 148 /* ObjectLiteralExpression */) { + if (node.parent.kind === 148) { if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { return true; } @@ -15909,7 +15962,7 @@ var ts; return grammarErrorAtPos(getSourceFile(node), node.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); } } - if (node.parent.kind === 191 /* ClassDeclaration */) { + if (node.parent.kind === 191) { if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { return true; } @@ -15920,21 +15973,21 @@ var ts; return checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_method_overloads); } } - else if (node.parent.kind === 192 /* InterfaceDeclaration */) { + else if (node.parent.kind === 192) { return checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_interfaces); } - else if (node.parent.kind === 139 /* TypeLiteral */) { + else if (node.parent.kind === 139) { return checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_type_literals); } } function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: + case 177: + case 178: + case 175: + case 176: return true; - case 184 /* LabeledStatement */: + case 184: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; @@ -15946,17 +15999,17 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 184 /* LabeledStatement */: + case 184: if (node.label && current.label.text === node.label.text) { - var isMisplacedContinueLabel = node.kind === 179 /* ContinueStatement */ && !isIterationStatement(current.statement, true); + var isMisplacedContinueLabel = node.kind === 179 && !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 183 /* SwitchStatement */: - if (node.kind === 180 /* BreakStatement */ && !node.label) { + case 183: + if (node.kind === 180 && !node.label) { return false; } break; @@ -15969,11 +16022,11 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 180 /* 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; + var message = node.kind === 180 ? 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 === 180 /* 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; + var message = node.kind === 180 ? 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); } } @@ -16018,7 +16071,7 @@ var ts; if (!declarationList.declarations.length) { return grammarErrorAtPos(ts.getSourceFileOfNode(declarationList), declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); } - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { if (ts.isLet(declarationList)) { return grammarErrorOnFirstToken(declarationList, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher); } @@ -16029,14 +16082,14 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 174 /* IfStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 182 /* WithStatement */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: + case 174: + case 175: + case 176: + case 182: + case 177: + case 178: return false; - case 184 /* LabeledStatement */: + case 184: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -16052,26 +16105,26 @@ var ts; } } function isIntegerLiteral(expression) { - if (expression.kind === 161 /* PrefixUnaryExpression */) { + if (expression.kind === 161) { var unaryExpression = expression; - if (unaryExpression.operator === 33 /* PlusToken */ || unaryExpression.operator === 34 /* MinusToken */) { + if (unaryExpression.operator === 33 || unaryExpression.operator === 34) { expression = unaryExpression.operand; } } - if (expression.kind === 7 /* NumericLiteral */) { + if (expression.kind === 7) { return /^[0-9]+([eE]\+?[0-9]+)?$/.test(expression.text); } return false; } function checkGrammarEnumDeclaration(enumDecl) { - var enumIsConst = (enumDecl.flags & 4096 /* Const */) !== 0; + var enumIsConst = (enumDecl.flags & 4096) !== 0; var hasError = false; if (!enumIsConst) { var inConstantEnumMemberSection = true; var inAmbientContext = ts.isInAmbientContext(enumDecl); for (var i = 0, n = enumDecl.members.length; i < n; i++) { var node = enumDecl.members[i]; - if (node.name.kind === 122 /* ComputedPropertyName */) { + if (node.name.kind === 122) { hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums); } else if (inAmbientContext) { @@ -16103,13 +16156,13 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var scanner = ts.createScanner(languageVersion, true, sourceFile.text); var start = scanToken(scanner, node.pos); - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2)); return true; } } function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) { if (!hasParseDiagnostics(sourceFile)) { - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); return true; } } @@ -16118,12 +16171,12 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var span = ts.getErrorSpanForNode(node); var start = span.end > span.pos ? ts.skipTrivia(sourceFile.text, span.pos) : span.pos; - diagnostics.push(ts.createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2)); return true; } } function checkGrammarEvalOrArgumentsInStrictMode(contextNode, identifier) { - if (contextNode && (contextNode.parserContextFlags & 1 /* StrictMode */) && ts.isEvalOrArgumentsIdentifier(identifier)) { + if (contextNode && (contextNode.parserContextFlags & 1) && ts.isEvalOrArgumentsIdentifier(identifier)) { var name = ts.declarationNameToString(identifier); return grammarErrorOnNode(identifier, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); } @@ -16139,17 +16192,17 @@ var ts; } } function checkGrammarProperty(node) { - if (node.parent.kind === 191 /* ClassDeclaration */) { + if (node.parent.kind === 191) { if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) || checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_class_property_declarations)) { return true; } } - else if (node.parent.kind === 192 /* InterfaceDeclaration */) { + else if (node.parent.kind === 192) { if (checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_interfaces)) { return true; } } - else if (node.parent.kind === 139 /* TypeLiteral */) { + else if (node.parent.kind === 139) { if (checkGrammarForDisallowedComputedProperty(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_type_literals)) { return true; } @@ -16159,7 +16212,7 @@ var ts; } } function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { - if (node.kind === 192 /* InterfaceDeclaration */ || node.kind === 197 /* ImportDeclaration */ || node.kind === 198 /* ExportAssignment */ || (node.flags & 2 /* Ambient */)) { + if (node.kind === 192 || node.kind === 197 || node.kind === 198 || (node.flags & 2)) { return false; } return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); @@ -16167,7 +16220,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var i = 0, n = file.statements.length; i < n; i++) { var decl = file.statements[i]; - if (ts.isDeclaration(decl) || decl.kind === 171 /* VariableStatement */) { + if (ts.isDeclaration(decl) || decl.kind === 171) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -16186,7 +16239,7 @@ var ts; if (!links.hasReportedStatementInAmbientContext && ts.isAnyFunction(node.parent)) { return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts); } - if (node.parent.kind === 170 /* Block */ || node.parent.kind === 196 /* ModuleBlock */ || node.parent.kind === 207 /* SourceFile */) { + if (node.parent.kind === 170 || node.parent.kind === 196 || node.parent.kind === 207) { var links = getNodeLinks(node.parent); if (!links.hasReportedStatementInAmbientContext) { return links.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); @@ -16197,11 +16250,11 @@ var ts; } } function checkGrammarNumbericLiteral(node) { - if (node.flags & 8192 /* OctalLiteral */) { - if (node.parserContextFlags & 1 /* StrictMode */) { + if (node.flags & 8192) { + if (node.parserContextFlags & 1) { return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode); } - else if (languageVersion >= 1 /* ES5 */) { + else if (languageVersion >= 1) { return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); } } @@ -16211,7 +16264,7 @@ var ts; if (!hasParseDiagnostics(sourceFile)) { var scanner = ts.createScanner(languageVersion, true, sourceFile.text); scanToken(scanner, node.pos); - diagnostics.push(ts.createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); + diagnostics.add(ts.createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2)); return true; } } @@ -16235,7 +16288,7 @@ var ts; } function shouldEmitToOwnFile(sourceFile, compilerOptions) { if (!ts.isDeclarationFile(sourceFile)) { - if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) { return true; } return false; @@ -16307,7 +16360,7 @@ var ts; }; } function getLineOfLocalPosition(currentSourceFile, pos) { - return currentSourceFile.getLineAndCharacterFromPosition(pos).line; + return ts.getLineAndCharacterOfPosition(currentSourceFile, 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)) { @@ -16334,15 +16387,15 @@ var ts; }); } function writeCommentRange(currentSourceFile, writer, comment, newLine) { - if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { - var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos); - var lastLine = currentSourceFile.getLineStarts().length; + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) { + var firstCommentLineAndCharacter = ts.getLineAndCharacterOfPosition(currentSourceFile, comment.pos); + var lastLine = ts.getLineStarts(currentSourceFile).length; var firstCommentLineIndent; for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { - var nextLineStart = currentLine === lastLine ? (comment.end + 1) : currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1); + var nextLineStart = currentLine === lastLine ? (comment.end + 1) : ts.getPositionFromLineAndCharacter(currentSourceFile, currentLine + 1, 1); if (pos !== comment.pos) { if (firstCommentLineIndent === undefined) { - firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos); + firstCommentLineIndent = calculateIndent(ts.getPositionFromLineAndCharacter(currentSourceFile, firstCommentLineAndCharacter.line, 1), comment.pos); } var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart); @@ -16382,7 +16435,7 @@ var ts; function calculateIndent(pos, end) { var currentLineIndent = 0; for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) { - if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) { + if (currentSourceFile.text.charCodeAt(pos) === 9) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } else { @@ -16394,7 +16447,7 @@ var ts; } function getFirstConstructorWithBody(node) { return ts.forEach(node.members, function (member) { - if (member.kind === 129 /* Constructor */ && ts.nodeIsPresent(member.body)) { + if (member.kind === 129 && ts.nodeIsPresent(member.body)) { return member; } }); @@ -16403,12 +16456,12 @@ var ts; var firstAccessor; var getAccessor; var setAccessor; - if (accessor.name.kind === 122 /* ComputedPropertyName */) { + if (accessor.name.kind === 122) { firstAccessor = accessor; - if (accessor.kind === 130 /* GetAccessor */) { + if (accessor.kind === 130) { getAccessor = accessor; } - else if (accessor.kind === 131 /* SetAccessor */) { + else if (accessor.kind === 131) { setAccessor = accessor; } else { @@ -16417,14 +16470,14 @@ var ts; } else { ts.forEach(node.members, function (member) { - if ((member.kind === 130 /* GetAccessor */ || member.kind === 131 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) { + if ((member.kind === 130 || member.kind === 131) && member.name.text === accessor.name.text && (member.flags & 128) === (accessor.flags & 128)) { if (!firstAccessor) { firstAccessor = member; } - if (member.kind === 130 /* GetAccessor */ && !getAccessor) { + if (member.kind === 130 && !getAccessor) { getAccessor = member; } - if (member.kind === 131 /* SetAccessor */ && !setAccessor) { + if (member.kind === 131 && !setAccessor) { setAccessor = member; } } @@ -16437,7 +16490,7 @@ var ts; }; } function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { - var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.filename, host.getCurrentDirectory()); + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); return ts.combinePaths(newDirPath, sourceFilePath); } @@ -16447,19 +16500,19 @@ var ts; var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir)); } else { - var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename); + var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName); } return emitOutputFilePathWithoutExtension + extension; } - function writeFile(host, diagnostics, filename, data, writeByteOrderMark) { - host.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) { - diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + function writeFile(host, diagnostics, fileName, data, writeByteOrderMark) { + host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); }); } function emitDeclarations(host, resolver, diagnostics, jsFilePath, root) { var newLine = host.getNewLine(); var compilerOptions = host.getCompilerOptions(); - var languageVersion = compilerOptions.target || 0 /* ES3 */; + var languageVersion = compilerOptions.target || 0; var write; var writeLine; var increaseIndent; @@ -16471,7 +16524,61 @@ var ts; var reportedDeclarationError = false; var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { } : writeJsDocComments; + var emit = compilerOptions.stripInternal ? stripInternal : emitNode; var aliasDeclarationEmitInfo = []; + var referencePathsOutput = ""; + if (root) { + if (!compilerOptions.noResolve) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = ts.tryResolveScriptReference(host, root, fileReference); + if (referencedFile && ((referencedFile.flags & 1024) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference)) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + } + emitSourceFile(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + if (!compilerOptions.noResolve) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference); + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile))) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + } + emitSourceFile(sourceFile); + } + }); + } + return { + reportedDeclarationError: reportedDeclarationError, + aliasDeclarationEmitInfo: aliasDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + referencePathsOutput: referencePathsOutput + }; + function hasInternalAnnotation(range) { + var text = currentSourceFile.text; + var comment = text.substring(range.pos, range.end); + return comment.indexOf("@internal") >= 0; + } + function stripInternal(node) { + if (node) { + var leadingCommentRanges = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos); + if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) { + return; + } + emitNode(node); + } + } function createAndSetNewTextWriterWithSymbolWriter() { var writer = createTextWriter(newLine); writer.trackSymbol = trackSymbol; @@ -16509,7 +16616,7 @@ var ts; setWriter(oldWriter); } function handleSymbolAccessibilityError(symbolAccesibilityResult) { - if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccesibilityResult.accessibility === 0) { if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) { writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible); } @@ -16537,7 +16644,7 @@ var ts; emitType(type); } else { - resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, writer); } } function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) { @@ -16547,12 +16654,12 @@ var ts; emitType(signature.type); } else { - resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer); + resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2, writer); } } function emitLines(nodes) { for (var i = 0, n = nodes.length; i < n; i++) { - emitNode(nodes[i]); + emit(nodes[i]); } } function emitSeparatedList(nodes, separator, eachNodeEmitFn) { @@ -16581,43 +16688,43 @@ var ts; } function emitType(type) { switch (type.kind) { - case 110 /* AnyKeyword */: - case 119 /* StringKeyword */: - case 117 /* NumberKeyword */: - case 111 /* BooleanKeyword */: - case 98 /* VoidKeyword */: - case 8 /* StringLiteral */: + case 110: + case 119: + case 117: + case 111: + case 98: + case 8: return writeTextOfNode(currentSourceFile, type); - case 135 /* TypeReference */: + case 135: return emitTypeReference(type); - case 138 /* TypeQuery */: + case 138: return emitTypeQuery(type); - case 140 /* ArrayType */: + case 140: return emitArrayType(type); - case 141 /* TupleType */: + case 141: return emitTupleType(type); - case 142 /* UnionType */: + case 142: return emitUnionType(type); - case 143 /* ParenthesizedType */: + case 143: return emitParenType(type); - case 136 /* FunctionType */: - case 137 /* ConstructorType */: + case 136: + case 137: return emitSignatureDeclarationWithJsDocComments(type); - case 139 /* TypeLiteral */: + case 139: return emitTypeLiteral(type); - case 64 /* Identifier */: + case 64: return emitEntityName(type); - case 121 /* QualifiedName */: + case 121: return emitEntityName(type); default: ts.Debug.fail("Unknown type annotation: " + type.kind); } function emitEntityName(entityName) { - var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 197 /* ImportDeclaration */ ? entityName.parent : enclosingDeclaration); + var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 197 ? entityName.parent : enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); writeEntityName(entityName); function writeEntityName(entityName) { - if (entityName.kind === 64 /* Identifier */) { + if (entityName.kind === 64) { writeTextOfNode(currentSourceFile, entityName); } else { @@ -16681,22 +16788,22 @@ var ts; } function emitModuleElementDeclarationFlags(node) { if (node.parent === currentSourceFile) { - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { write("export "); } - if (node.kind !== 192 /* InterfaceDeclaration */) { + if (node.kind !== 192) { write("declare "); } } } function emitClassMemberDeclarationFlags(node) { - if (node.flags & 32 /* Private */) { + if (node.flags & 32) { write("private "); } - else if (node.flags & 64 /* Protected */) { + else if (node.flags & 64) { write("protected "); } - if (node.flags & 128 /* Static */) { + if (node.flags & 128) { write("static "); } } @@ -16714,7 +16821,7 @@ var ts; } function writeImportDeclaration(node) { emitJsDocComments(node); - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { write("export "); } write("import "); @@ -16744,7 +16851,7 @@ var ts; emitModuleElementDeclarationFlags(node); write("module "); writeTextOfNode(currentSourceFile, node.name); - while (node.body.kind !== 196 /* ModuleBlock */) { + while (node.body.kind !== 196) { node = node.body; write("."); writeTextOfNode(currentSourceFile, node.name); @@ -16801,7 +16908,7 @@ var ts; function emitEnumMemberDeclaration(node) { emitJsDocComments(node); writeTextOfNode(currentSourceFile, node.name); - var enumMemberValue = resolver.getEnumMemberValue(node); + var enumMemberValue = resolver.getConstantValue(node); if (enumMemberValue !== undefined) { write(" = "); write(enumMemberValue.toString()); @@ -16810,7 +16917,7 @@ var ts; writeLine(); } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 128 /* MethodDeclaration */ && (node.parent.flags & 32 /* Private */); + return node.parent.kind === 128 && (node.parent.flags & 32); } function emitTypeParameters(typeParameters) { function emitTypeParameter(node) { @@ -16820,8 +16927,8 @@ var ts; writeTextOfNode(currentSourceFile, node.name); if (node.constraint && !isPrivateMethodTypeParameter(node)) { write(" extends "); - if (node.parent.kind === 136 /* FunctionType */ || node.parent.kind === 137 /* ConstructorType */ || (node.parent.parent && node.parent.parent.kind === 139 /* TypeLiteral */)) { - ts.Debug.assert(node.parent.kind === 128 /* MethodDeclaration */ || node.parent.kind === 127 /* MethodSignature */ || node.parent.kind === 136 /* FunctionType */ || node.parent.kind === 137 /* ConstructorType */ || node.parent.kind === 132 /* CallSignature */ || node.parent.kind === 133 /* ConstructSignature */); + if (node.parent.kind === 136 || node.parent.kind === 137 || (node.parent.parent && node.parent.parent.kind === 139)) { + ts.Debug.assert(node.parent.kind === 128 || node.parent.kind === 127 || node.parent.kind === 136 || node.parent.kind === 137 || node.parent.kind === 132 || node.parent.kind === 133); emitType(node.constraint); } else { @@ -16831,31 +16938,31 @@ var ts; function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; switch (node.parent.kind) { - case 191 /* ClassDeclaration */: + case 191: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 192 /* InterfaceDeclaration */: + case 192: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 133 /* ConstructSignature */: + case 133: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 132 /* CallSignature */: + case 132: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - if (node.parent.flags & 128 /* Static */) { + case 128: + case 127: + if (node.parent.flags & 128) { diagnosticMessage = 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 === 191 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 191) { diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; } else { diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; } break; - case 190 /* FunctionDeclaration */: + case 190: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -16883,7 +16990,7 @@ var ts; emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError); function getHeritageClauseVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; - if (node.parent.parent.kind === 191 /* ClassDeclaration */) { + if (node.parent.parent.kind === 191) { 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 { @@ -16901,7 +17008,7 @@ var ts; function emitParameterProperties(constructorDeclaration) { if (constructorDeclaration) { ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & 112 /* AccessibilityModifier */) { + if (param.flags & 112) { emitPropertyDeclaration(param); } }); @@ -16962,29 +17069,29 @@ var ts; writeLine(); } function emitVariableDeclaration(node) { - if (node.kind !== 188 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + if (node.kind !== 188 || resolver.isDeclarationVisible(node)) { writeTextOfNode(currentSourceFile, node.name); - if ((node.kind === 126 /* PropertyDeclaration */ || node.kind === 125 /* PropertySignature */) && ts.hasQuestionToken(node)) { + if ((node.kind === 126 || node.kind === 125) && ts.hasQuestionToken(node)) { write("?"); } - if ((node.kind === 126 /* PropertyDeclaration */ || node.kind === 125 /* PropertySignature */) && node.parent.kind === 139 /* TypeLiteral */) { + if ((node.kind === 126 || node.kind === 125) && node.parent.kind === 139) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } - else if (!(node.flags & 32 /* Private */)) { + else if (!(node.flags & 32)) { writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError); } } function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; - if (node.kind === 188 /* 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; + if (node.kind === 188) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 === 126 /* PropertyDeclaration */ || node.kind === 125 /* PropertySignature */) { - 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.kind === 126 || node.kind === 125) { + if (node.flags & 128) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 === 191 /* 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 if (node.parent.kind === 191) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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; @@ -17032,11 +17139,11 @@ var ts; emitJsDocComments(accessors.setAccessor); emitClassMemberDeclarationFlags(node); writeTextOfNode(currentSourceFile, node.name); - if (!(node.flags & 32 /* Private */)) { + if (!(node.flags & 32)) { var accessorWithTypeAnnotation = node; var type = getTypeAnnotationFromAccessor(node); if (!type) { - var anotherAccessor = node.kind === 130 /* GetAccessor */ ? accessors.setAccessor : accessors.getAccessor; + var anotherAccessor = node.kind === 130 ? accessors.setAccessor : accessors.getAccessor; type = getTypeAnnotationFromAccessor(anotherAccessor); if (type) { accessorWithTypeAnnotation = anotherAccessor; @@ -17049,13 +17156,13 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 130 /* GetAccessor */ ? accessor.type : accessor.parameters[0].type; + return accessor.kind === 130 ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type : undefined; } } function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; - if (accessorWithTypeAnnotation.kind === 131 /* SetAccessor */) { - if (accessorWithTypeAnnotation.parent.flags & 128 /* Static */) { + if (accessorWithTypeAnnotation.kind === 131) { + if (accessorWithTypeAnnotation.parent.flags & 128) { 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 { @@ -17068,11 +17175,11 @@ var ts; }; } else { - if (accessorWithTypeAnnotation.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; + if (accessorWithTypeAnnotation.flags & 128) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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; + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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, @@ -17086,19 +17193,19 @@ var ts; if (ts.hasDynamicName(node)) { return; } - if ((node.kind !== 190 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + if ((node.kind !== 190 || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - if (node.kind === 190 /* FunctionDeclaration */) { + if (node.kind === 190) { emitModuleElementDeclarationFlags(node); } - else if (node.kind === 128 /* MethodDeclaration */) { + else if (node.kind === 128) { emitClassMemberDeclarationFlags(node); } - if (node.kind === 190 /* FunctionDeclaration */) { + if (node.kind === 190) { write("function "); writeTextOfNode(currentSourceFile, node.name); } - else if (node.kind === 129 /* Constructor */) { + else if (node.kind === 129) { write("constructor"); } else { @@ -17115,11 +17222,11 @@ var ts; emitSignatureDeclaration(node); } function emitSignatureDeclaration(node) { - if (node.kind === 133 /* ConstructSignature */ || node.kind === 137 /* ConstructorType */) { + if (node.kind === 133 || node.kind === 137) { write("new "); } emitTypeParameters(node.typeParameters); - if (node.kind === 134 /* IndexSignature */) { + if (node.kind === 134) { write("["); } else { @@ -17128,20 +17235,20 @@ var ts; var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 134 /* IndexSignature */) { + if (node.kind === 134) { write("]"); } else { write(")"); } - var isFunctionTypeOrConstructorType = node.kind === 136 /* FunctionType */ || node.kind === 137 /* ConstructorType */; - if (isFunctionTypeOrConstructorType || node.parent.kind === 139 /* TypeLiteral */) { + var isFunctionTypeOrConstructorType = node.kind === 136 || node.kind === 137; + if (isFunctionTypeOrConstructorType || node.parent.kind === 139) { if (node.type) { write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } - else if (node.kind !== 129 /* Constructor */ && !(node.flags & 32 /* Private */)) { + else if (node.kind !== 129 && !(node.flags & 32)) { writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } enclosingDeclaration = prevEnclosingDeclaration; @@ -17152,29 +17259,29 @@ var ts; function getReturnTypeVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; switch (node.kind) { - case 133 /* ConstructSignature */: + case 133: 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 132 /* CallSignature */: + case 132: 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 134 /* IndexSignature */: + case 134: 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 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - 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; + case 128: + case 127: + if (node.flags & 128) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 === 191 /* 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 if (node.parent.kind === 191) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 190 /* 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; + case 190: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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: " + node.kind); @@ -17201,38 +17308,38 @@ var ts; write("?"); } decreaseIndent(); - if (node.parent.kind === 136 /* FunctionType */ || node.parent.kind === 137 /* ConstructorType */ || node.parent.parent.kind === 139 /* TypeLiteral */) { + if (node.parent.kind === 136 || node.parent.kind === 137 || node.parent.parent.kind === 139) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } - else if (!(node.parent.flags & 32 /* Private */)) { + else if (!(node.parent.flags & 32)) { writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError); } function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) { var diagnosticMessage; switch (node.parent.kind) { - case 129 /* 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; + case 129: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 133 /* ConstructSignature */: + case 133: 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 132 /* CallSignature */: + case 132: 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 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - 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; + case 128: + case 127: + if (node.parent.flags & 128) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 === 191 /* 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 if (node.parent.parent.kind === 191) { + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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 190 /* 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; + case 190: + diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? 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: " + node.parent.kind); @@ -17246,87 +17353,48 @@ var ts; } function emitNode(node) { switch (node.kind) { - case 129 /* Constructor */: - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 129: + case 190: + case 128: + case 127: return emitFunctionDeclaration(node); - case 133 /* ConstructSignature */: - case 132 /* CallSignature */: - case 134 /* IndexSignature */: + case 133: + case 132: + case 134: return emitSignatureDeclarationWithJsDocComments(node); - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 130: + case 131: return emitAccessorDeclaration(node); - case 171 /* VariableStatement */: + case 171: return emitVariableStatement(node); - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 126: + case 125: return emitPropertyDeclaration(node); - case 192 /* InterfaceDeclaration */: + case 192: return emitInterfaceDeclaration(node); - case 191 /* ClassDeclaration */: + case 191: return emitClassDeclaration(node); - case 193 /* TypeAliasDeclaration */: + case 193: return emitTypeAliasDeclaration(node); - case 206 /* EnumMember */: + case 206: return emitEnumMemberDeclaration(node); - case 194 /* EnumDeclaration */: + case 194: return emitEnumDeclaration(node); - case 195 /* ModuleDeclaration */: + case 195: return emitModuleDeclaration(node); - case 197 /* ImportDeclaration */: + case 197: return emitImportDeclaration(node); - case 198 /* ExportAssignment */: + case 198: return emitExportAssignment(node); - case 207 /* SourceFile */: + case 207: return emitSourceFile(node); } } - var referencePathsOutput = ""; function writeReferencePath(referencedFile) { - var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, host, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; + var declFileName = referencedFile.flags & 1024 ? referencedFile.fileName : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, host, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts"; declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); referencePathsOutput += "/// " + newLine; } - if (root) { - if (!compilerOptions.noResolve) { - var addedGlobalFileReference = false; - ts.forEach(root.referencedFiles, function (fileReference) { - var referencedFile = ts.tryResolveScriptReference(host, 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(host.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - if (!compilerOptions.noResolve) { - ts.forEach(sourceFile.referencedFiles, function (fileReference) { - var referencedFile = ts.tryResolveScriptReference(host, 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(), - referencePathsOutput: referencePathsOutput - }; } function getDeclarationDiagnostics(host, resolver, targetSourceFile) { var diagnostics = []; @@ -17337,10 +17405,36 @@ var ts; ts.getDeclarationDiagnostics = getDeclarationDiagnostics; function emitFiles(resolver, host, targetSourceFile) { var compilerOptions = host.getCompilerOptions(); - var languageVersion = compilerOptions.target || 0 /* ES3 */; + var languageVersion = compilerOptions.target || 0; var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; var diagnostics = []; var newLine = host.getNewLine(); + if (targetSourceFile === undefined) { + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); + emitFile(jsFilePath, sourceFile); + } + }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + else { + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); + emitFile(jsFilePath, targetSourceFile); + } + else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { + emitFile(compilerOptions.out); + } + } + diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics); + return { + emitSkipped: false, + diagnostics: diagnostics, + sourceMaps: sourceMapDataList + }; function emitJavaScript(jsFilePath, root) { var writer = createTextWriter(newLine); var write = writer.write; @@ -17377,6 +17471,22 @@ var ts; var scopeEmitEnd = function () { }; var sourceMapData; + if (compilerOptions.sourceMap) { + initializeEmitterWithSourceMaps(); + } + if (root) { + emit(root); + } + else { + ts.forEach(host.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + emit(sourceFile); + } + }); + } + writeLine(); + writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); + return; function initializeEmitterWithSourceMaps() { var sourceMapDir; var sourceMapSourceIndex = -1; @@ -17446,7 +17556,7 @@ var ts; } } function recordSourceMapSpan(pos) { - var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); + var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, pos); var emittedLine = writer.getLine(); var emittedColumn = writer.getColumn(); if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { @@ -17481,9 +17591,9 @@ var ts; } function recordNewSourceFileStart(node) { var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; - sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, host.getCurrentDirectory(), host.getCanonicalFileName, true)); + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; - sourceMapData.inputSourceFileNames.push(node.filename); + sourceMapData.inputSourceFileNames.push(node.fileName); } function recordScopeNameOfNode(node, scopeName) { function recordScopeNameIndex(scopeNameIndex) { @@ -17495,7 +17605,7 @@ var ts; var parentIndex = getSourceMapNameIndex(); if (parentIndex !== -1) { var name = node.name; - if (!name || name.kind !== 122 /* ComputedPropertyName */) { + if (!name || name.kind !== 122) { scopeName = "." + scopeName; } scopeName = sourceMapData.sourceMapNames[parentIndex] + scopeName; @@ -17512,10 +17622,10 @@ var ts; if (scopeName) { recordScopeNameStart(scopeName); } - else if (node.kind === 190 /* FunctionDeclaration */ || node.kind === 156 /* FunctionExpression */ || node.kind === 128 /* MethodDeclaration */ || node.kind === 127 /* MethodSignature */ || node.kind === 130 /* GetAccessor */ || node.kind === 131 /* SetAccessor */ || node.kind === 195 /* ModuleDeclaration */ || node.kind === 191 /* ClassDeclaration */ || node.kind === 194 /* EnumDeclaration */) { + else if (node.kind === 190 || node.kind === 156 || node.kind === 128 || node.kind === 127 || node.kind === 130 || node.kind === 131 || node.kind === 195 || node.kind === 191 || node.kind === 194) { if (node.name) { var name = node.name; - scopeName = name.kind === 122 /* ComputedPropertyName */ ? ts.getTextOfNode(name) : node.name.text; + scopeName = name.kind === 122 ? ts.getTextOfNode(name) : node.name.text; } recordScopeNameStart(scopeName); } @@ -17561,7 +17671,7 @@ var ts; sourceMapDataList.push(sourceMapData); writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark); } - var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath)); + var sourceMapJsFile = ts.getBaseFileName(ts.normalizeSlashes(jsFilePath)); sourceMapData = { sourceMapFilePath: jsFilePath + ".map", jsSourceMappingURL: sourceMapJsFile + ".map", @@ -17574,7 +17684,7 @@ var ts; sourceMapDecodedMappings: [] }; sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); - if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) { + if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) { sourceMapData.sourceMapSourceRoot += ts.directorySeparator; } if (compilerOptions.mapRoot) { @@ -17595,7 +17705,7 @@ var ts; } function emitNodeWithMap(node) { if (node) { - if (node.kind != 207 /* SourceFile */) { + if (node.kind != 207) { recordEmitNodeStartSpan(node); emitNode(node); recordEmitNodeEndSpan(node); @@ -17624,10 +17734,10 @@ var ts; if (name && resolver.isUnknownIdentifier(location, name)) { break; } - name = "_" + (tempCount < 25 ? String.fromCharCode(tempCount + (tempCount < 8 ? 0 : 1) + 97 /* a */) : tempCount - 25); + name = "_" + (tempCount < 25 ? String.fromCharCode(tempCount + (tempCount < 8 ? 0 : 1) + 97) : tempCount - 25); tempCount++; } - var result = ts.createNode(64 /* Identifier */); + var result = ts.createNode(64); result.text = name; return result; } @@ -17729,17 +17839,17 @@ var ts; if (text.length <= 0) { return false; } - if (text.charCodeAt(1) === 66 /* B */ || text.charCodeAt(1) === 98 /* b */ || text.charCodeAt(1) === 79 /* O */ || text.charCodeAt(1) === 111 /* o */) { + if (text.charCodeAt(1) === 66 || text.charCodeAt(1) === 98 || text.charCodeAt(1) === 79 || text.charCodeAt(1) === 111) { return true; } return false; } function emitLiteral(node) { - var text = languageVersion < 2 /* ES6 */ && ts.isTemplateLiteralKind(node.kind) ? getTemplateLiteralAsStringLiteral(node) : node.parent ? ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node) : node.text; - if (compilerOptions.sourceMap && (node.kind === 8 /* StringLiteral */ || ts.isTemplateLiteralKind(node.kind))) { + var text = languageVersion < 2 && ts.isTemplateLiteralKind(node.kind) ? getTemplateLiteralAsStringLiteral(node) : node.parent ? ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node) : node.text; + if (compilerOptions.sourceMap && (node.kind === 8 || ts.isTemplateLiteralKind(node.kind))) { writer.writeLiteral(text); } - else if (languageVersion < 2 /* ES6 */ && node.kind === 7 /* NumericLiteral */ && isBinaryOrOctalIntegerLiteral(text)) { + else if (languageVersion < 2 && node.kind === 7 && isBinaryOrOctalIntegerLiteral(text)) { write(node.text); } else { @@ -17750,11 +17860,10 @@ var ts; return '"' + ts.escapeString(node.text) + '"'; } function emitTemplateExpression(node) { - if (languageVersion >= 2 /* ES6 */) { + if (languageVersion >= 2) { ts.forEachChild(node, emit); return; } - ts.Debug.assert(node.parent.kind !== 153 /* TaggedTemplateExpression */); var emitOuterParens = ts.isExpression(node.parent) && templateNeedsParens(node, node.parent); if (emitOuterParens) { write("("); @@ -17766,7 +17875,7 @@ var ts; } for (var i = 0; i < node.templateSpans.length; i++) { var templateSpan = node.templateSpans[i]; - var needsParens = templateSpan.expression.kind !== 155 /* ParenthesizedExpression */ && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1 /* GreaterThan */; + var needsParens = templateSpan.expression.kind !== 155 && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1; if (i > 0 || headEmitted) { write(" + "); } @@ -17785,36 +17894,34 @@ var ts; } function templateNeedsParens(template, parent) { switch (parent.kind) { - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: return parent.expression === template; - case 155 /* ParenthesizedExpression */: + case 153: + case 155: return false; - case 153 /* TaggedTemplateExpression */: - ts.Debug.fail("Path should be unreachable; tagged templates not supported pre-ES6."); default: - return comparePrecedenceToBinaryPlus(parent) !== -1 /* LessThan */; + return comparePrecedenceToBinaryPlus(parent) !== -1; } } function comparePrecedenceToBinaryPlus(expression) { - ts.Debug.assert(languageVersion < 2 /* ES6 */); switch (expression.kind) { - case 163 /* BinaryExpression */: + case 163: switch (expression.operator) { - case 35 /* AsteriskToken */: - case 36 /* SlashToken */: - case 37 /* PercentToken */: - return 1 /* GreaterThan */; - case 33 /* PlusToken */: - case 34 /* MinusToken */: - return 0 /* EqualTo */; + case 35: + case 36: + case 37: + return 1; + case 33: + case 34: + return 0; default: - return -1 /* LessThan */; + return -1; } - case 164 /* ConditionalExpression */: - return -1 /* LessThan */; + case 164: + return -1; default: - return 1 /* GreaterThan */; + return 1; } } } @@ -17823,15 +17930,15 @@ var ts; emit(span.literal); } function emitExpressionForPropertyName(node) { - if (node.kind === 8 /* StringLiteral */) { + if (node.kind === 8) { emitLiteral(node); } - else if (node.kind === 122 /* ComputedPropertyName */) { + else if (node.kind === 122) { emit(node.expression); } else { write("\""); - if (node.kind === 7 /* NumericLiteral */) { + if (node.kind === 7) { write(node.text); } else { @@ -17843,33 +17950,33 @@ var ts; function isNotExpressionIdentifier(node) { var parent = node.parent; switch (parent.kind) { - case 124 /* Parameter */: - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 204 /* PropertyAssignment */: - case 205 /* ShorthandPropertyAssignment */: - case 206 /* EnumMember */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 190 /* FunctionDeclaration */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 156 /* FunctionExpression */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 195 /* ModuleDeclaration */: - case 197 /* ImportDeclaration */: + case 124: + case 188: + case 146: + case 126: + case 125: + case 204: + case 205: + case 206: + case 128: + case 127: + case 190: + case 130: + case 131: + case 156: + case 191: + case 192: + case 194: + case 195: + case 197: return parent.name === node; - case 180 /* BreakStatement */: - case 179 /* ContinueStatement */: - case 198 /* ExportAssignment */: + case 180: + case 179: + case 198: return false; - case 184 /* LabeledStatement */: + case 184: return node.parent.label === node; - case 203 /* CatchClause */: + case 203: return node.parent.name === node; } } @@ -17893,7 +18000,7 @@ var ts; } } function emitThis(node) { - if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { + if (resolver.getNodeCheckFlags(node) & 2) { write("_this"); } else { @@ -17902,10 +18009,10 @@ var ts; } function emitSuper(node) { var flags = resolver.getNodeCheckFlags(node); - if (flags & 16 /* SuperInstance */) { + if (flags & 16) { write("_super.prototype"); } - else if (flags & 32 /* SuperStatic */) { + else if (flags & 32) { write("_super"); } else { @@ -17946,12 +18053,12 @@ var ts; } function needsParenthesisForPropertyAccess(node) { switch (node.kind) { - case 64 /* Identifier */: - case 147 /* ArrayLiteralExpression */: - case 149 /* PropertyAccessExpression */: - case 150 /* ElementAccessExpression */: - case 151 /* CallExpression */: - case 155 /* ParenthesizedExpression */: + case 64: + case 147: + case 149: + case 150: + case 151: + case 155: return false; } return true; @@ -17963,9 +18070,9 @@ var ts; write("[]"); return; } - if (languageVersion >= 2 /* ES6 */) { + if (languageVersion >= 2) { write("["); - emitList(elements, 0, elements.length, (node.flags & 256 /* MultiLine */) !== 0, elements.hasTrailingComma); + emitList(elements, 0, elements.length, (node.flags & 256) !== 0, elements.hasTrailingComma); write("]"); return; } @@ -17979,18 +18086,18 @@ var ts; write(", "); } var e = elements[pos]; - if (e.kind === 167 /* SpreadElementExpression */) { + if (e.kind === 167) { e = e.expression; emitParenthesized(e, group === 0 && needsParenthesisForPropertyAccess(e)); pos++; } else { var i = pos; - while (i < length && elements[i].kind !== 167 /* SpreadElementExpression */) { + while (i < length && elements[i].kind !== 167) { i++; } write("["); - emitList(elements, pos, i - pos, (node.flags & 256 /* MultiLine */) !== 0, elements.hasTrailingComma); + emitList(elements, pos, i - pos, (node.flags & 256) !== 0, elements.hasTrailingComma); write("]"); pos = i; } @@ -18004,11 +18111,11 @@ var ts; write("{"); var properties = node.properties; if (properties.length) { - var multiLine = (node.flags & 256 /* MultiLine */) !== 0; + var multiLine = (node.flags & 256) !== 0; if (!multiLine) { write(" "); } - emitList(properties, 0, properties.length, multiLine, properties.hasTrailingComma && languageVersion >= 1 /* ES5 */); + emitList(properties, 0, properties.length, multiLine, properties.hasTrailingComma && languageVersion >= 1); if (!multiLine) { write(" "); } @@ -18022,7 +18129,7 @@ var ts; } function emitMethod(node) { emit(node.name); - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { write(": function "); } emitSignatureAndBody(node); @@ -18034,7 +18141,7 @@ var ts; } function emitShorthandPropertyAssignment(node) { emit(node.name); - if (languageVersion < 2 /* ES6 */ || resolver.getExpressionNamePrefix(node.name)) { + if (languageVersion < 2 || resolver.getExpressionNamePrefix(node.name)) { write(": "); emitExpressionIdentifier(node.name); } @@ -18042,8 +18149,11 @@ var ts; function tryEmitConstantValue(node) { var constantValue = resolver.getConstantValue(node); if (constantValue !== undefined) { - var propertyName = node.kind === 149 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); - write(constantValue.toString() + " /* " + propertyName + " */"); + write(constantValue.toString()); + if (!compilerOptions.removeComments) { + var propertyName = node.kind === 149 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + write(" /* " + propertyName + " */"); + } return true; } return false; @@ -18072,13 +18182,13 @@ var ts; } function emitCallExpression(node) { var superCall = false; - if (node.expression.kind === 90 /* SuperKeyword */) { + if (node.expression.kind === 90) { write("_super"); superCall = true; } else { emit(node.expression); - superCall = node.expression.kind === 149 /* PropertyAccessExpression */ && node.expression.expression.kind === 90 /* SuperKeyword */; + superCall = node.expression.kind === 149 && node.expression.expression.kind === 90; } if (superCall) { write(".call("); @@ -18105,18 +18215,17 @@ var ts; } } function emitTaggedTemplateExpression(node) { - ts.Debug.assert(languageVersion >= 2 /* ES6 */, "Trying to emit a tagged template in pre-ES6 mode."); emit(node.tag); write(" "); emit(node.template); } function emitParenExpression(node) { - if (node.expression.kind === 154 /* TypeAssertionExpression */) { + if (node.expression.kind === 154) { var operand = node.expression.expression; - while (operand.kind == 154 /* TypeAssertionExpression */) { + while (operand.kind == 154) { operand = operand.expression; } - if (operand.kind !== 161 /* PrefixUnaryExpression */ && operand.kind !== 160 /* VoidExpression */ && operand.kind !== 159 /* TypeOfExpression */ && operand.kind !== 158 /* DeleteExpression */ && operand.kind !== 162 /* PostfixUnaryExpression */ && operand.kind !== 152 /* NewExpression */ && !(operand.kind === 151 /* CallExpression */ && node.parent.kind === 152 /* NewExpression */) && !(operand.kind === 156 /* FunctionExpression */ && node.parent.kind === 151 /* CallExpression */)) { + if (operand.kind !== 161 && operand.kind !== 160 && operand.kind !== 159 && operand.kind !== 158 && operand.kind !== 162 && operand.kind !== 152 && !(operand.kind === 151 && node.parent.kind === 152) && !(operand.kind === 156 && node.parent.kind === 151)) { emit(operand); return; } @@ -18126,28 +18235,28 @@ var ts; write(")"); } function emitDeleteExpression(node) { - write(ts.tokenToString(73 /* DeleteKeyword */)); + write(ts.tokenToString(73)); write(" "); emit(node.expression); } function emitVoidExpression(node) { - write(ts.tokenToString(98 /* VoidKeyword */)); + write(ts.tokenToString(98)); write(" "); emit(node.expression); } function emitTypeOfExpression(node) { - write(ts.tokenToString(96 /* TypeOfKeyword */)); + write(ts.tokenToString(96)); write(" "); emit(node.expression); } function emitPrefixUnaryExpression(node) { write(ts.tokenToString(node.operator)); - if (node.operand.kind === 161 /* PrefixUnaryExpression */) { + if (node.operand.kind === 161) { var operand = node.operand; - if (node.operator === 33 /* PlusToken */ && (operand.operator === 33 /* PlusToken */ || operand.operator === 38 /* PlusPlusToken */)) { + if (node.operator === 33 && (operand.operator === 33 || operand.operator === 38)) { write(" "); } - else if (node.operator === 34 /* MinusToken */ && (operand.operator === 34 /* MinusToken */ || operand.operator === 39 /* MinusMinusToken */)) { + else if (node.operator === 34 && (operand.operator === 34 || operand.operator === 39)) { write(" "); } } @@ -18158,12 +18267,12 @@ var ts; write(ts.tokenToString(node.operator)); } function emitBinaryExpression(node) { - if (languageVersion < 2 /* ES6 */ && node.operator === 52 /* EqualsToken */ && (node.left.kind === 148 /* ObjectLiteralExpression */ || node.left.kind === 147 /* ArrayLiteralExpression */)) { + if (languageVersion < 2 && node.operator === 52 && (node.left.kind === 148 || node.left.kind === 147)) { emitDestructuring(node); } else { emit(node.left); - if (node.operator !== 23 /* CommaToken */) + if (node.operator !== 23) write(" "); write(ts.tokenToString(node.operator)); write(" "); @@ -18178,24 +18287,24 @@ var ts; emit(node.whenFalse); } function emitBlock(node) { - emitToken(14 /* OpenBraceToken */, node.pos); + emitToken(14, node.pos); increaseIndent(); scopeEmitStart(node.parent); - if (node.kind === 196 /* ModuleBlock */) { - ts.Debug.assert(node.parent.kind === 195 /* ModuleDeclaration */); + if (node.kind === 196) { + ts.Debug.assert(node.parent.kind === 195); emitCaptureThisForNodeIfNecessary(node.parent); } emitLines(node.statements); - if (node.kind === 196 /* ModuleBlock */) { + if (node.kind === 196) { emitTempDeclarations(true); } decreaseIndent(); writeLine(); - emitToken(15 /* CloseBraceToken */, node.statements.end); + emitToken(15, node.statements.end); scopeEmitEnd(); } function emitEmbeddedStatement(node) { - if (node.kind === 170 /* Block */) { + if (node.kind === 170) { write(" "); emit(node); } @@ -18207,20 +18316,20 @@ var ts; } } function emitExpressionStatement(node) { - emitParenthesized(node.expression, node.expression.kind === 157 /* ArrowFunction */); + emitParenthesized(node.expression, node.expression.kind === 157); write(";"); } function emitIfStatement(node) { - var endPos = emitToken(83 /* IfKeyword */, node.pos); + var endPos = emitToken(83, node.pos); write(" "); - endPos = emitToken(16 /* OpenParenToken */, endPos); + endPos = emitToken(16, endPos); emit(node.expression); - emitToken(17 /* CloseParenToken */, node.expression.end); + emitToken(17, node.expression.end); emitEmbeddedStatement(node.thenStatement); if (node.elseStatement) { writeLine(); - emitToken(75 /* ElseKeyword */, node.thenStatement.end); - if (node.elseStatement.kind === 174 /* IfStatement */) { + emitToken(75, node.thenStatement.end); + if (node.elseStatement.kind === 174) { write(" "); emit(node.elseStatement); } @@ -18232,7 +18341,7 @@ var ts; function emitDoStatement(node) { write("do"); emitEmbeddedStatement(node.statement); - if (node.statement.kind === 170 /* Block */) { + if (node.statement.kind === 170) { write(" "); } else { @@ -18249,20 +18358,20 @@ var ts; emitEmbeddedStatement(node.statement); } function emitForStatement(node) { - var endPos = emitToken(81 /* ForKeyword */, node.pos); + var endPos = emitToken(81, node.pos); write(" "); - endPos = emitToken(16 /* OpenParenToken */, endPos); - if (node.initializer && node.initializer.kind === 189 /* VariableDeclarationList */) { + endPos = emitToken(16, endPos); + if (node.initializer && node.initializer.kind === 189) { var variableDeclarationList = node.initializer; var declarations = variableDeclarationList.declarations; if (declarations[0] && ts.isLet(declarations[0])) { - emitToken(103 /* LetKeyword */, endPos); + emitToken(103, endPos); } else if (declarations[0] && ts.isConst(declarations[0])) { - emitToken(69 /* ConstKeyword */, endPos); + emitToken(69, endPos); } else { - emitToken(97 /* VarKeyword */, endPos); + emitToken(97, endPos); } write(" "); emitCommaList(variableDeclarationList.declarations); @@ -18278,18 +18387,18 @@ var ts; emitEmbeddedStatement(node.statement); } function emitForInStatement(node) { - var endPos = emitToken(81 /* ForKeyword */, node.pos); + var endPos = emitToken(81, node.pos); write(" "); - endPos = emitToken(16 /* OpenParenToken */, endPos); - if (node.initializer.kind === 189 /* VariableDeclarationList */) { + endPos = emitToken(16, endPos); + if (node.initializer.kind === 189) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { var decl = variableDeclarationList.declarations[0]; if (ts.isLet(decl)) { - emitToken(103 /* LetKeyword */, endPos); + emitToken(103, endPos); } else { - emitToken(97 /* VarKeyword */, endPos); + emitToken(97, endPos); } write(" "); emit(decl); @@ -18300,16 +18409,16 @@ var ts; } write(" in "); emit(node.expression); - emitToken(17 /* CloseParenToken */, node.expression.end); + emitToken(17, node.expression.end); emitEmbeddedStatement(node.statement); } function emitBreakOrContinueStatement(node) { - emitToken(node.kind === 180 /* BreakStatement */ ? 65 /* BreakKeyword */ : 70 /* ContinueKeyword */, node.pos); + emitToken(node.kind === 180 ? 65 : 70, node.pos); emitOptional(" ", node.label); write(";"); } function emitReturnStatement(node) { - emitToken(89 /* ReturnKeyword */, node.pos); + emitToken(89, node.pos); emitOptional(" ", node.expression); write(";"); } @@ -18320,24 +18429,24 @@ var ts; emitEmbeddedStatement(node.statement); } function emitSwitchStatement(node) { - var endPos = emitToken(91 /* SwitchKeyword */, node.pos); + var endPos = emitToken(91, node.pos); write(" "); - emitToken(16 /* OpenParenToken */, endPos); + emitToken(16, endPos); emit(node.expression); - endPos = emitToken(17 /* CloseParenToken */, node.expression.end); + endPos = emitToken(17, node.expression.end); write(" "); - emitToken(14 /* OpenBraceToken */, endPos); + emitToken(14, endPos); increaseIndent(); emitLines(node.clauses); decreaseIndent(); writeLine(); - emitToken(15 /* CloseBraceToken */, node.clauses.end); + emitToken(15, node.clauses.end); } function isOnSameLine(node1, node2) { return getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node1.pos)) === getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos)); } function emitCaseOrDefaultClause(node) { - if (node.kind === 200 /* CaseClause */) { + if (node.kind === 200) { write("case "); emit(node.expression); write(":"); @@ -18372,16 +18481,16 @@ var ts; } function emitCatchClause(node) { writeLine(); - var endPos = emitToken(67 /* CatchKeyword */, node.pos); + var endPos = emitToken(67, node.pos); write(" "); - emitToken(16 /* OpenParenToken */, endPos); + emitToken(16, endPos); emit(node.name); - emitToken(17 /* CloseParenToken */, node.name.end); + emitToken(17, node.name.end); write(" "); emitBlock(node.block); } function emitDebuggerStatement(node) { - emitToken(71 /* DebuggerKeyword */, node.pos); + emitToken(71, node.pos); write(";"); } function emitLabelledStatement(node) { @@ -18392,12 +18501,12 @@ var ts; function getContainingModule(node) { do { node = node.parent; - } while (node && node.kind !== 195 /* ModuleDeclaration */); + } while (node && node.kind !== 195); return node; } function emitModuleMemberName(node) { emitStart(node.name); - if (ts.getCombinedNodeFlags(node) & 1 /* Export */) { + if (ts.getCombinedNodeFlags(node) & 1) { var container = getContainingModule(node); write(container ? resolver.getLocalNameOfContainer(container) : "exports"); write("."); @@ -18407,8 +18516,8 @@ var ts; } function emitDestructuring(root, value) { var emitCount = 0; - var isDeclaration = (root.kind === 188 /* VariableDeclaration */ && !(ts.getCombinedNodeFlags(root) & 1 /* Export */)) || root.kind === 124 /* Parameter */; - if (root.kind === 163 /* BinaryExpression */) { + var isDeclaration = (root.kind === 188 && !(ts.getCombinedNodeFlags(root) & 1)) || root.kind === 124; + if (root.kind === 163) { emitAssignmentExpression(root); } else { @@ -18418,7 +18527,7 @@ var ts; if (emitCount++) { write(", "); } - if (name.parent && (name.parent.kind === 188 /* VariableDeclaration */ || name.parent.kind === 146 /* BindingElement */)) { + if (name.parent && (name.parent.kind === 188 || name.parent.kind === 146)) { emitModuleMemberName(name.parent); } else { @@ -18428,7 +18537,7 @@ var ts; emit(value); } function ensureIdentifier(expr) { - if (expr.kind !== 64 /* Identifier */) { + if (expr.kind !== 64) { var identifier = createTempVariable(root); if (!isDeclaration) { recordTempDeclaration(identifier); @@ -18439,48 +18548,48 @@ var ts; return expr; } function createVoidZero() { - var zero = ts.createNode(7 /* NumericLiteral */); + var zero = ts.createNode(7); zero.text = "0"; - var result = ts.createNode(160 /* VoidExpression */); + var result = ts.createNode(160); result.expression = zero; return result; } function createDefaultValueCheck(value, defaultValue) { value = ensureIdentifier(value); - var equals = ts.createNode(163 /* BinaryExpression */); + var equals = ts.createNode(163); equals.left = value; - equals.operator = 30 /* EqualsEqualsEqualsToken */; + equals.operator = 30; equals.right = createVoidZero(); - var cond = ts.createNode(164 /* ConditionalExpression */); + var cond = ts.createNode(164); cond.condition = equals; cond.whenTrue = defaultValue; cond.whenFalse = value; return cond; } function createNumericLiteral(value) { - var node = ts.createNode(7 /* NumericLiteral */); + var node = ts.createNode(7); node.text = "" + value; return node; } function parenthesizeForAccess(expr) { - if (expr.kind === 64 /* Identifier */ || expr.kind === 149 /* PropertyAccessExpression */ || expr.kind === 150 /* ElementAccessExpression */) { + if (expr.kind === 64 || expr.kind === 149 || expr.kind === 150) { return expr; } - var node = ts.createNode(155 /* ParenthesizedExpression */); + var node = ts.createNode(155); node.expression = expr; return node; } function createPropertyAccess(object, propName) { - if (propName.kind !== 64 /* Identifier */) { + if (propName.kind !== 64) { return createElementAccess(object, propName); } - var node = ts.createNode(149 /* PropertyAccessExpression */); + var node = ts.createNode(149); node.expression = parenthesizeForAccess(object); node.name = propName; return node; } function createElementAccess(object, index) { - var node = ts.createNode(150 /* ElementAccessExpression */); + var node = ts.createNode(150); node.expression = parenthesizeForAccess(object); node.argumentExpression = index; return node; @@ -18492,7 +18601,7 @@ var ts; } for (var i = 0; i < properties.length; i++) { var p = properties[i]; - if (p.kind === 204 /* PropertyAssignment */ || p.kind === 205 /* ShorthandPropertyAssignment */) { + if (p.kind === 204 || p.kind === 205) { var propName = (p.name); emitDestructuringAssignment(p.initializer || propName, createPropertyAccess(value, propName)); } @@ -18505,8 +18614,8 @@ var ts; } for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 168 /* OmittedExpression */) { - if (e.kind !== 167 /* SpreadElementExpression */) { + if (e.kind !== 168) { + if (e.kind !== 167) { emitDestructuringAssignment(e, createElementAccess(value, createNumericLiteral(i))); } else { @@ -18520,14 +18629,14 @@ var ts; } } function emitDestructuringAssignment(target, value) { - if (target.kind === 163 /* BinaryExpression */ && target.operator === 52 /* EqualsToken */) { + if (target.kind === 163 && target.operator === 52) { value = createDefaultValueCheck(value, target.right); target = target.left; } - if (target.kind === 148 /* ObjectLiteralExpression */) { + if (target.kind === 148) { emitObjectLiteralAssignment(target, value); } - else if (target.kind === 147 /* ArrayLiteralExpression */) { + else if (target.kind === 147) { emitArrayLiteralAssignment(target, value); } else { @@ -18537,18 +18646,18 @@ var ts; function emitAssignmentExpression(root) { var target = root.left; var value = root.right; - if (root.parent.kind === 173 /* ExpressionStatement */) { + if (root.parent.kind === 173) { emitDestructuringAssignment(target, value); } else { - if (root.parent.kind !== 155 /* ParenthesizedExpression */) { + if (root.parent.kind !== 155) { write("("); } value = ensureIdentifier(value); emitDestructuringAssignment(target, value); write(", "); emit(value); - if (root.parent.kind !== 155 /* ParenthesizedExpression */) { + if (root.parent.kind !== 155) { write(")"); } } @@ -18568,11 +18677,11 @@ var ts; } for (var i = 0; i < elements.length; i++) { var element = elements[i]; - if (pattern.kind === 144 /* ObjectBindingPattern */) { + if (pattern.kind === 144) { var propName = element.propertyName || element.name; emitBindingElement(element, createPropertyAccess(value, propName)); } - else if (element.kind !== 168 /* OmittedExpression */) { + else if (element.kind !== 168) { if (!element.dotDotDotToken) { emitBindingElement(element, createElementAccess(value, createNumericLiteral(i))); } @@ -18593,7 +18702,7 @@ var ts; } function emitVariableDeclaration(node) { if (ts.isBindingPattern(node.name)) { - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { emitDestructuring(node); } else { @@ -18607,7 +18716,7 @@ var ts; } } function emitVariableStatement(node) { - if (!(node.flags & 1 /* Export */)) { + if (!(node.flags & 1)) { if (ts.isLet(node.declarationList)) { write("let "); } @@ -18622,7 +18731,7 @@ var ts; write(";"); } function emitParameter(node) { - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { if (ts.isBindingPattern(node.name)) { var name = createTempVariable(node); if (!tempParameters) { @@ -18644,7 +18753,7 @@ var ts; } } function emitDefaultValueAssignments(node) { - if (languageVersion < 2 /* ES6 */) { + if (languageVersion < 2) { var tempIndex = 0; ts.forEach(node.parameters, function (p) { if (ts.isBindingPattern(p.name)) { @@ -18673,7 +18782,7 @@ var ts; } } function emitRestParameter(node) { - if (languageVersion < 2 /* ES6 */ && ts.hasRestParameters(node)) { + if (languageVersion < 2 && ts.hasRestParameters(node)) { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; var tempName = createTempVariable(node, true).text; @@ -18711,28 +18820,33 @@ var ts; } } function emitAccessor(node) { - write(node.kind === 130 /* GetAccessor */ ? "get " : "set "); + write(node.kind === 130 ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); } + function shouldEmitAsArrowFunction(node) { + return node.kind === 157 && languageVersion >= 2; + } function emitFunctionDeclaration(node) { if (ts.nodeIsMissing(node.body)) { return emitPinnedOrTripleSlashComments(node); } - if (node.kind !== 128 /* MethodDeclaration */ && node.kind !== 127 /* MethodSignature */) { + if (node.kind !== 128 && node.kind !== 127) { emitLeadingComments(node); } - write("function "); - if (node.kind === 190 /* FunctionDeclaration */ || (node.kind === 156 /* FunctionExpression */ && node.name)) { + if (!shouldEmitAsArrowFunction(node)) { + write("function "); + } + if (node.kind === 190 || (node.kind === 156 && node.name)) { emit(node.name); } emitSignatureAndBody(node); - if (node.kind !== 128 /* MethodDeclaration */ && node.kind !== 127 /* MethodSignature */) { + if (node.kind !== 128 && node.kind !== 127) { emitTrailingComments(node); } } function emitCaptureThisForNodeIfNecessary(node) { - if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { + if (resolver.getNodeCheckFlags(node) & 4) { writeLine(); emitStart(node); write("var _this = this;"); @@ -18744,12 +18858,19 @@ var ts; write("("); if (node) { var parameters = node.parameters; - var omitCount = languageVersion < 2 /* ES6 */ && ts.hasRestParameters(node) ? 1 : 0; + var omitCount = languageVersion < 2 && ts.hasRestParameters(node) ? 1 : 0; emitList(parameters, 0, parameters.length - omitCount, false, false); } write(")"); decreaseIndent(); } + function emitSignatureParametersForArrow(node) { + if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) { + emit(node.parameters[0]); + return; + } + emitSignatureParameters(node); + } function emitSignatureAndBody(node) { var saveTempCount = tempCount; var saveTempVariables = tempVariables; @@ -18757,61 +18878,73 @@ var ts; tempCount = 0; tempVariables = undefined; tempParameters = undefined; - emitSignatureParameters(node); - write(" {"); - scopeEmitStart(node); - increaseIndent(); - emitDetachedComments(node.body.kind === 170 /* Block */ ? node.body.statements : node.body); - var startIndex = 0; - if (node.body.kind === 170 /* Block */) { - startIndex = emitDirectivePrologues(node.body.statements, true); - } - var outPos = writer.getTextPos(); - emitCaptureThisForNodeIfNecessary(node); - emitDefaultValueAssignments(node); - emitRestParameter(node); - if (node.body.kind !== 170 /* Block */ && outPos === writer.getTextPos()) { - decreaseIndent(); - write(" "); - emitStart(node.body); - write("return "); - emitNode(node.body, true); - emitEnd(node.body); - write(";"); - emitTempDeclarations(false); - write(" "); - emitStart(node.body); - write("}"); - emitEnd(node.body); + if (shouldEmitAsArrowFunction(node)) { + emitSignatureParametersForArrow(node); + write(" =>"); } else { - if (node.body.kind === 170 /* Block */) { - emitLinesStartingAt(node.body.statements, startIndex); - } - else { - writeLine(); - emitLeadingComments(node.body); - write("return "); - emit(node.body, true); - write(";"); - emitTrailingComments(node.body); - } - emitTempDeclarations(true); + emitSignatureParameters(node); + } + write(" {"); + scopeEmitStart(node); + if (!node.body) { writeLine(); - if (node.body.kind === 170 /* Block */) { - emitLeadingCommentsOfPosition(node.body.statements.end); - decreaseIndent(); - emitToken(15 /* CloseBraceToken */, node.body.statements.end); + write("}"); + } + else { + increaseIndent(); + emitDetachedComments(node.body.kind === 170 ? node.body.statements : node.body); + var startIndex = 0; + if (node.body.kind === 170) { + startIndex = emitDirectivePrologues(node.body.statements, true); } - else { + var outPos = writer.getTextPos(); + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + if (node.body.kind !== 170 && outPos === writer.getTextPos()) { decreaseIndent(); + write(" "); + emitStart(node.body); + write("return "); + emitNode(node.body, true); + emitEnd(node.body); + write(";"); + emitTempDeclarations(false); + write(" "); emitStart(node.body); write("}"); emitEnd(node.body); } + else { + if (node.body.kind === 170) { + emitLinesStartingAt(node.body.statements, startIndex); + } + else { + writeLine(); + emitLeadingComments(node.body); + write("return "); + emit(node.body, true); + write(";"); + emitTrailingComments(node.body); + } + emitTempDeclarations(true); + writeLine(); + if (node.body.kind === 170) { + emitLeadingCommentsOfPosition(node.body.statements.end); + decreaseIndent(); + emitToken(15, node.body.statements.end); + } + else { + decreaseIndent(); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + } } scopeEmitEnd(); - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -18827,11 +18960,11 @@ var ts; function findInitialSuperCall(ctor) { if (ctor.body) { var statement = ctor.body.statements[0]; - if (statement && statement.kind === 173 /* ExpressionStatement */) { + if (statement && statement.kind === 173) { var expr = statement.expression; - if (expr && expr.kind === 151 /* CallExpression */) { + if (expr && expr.kind === 151) { var func = expr.expression; - if (func && func.kind === 90 /* SuperKeyword */) { + if (func && func.kind === 90) { return statement; } } @@ -18840,7 +18973,7 @@ var ts; } function emitParameterPropertyAssignments(node) { ts.forEach(node.parameters, function (param) { - if (param.flags & 112 /* AccessibilityModifier */) { + if (param.flags & 112) { writeLine(); emitStart(param); emitStart(param.name); @@ -18855,12 +18988,12 @@ var ts; }); } function emitMemberAccessForPropertyName(memberName) { - if (memberName.kind === 8 /* StringLiteral */ || memberName.kind === 7 /* NumericLiteral */) { + if (memberName.kind === 8 || memberName.kind === 7) { write("["); emitNode(memberName); write("]"); } - else if (memberName.kind === 122 /* ComputedPropertyName */) { + else if (memberName.kind === 122) { emitComputedPropertyName(memberName); } else { @@ -18870,7 +19003,7 @@ var ts; } function emitMemberAssignments(node, staticFlag) { ts.forEach(node.members, function (member) { - if (member.kind === 126 /* PropertyDeclaration */ && (member.flags & 128 /* Static */) === staticFlag && member.initializer) { + if (member.kind === 126 && (member.flags & 128) === staticFlag && member.initializer) { writeLine(); emitLeadingComments(member); emitStart(member); @@ -18893,7 +19026,7 @@ var ts; } function emitMemberFunctions(node) { ts.forEach(node.members, function (member) { - if (member.kind === 128 /* MethodDeclaration */ || node.kind === 127 /* MethodSignature */) { + if (member.kind === 128 || node.kind === 127) { if (!member.body) { return emitPinnedOrTripleSlashComments(member); } @@ -18902,7 +19035,7 @@ var ts; emitStart(member); emitStart(member.name); emitNode(node.name); - if (!(member.flags & 128 /* Static */)) { + if (!(member.flags & 128)) { write(".prototype"); } emitMemberAccessForPropertyName(member.name); @@ -18915,7 +19048,7 @@ var ts; write(";"); emitTrailingComments(member); } - else if (member.kind === 130 /* GetAccessor */ || member.kind === 131 /* SetAccessor */) { + else if (member.kind === 130 || member.kind === 131) { var accessors = getAllAccessorDeclarations(node, member); if (member === accessors.firstAccessor) { writeLine(); @@ -18923,7 +19056,7 @@ var ts; write("Object.defineProperty("); emitStart(member.name); emitNode(node.name); - if (!(member.flags & 128 /* Static */)) { + if (!(member.flags & 128)) { write(".prototype"); } write(", "); @@ -18987,17 +19120,17 @@ var ts; writeLine(); emitConstructorOfClass(); emitMemberFunctions(node); - emitMemberAssignments(node, 128 /* Static */); + emitMemberAssignments(node, 128); writeLine(); function emitClassReturnStatement() { write("return "); emitNode(node.name); } - emitToken(15 /* CloseBraceToken */, node.members.end, emitClassReturnStatement); + emitToken(15, node.members.end, emitClassReturnStatement); write(";"); decreaseIndent(); writeLine(); - emitToken(15 /* CloseBraceToken */, node.members.end); + emitToken(15, node.members.end); scopeEmitEnd(); emitStart(node); write(")("); @@ -19006,7 +19139,7 @@ var ts; } write(");"); emitEnd(node); - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -19023,7 +19156,7 @@ var ts; tempVariables = undefined; tempParameters = undefined; ts.forEach(node.members, function (member) { - if (member.kind === 129 /* Constructor */ && !member.body) { + if (member.kind === 129 && !member.body) { emitPinnedOrTripleSlashComments(member); } }); @@ -19075,7 +19208,7 @@ var ts; emitLeadingCommentsOfPosition(ctor.body.statements.end); } decreaseIndent(); - emitToken(15 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + emitToken(15, ctor ? ctor.body.statements.end : node.members.end); scopeEmitEnd(); emitEnd(ctor || node); if (ctor) { @@ -19097,7 +19230,7 @@ var ts; if (!shouldEmitEnumDeclaration(node)) { return; } - if (!(node.flags & 1 /* Export */)) { + if (!(node.flags & 1)) { emitStart(node); write("var "); emit(node.name); @@ -19116,7 +19249,7 @@ var ts; emitLines(node.members); decreaseIndent(); writeLine(); - emitToken(15 /* CloseBraceToken */, node.members.end); + emitToken(15, node.members.end); scopeEmitEnd(); write(")("); emitModuleMemberName(node); @@ -19124,7 +19257,7 @@ var ts; emitModuleMemberName(node); write(" = {}));"); emitEnd(node); - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { writeLine(); emitStart(node); write("var "); @@ -19144,19 +19277,29 @@ var ts; write("["); emitExpressionForPropertyName(node.name); write("] = "); - if (node.initializer && !ts.isConst(enumParent)) { - emit(node.initializer); - } - else { - write(resolver.getEnumMemberValue(node).toString()); - } + writeEnumMemberDeclarationValue(node); write("] = "); emitExpressionForPropertyName(node.name); emitEnd(node); write(";"); } + function writeEnumMemberDeclarationValue(member) { + if (!member.initializer || ts.isConst(member.parent)) { + var value = resolver.getConstantValue(member); + if (value !== undefined) { + write(value.toString()); + return; + } + } + if (member.initializer) { + emit(member.initializer); + } + else { + write("undefined"); + } + } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 195 /* ModuleDeclaration */) { + if (moduleDeclaration.body.kind === 195) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -19181,7 +19324,7 @@ var ts; write(resolver.getLocalNameOfContainer(node)); emitEnd(node.name); write(") "); - if (node.body.kind === 196 /* ModuleBlock */) { + if (node.body.kind === 196) { var saveTempCount = tempCount; var saveTempVariables = tempVariables; tempCount = 0; @@ -19200,11 +19343,11 @@ var ts; decreaseIndent(); writeLine(); var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; - emitToken(15 /* CloseBraceToken */, moduleBlock.statements.end); + emitToken(15, moduleBlock.statements.end); scopeEmitEnd(); } write(")("); - if (node.flags & 1 /* Export */) { + if (node.flags & 1) { emit(node.name); write(" = "); } @@ -19220,8 +19363,8 @@ var ts; emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportWithEntityName(node); } if (emitImportDeclaration) { - if (ts.isExternalModuleImportDeclaration(node) && node.parent.kind === 207 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { - if (node.flags & 1 /* Export */) { + if (ts.isExternalModuleImportDeclaration(node) && node.parent.kind === 207 && compilerOptions.module === 2) { + if (node.flags & 1) { writeLine(); emitLeadingComments(node); emitStart(node); @@ -19237,7 +19380,7 @@ var ts; writeLine(); emitLeadingComments(node); emitStart(node); - if (!(node.flags & 1 /* Export */)) + if (!(node.flags & 1)) write("var "); emitModuleMemberName(node); write(" = "); @@ -19250,7 +19393,7 @@ var ts; emitStart(literal); emitLiteral(literal); emitEnd(literal); - emitToken(17 /* CloseParenToken */, literal.end); + emitToken(17, literal.end); } write(";"); emitEnd(node); @@ -19269,7 +19412,7 @@ var ts; } function getFirstExportAssignment(sourceFile) { return ts.forEach(sourceFile.statements, function (node) { - if (node.kind === 198 /* ExportAssignment */) { + if (node.kind === 198) { return node; } }); @@ -19353,7 +19496,7 @@ var ts; writeLine(); emitDetachedComments(node); var startIndex = emitDirectivePrologues(node.statements, false); - if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { + if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8) { writeLine(); write("var __extends = this.__extends || function (d, b) {"); increaseIndent(); @@ -19371,7 +19514,7 @@ var ts; extendsEmitted = true; } if (ts.isExternalModule(node)) { - if (compilerOptions.module === 2 /* AMD */) { + if (compilerOptions.module === 2) { emitAMDModule(node, startIndex); } else { @@ -19389,7 +19532,7 @@ var ts; if (!node) { return; } - if (node.flags & 2 /* Ambient */) { + if (node.flags & 2) { return emitPinnedOrTripleSlashComments(node); } var emitComments = !disableComments && shouldEmitLeadingAndTrailingComments(node); @@ -19403,163 +19546,163 @@ var ts; } function shouldEmitLeadingAndTrailingComments(node) { switch (node.kind) { - case 192 /* InterfaceDeclaration */: - case 190 /* FunctionDeclaration */: - case 197 /* ImportDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 198 /* ExportAssignment */: + case 192: + case 190: + case 197: + case 193: + case 198: return false; - case 195 /* ModuleDeclaration */: + case 195: return shouldEmitModuleDeclaration(node); - case 194 /* EnumDeclaration */: + case 194: return shouldEmitEnumDeclaration(node); } return true; } function emitJavaScriptWorker(node) { switch (node.kind) { - case 64 /* Identifier */: + case 64: return emitIdentifier(node); - case 124 /* Parameter */: + case 124: return emitParameter(node); - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: return emitMethod(node); - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 130: + case 131: return emitAccessor(node); - case 92 /* ThisKeyword */: + case 92: return emitThis(node); - case 90 /* SuperKeyword */: + case 90: return emitSuper(node); - case 88 /* NullKeyword */: + case 88: return write("null"); - case 94 /* TrueKeyword */: + case 94: return write("true"); - case 79 /* FalseKeyword */: + case 79: return write("false"); - case 7 /* NumericLiteral */: - case 8 /* StringLiteral */: - case 9 /* RegularExpressionLiteral */: - case 10 /* NoSubstitutionTemplateLiteral */: - case 11 /* TemplateHead */: - case 12 /* TemplateMiddle */: - case 13 /* TemplateTail */: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: return emitLiteral(node); - case 165 /* TemplateExpression */: + case 165: return emitTemplateExpression(node); - case 169 /* TemplateSpan */: + case 169: return emitTemplateSpan(node); - case 121 /* QualifiedName */: + case 121: return emitQualifiedName(node); - case 144 /* ObjectBindingPattern */: + case 144: return emitObjectBindingPattern(node); - case 145 /* ArrayBindingPattern */: + case 145: return emitArrayBindingPattern(node); - case 146 /* BindingElement */: + case 146: return emitBindingElement(node); - case 147 /* ArrayLiteralExpression */: + case 147: return emitArrayLiteral(node); - case 148 /* ObjectLiteralExpression */: + case 148: return emitObjectLiteral(node); - case 204 /* PropertyAssignment */: + case 204: return emitPropertyAssignment(node); - case 205 /* ShorthandPropertyAssignment */: + case 205: return emitShorthandPropertyAssignment(node); - case 122 /* ComputedPropertyName */: + case 122: return emitComputedPropertyName(node); - case 149 /* PropertyAccessExpression */: + case 149: return emitPropertyAccess(node); - case 150 /* ElementAccessExpression */: + case 150: return emitIndexedAccess(node); - case 151 /* CallExpression */: + case 151: return emitCallExpression(node); - case 152 /* NewExpression */: + case 152: return emitNewExpression(node); - case 153 /* TaggedTemplateExpression */: + case 153: return emitTaggedTemplateExpression(node); - case 154 /* TypeAssertionExpression */: + case 154: return emit(node.expression); - case 155 /* ParenthesizedExpression */: + case 155: return emitParenExpression(node); - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 190: + case 156: + case 157: return emitFunctionDeclaration(node); - case 158 /* DeleteExpression */: + case 158: return emitDeleteExpression(node); - case 159 /* TypeOfExpression */: + case 159: return emitTypeOfExpression(node); - case 160 /* VoidExpression */: + case 160: return emitVoidExpression(node); - case 161 /* PrefixUnaryExpression */: + case 161: return emitPrefixUnaryExpression(node); - case 162 /* PostfixUnaryExpression */: + case 162: return emitPostfixUnaryExpression(node); - case 163 /* BinaryExpression */: + case 163: return emitBinaryExpression(node); - case 164 /* ConditionalExpression */: + case 164: return emitConditionalExpression(node); - case 167 /* SpreadElementExpression */: + case 167: return emitSpreadElementExpression(node); - case 168 /* OmittedExpression */: + case 168: return; - case 170 /* Block */: - case 196 /* ModuleBlock */: + case 170: + case 196: return emitBlock(node); - case 171 /* VariableStatement */: + case 171: return emitVariableStatement(node); - case 172 /* EmptyStatement */: + case 172: return write(";"); - case 173 /* ExpressionStatement */: + case 173: return emitExpressionStatement(node); - case 174 /* IfStatement */: + case 174: return emitIfStatement(node); - case 175 /* DoStatement */: + case 175: return emitDoStatement(node); - case 176 /* WhileStatement */: + case 176: return emitWhileStatement(node); - case 177 /* ForStatement */: + case 177: return emitForStatement(node); - case 178 /* ForInStatement */: + case 178: return emitForInStatement(node); - case 179 /* ContinueStatement */: - case 180 /* BreakStatement */: + case 179: + case 180: return emitBreakOrContinueStatement(node); - case 181 /* ReturnStatement */: + case 181: return emitReturnStatement(node); - case 182 /* WithStatement */: + case 182: return emitWithStatement(node); - case 183 /* SwitchStatement */: + case 183: return emitSwitchStatement(node); - case 200 /* CaseClause */: - case 201 /* DefaultClause */: + case 200: + case 201: return emitCaseOrDefaultClause(node); - case 184 /* LabeledStatement */: + case 184: return emitLabelledStatement(node); - case 185 /* ThrowStatement */: + case 185: return emitThrowStatement(node); - case 186 /* TryStatement */: + case 186: return emitTryStatement(node); - case 203 /* CatchClause */: + case 203: return emitCatchClause(node); - case 187 /* DebuggerStatement */: + case 187: return emitDebuggerStatement(node); - case 188 /* VariableDeclaration */: + case 188: return emitVariableDeclaration(node); - case 191 /* ClassDeclaration */: + case 191: return emitClassDeclaration(node); - case 192 /* InterfaceDeclaration */: + case 192: return emitInterfaceDeclaration(node); - case 194 /* EnumDeclaration */: + case 194: return emitEnumDeclaration(node); - case 206 /* EnumMember */: + case 206: return emitEnumMember(node); - case 195 /* ModuleDeclaration */: + case 195: return emitModuleDeclaration(node); - case 197 /* ImportDeclaration */: + case 197: return emitImportDeclaration(node); - case 207 /* SourceFile */: + case 207: return emitSourceFile(node); } } @@ -19578,7 +19721,7 @@ var ts; } function getLeadingCommentsToEmit(node) { if (node.parent) { - if (node.parent.kind === 207 /* SourceFile */ || node.pos !== node.parent.pos) { + if (node.parent.kind === 207 || node.pos !== node.parent.pos) { var leadingComments; if (hasDetachedComments(node.pos)) { leadingComments = getLeadingCommentsWithoutDetachedComments(); @@ -19597,7 +19740,7 @@ var ts; } function emitTrailingDeclarationComments(node) { if (node.parent) { - if (node.parent.kind === 207 /* SourceFile */ || node.end !== node.parent.end) { + if (node.parent.kind === 207 || node.end !== node.parent.end) { var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, node.end); emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment); } @@ -19650,31 +19793,16 @@ var ts; function emitPinnedOrTripleSlashCommentsOfNode(node) { var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment); function isPinnedOrTripleSlashComment(comment) { - if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) { - return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33 /* exclamation */; + if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) { + return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33; } - else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 /* slash */ && comment.pos + 2 < comment.end && currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 /* slash */ && currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) { + else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 && comment.pos + 2 < comment.end && currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 && currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) { return true; } } emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments); emitComments(currentSourceFile, writer, pinnedComments, true, newLine, writeComment); } - if (compilerOptions.sourceMap) { - initializeEmitterWithSourceMaps(); - } - if (root) { - emit(root); - } - else { - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (!isExternalModuleOrDeclarationFile(sourceFile)) { - emit(sourceFile); - } - }); - } - writeLine(); - writeEmittedFiles(writer.getText(), compilerOptions.emitBOM); } function writeDeclarationFile(jsFilePath, sourceFile) { var emitDeclarationResult = emitDeclarations(host, resolver, diagnostics, jsFilePath, sourceFile); @@ -19692,75 +19820,18 @@ var ts; writeFile(host, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } - var hasSemanticErrors = false; - var isEmitBlocked = false; - if (targetSourceFile === undefined) { - hasSemanticErrors = resolver.hasSemanticErrors(); - isEmitBlocked = host.isEmitBlocked(); - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { - var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js"); - emitFile(jsFilePath, sourceFile); - } - }); - if (compilerOptions.out) { - emitFile(compilerOptions.out); - } - } - else { - if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { - hasSemanticErrors = resolver.hasSemanticErrors(targetSourceFile); - isEmitBlocked = host.isEmitBlocked(targetSourceFile); - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) { - ts.forEach(host.getSourceFiles(), function (sourceFile) { - if (!shouldEmitToOwnFile(sourceFile, compilerOptions)) { - hasSemanticErrors = hasSemanticErrors || resolver.hasSemanticErrors(sourceFile); - isEmitBlocked = isEmitBlocked || host.isEmitBlocked(sourceFile); - } - }); - emitFile(compilerOptions.out); - } - } function emitFile(jsFilePath, sourceFile) { - if (!isEmitBlocked) { - emitJavaScript(jsFilePath, sourceFile); - if (!hasSemanticErrors && compilerOptions.declaration) { - writeDeclarationFile(jsFilePath, sourceFile); - } + emitJavaScript(jsFilePath, sourceFile); + if (compilerOptions.declaration) { + writeDeclarationFile(jsFilePath, sourceFile); } } - diagnostics.sort(ts.compareDiagnostics); - diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); - var hasEmitterError = ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1 /* Error */; }); - var emitResultStatus; - if (isEmitBlocked) { - emitResultStatus = 1 /* AllOutputGenerationSkipped */; - } - else if (hasEmitterError) { - emitResultStatus = 4 /* EmitErrorsEncountered */; - } - else if (hasSemanticErrors && compilerOptions.declaration) { - emitResultStatus = 3 /* DeclarationGenerationSkipped */; - } - else if (hasSemanticErrors && !compilerOptions.declaration) { - emitResultStatus = 2 /* JSGeneratedWithSemanticErrors */; - } - else { - emitResultStatus = 0 /* Succeeded */; - } - return { - emitResultStatus: emitResultStatus, - diagnostics: diagnostics, - sourceMaps: sourceMapDataList - }; } ts.emitFiles = emitFiles; })(ts || (ts = {})); var ts; (function (ts) { + ts.emitTime = 0; function createCompilerHost(options) { var currentDirectory; var existingDirectories = {}; @@ -19768,9 +19839,9 @@ var ts; return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } var unsupportedFileEncodingErrorCode = -2147024809; - function getSourceFile(filename, languageVersion, onError) { + function getSourceFile(fileName, languageVersion, onError) { try { - var text = ts.sys.readFile(filename, options.charset); + var text = ts.sys.readFile(fileName, options.charset); } catch (e) { if (onError) { @@ -19778,7 +19849,7 @@ var ts; } text = ""; } - return text !== undefined ? ts.createSourceFile(filename, text, languageVersion) : undefined; + return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined; } function writeFile(fileName, data, writeByteOrderMark, onError) { function directoryExists(directoryPath) { @@ -19810,7 +19881,7 @@ var ts; } return { getSourceFile: getSourceFile, - getDefaultLibFilename: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), options.target === 2 /* ES6 */ ? "lib.es6.d.ts" : "lib.d.ts"); }, + getDefaultLibFileName: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), ts.getDefaultLibFileName(options)); }, writeFile: writeFile, getCurrentDirectory: function () { return currentDirectory || (currentDirectory = ts.sys.getCurrentDirectory()); }, useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; }, @@ -19819,142 +19890,202 @@ var ts; }; } ts.createCompilerHost = createCompilerHost; + function getPreEmitDiagnostics(program) { + var diagnostics = program.getSyntacticDiagnostics().concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(diagnostics); + } + ts.getPreEmitDiagnostics = getPreEmitDiagnostics; + function flattenDiagnosticMessageText(messageText, newLine) { + if (typeof messageText === "string") { + return messageText; + } + else { + var diagnosticChain = messageText; + var result = ""; + var indent = 0; + while (diagnosticChain) { + if (indent) { + result += newLine; + for (var i = 0; i < indent; i++) { + result += " "; + } + } + result += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + return result; + } + } + ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText; function createProgram(rootNames, options, host) { var program; var files = []; var filesByName = {}; - var errors = []; + var diagnostics = ts.createDiagnosticCollection(); var seenNoDefaultLib = options.noLib; var commonSourceDirectory; + host = host || createCompilerHost(options); ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); if (!seenNoDefaultLib) { - processRootFile(host.getDefaultLibFilename(options), true); + processRootFile(host.getDefaultLibFileName(options), true); } verifyCompilerOptions(); - errors.sort(ts.compareDiagnostics); var diagnosticsProducingTypeChecker; var noDiagnosticsTypeChecker; - var emitHost; program = { getSourceFile: getSourceFile, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, - getCompilerHost: function () { return host; }, - getDiagnostics: getDiagnostics, + getSyntacticDiagnostics: getSyntacticDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, + getSemanticDiagnostics: getSemanticDiagnostics, getDeclarationDiagnostics: getDeclarationDiagnostics, getTypeChecker: getTypeChecker, + getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: function () { return commonSourceDirectory; }, - emitFiles: invokeEmitter, - isEmitBlocked: isEmitBlocked, - getCurrentDirectory: host.getCurrentDirectory + emit: emit, + getCurrentDirectory: host.getCurrentDirectory, + getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); }, + getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); }, + getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, + getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); } }; return program; - function getEmitHost() { - return emitHost || (emitHost = ts.createEmitHostFromProgram(program)); - } - function hasEarlyErrors(sourceFile) { - return ts.forEach(getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile), function (d) { return d.isEarly; }); - } - function isEmitBlocked(sourceFile) { - return getDiagnostics(sourceFile).length !== 0 || hasEarlyErrors(sourceFile) || (options.noEmitOnError && getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile).length !== 0); + function getEmitHost(writeFileCallback) { + return { + getCanonicalFileName: host.getCanonicalFileName, + getCommonSourceDirectory: program.getCommonSourceDirectory, + getCompilerOptions: program.getCompilerOptions, + getCurrentDirectory: host.getCurrentDirectory, + getNewLine: host.getNewLine, + getSourceFile: program.getSourceFile, + getSourceFiles: program.getSourceFiles, + writeFile: writeFileCallback || host.writeFile + }; } function getDiagnosticsProducingTypeChecker() { return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true)); } - function getTypeChecker(produceDiagnostics) { - if (produceDiagnostics) { - return getDiagnosticsProducingTypeChecker(); - } - else { - return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, produceDiagnostics)); - } + function getTypeChecker() { + return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false)); } function getDeclarationDiagnostics(targetSourceFile) { - var typeChecker = getDiagnosticsProducingTypeChecker(); - typeChecker.getDiagnostics(targetSourceFile); - var resolver = typeChecker.getEmitResolver(); + var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(targetSourceFile); return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile); } - function invokeEmitter(targetSourceFile) { - var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(); - return ts.emitFiles(resolver, getEmitHost(), targetSourceFile); + function emit(sourceFile, writeFileCallback) { + if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) { + return { diagnostics: [], sourceMaps: undefined, emitSkipped: true }; + } + var start = new Date().getTime(); + var emitResult = ts.emitFiles(getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile), getEmitHost(writeFileCallback), sourceFile); + ts.emitTime += new Date().getTime() - start; + return emitResult; } - function getSourceFile(filename) { - filename = host.getCanonicalFileName(filename); - return ts.hasProperty(filesByName, filename) ? filesByName[filename] : undefined; + function getSourceFile(fileName) { + fileName = host.getCanonicalFileName(fileName); + return ts.hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined; } - function getDiagnostics(sourceFile) { - return sourceFile ? ts.filter(errors, function (e) { return e.file === sourceFile; }) : errors; + function getDiagnosticsHelper(sourceFile, getDiagnostics) { + if (sourceFile) { + return getDiagnostics(sourceFile); + } + var allDiagnostics = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + ts.addRange(allDiagnostics, getDiagnostics(sourceFile)); + }); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function getSyntacticDiagnostics(sourceFile) { + return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile); + } + function getSemanticDiagnostics(sourceFile) { + return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile); + } + function getSyntacticDiagnosticsForFile(sourceFile) { + return sourceFile.parseDiagnostics; + } + function getSemanticDiagnosticsForFile(sourceFile) { + var typeChecker = getDiagnosticsProducingTypeChecker(); + ts.Debug.assert(!!sourceFile.bindDiagnostics); + var bindDiagnostics = sourceFile.bindDiagnostics; + var checkDiagnostics = typeChecker.getDiagnostics(sourceFile); + var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics); } function getGlobalDiagnostics() { - return ts.filter(errors, function (e) { return !e.file; }); + var typeChecker = getDiagnosticsProducingTypeChecker(); + var allDiagnostics = []; + ts.addRange(allDiagnostics, typeChecker.getGlobalDiagnostics()); + ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); } - function hasExtension(filename) { - return ts.getBaseFilename(filename).indexOf(".") >= 0; + function hasExtension(fileName) { + return ts.getBaseFileName(fileName).indexOf(".") >= 0; } - function processRootFile(filename, isDefaultLib) { - processSourceFile(ts.normalizePath(filename), isDefaultLib); + function processRootFile(fileName, isDefaultLib) { + processSourceFile(ts.normalizePath(fileName), isDefaultLib); } - function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) { + function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) { if (refEnd !== undefined && refPos !== undefined) { var start = refPos; var length = refEnd - refPos; } var diagnostic; - if (hasExtension(filename)) { - if (!options.allowNonTsExtensions && !ts.fileExtensionIs(filename, ".ts")) { + if (hasExtension(fileName)) { + if (!options.allowNonTsExtensions && !ts.fileExtensionIs(host.getCanonicalFileName(fileName), ".ts")) { diagnostic = ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts; } - else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + 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)) { + else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) { diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself; } } else { - if (options.allowNonTsExtensions && !findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + if (options.allowNonTsExtensions && !findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; } - else if (!findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) { + else if (!findSourceFile(fileName + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(fileName + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) { diagnostic = ts.Diagnostics.File_0_not_found; - filename += ".ts"; + fileName += ".ts"; } } if (diagnostic) { if (refFile) { - errors.push(ts.createFileDiagnostic(refFile, start, length, diagnostic, filename)); + diagnostics.add(ts.createFileDiagnostic(refFile, start, length, diagnostic, fileName)); } else { - errors.push(ts.createCompilerDiagnostic(diagnostic, filename)); + diagnostics.add(ts.createCompilerDiagnostic(diagnostic, fileName)); } } } - function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) { - var canonicalName = host.getCanonicalFileName(filename); + function findSourceFile(fileName, isDefaultLib, refFile, refStart, refLength) { + var canonicalName = host.getCanonicalFileName(fileName); if (ts.hasProperty(filesByName, canonicalName)) { - return getSourceFileFromCache(filename, canonicalName, false); + return getSourceFileFromCache(fileName, canonicalName, false); } else { - var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(filename, host.getCurrentDirectory()); + var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath); if (ts.hasProperty(filesByName, canonicalAbsolutePath)) { return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, true); } - var file = filesByName[canonicalName] = host.getSourceFile(filename, options.target, function (hostErrorMessage) { + var file = filesByName[canonicalName] = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { if (refFile) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } else { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } }); if (file) { seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; filesByName[canonicalAbsolutePath] = file; if (!options.noResolve) { - var basePath = ts.getDirectoryPath(filename); + var basePath = ts.getDirectoryPath(fileName); processReferencedFiles(file, basePath); processImportedModules(file, basePath); } @@ -19964,18 +20095,15 @@ var ts; else { files.push(file); } - ts.forEach(file.getSyntacticDiagnostics(), function (e) { - errors.push(e); - }); } } return file; - function getSourceFileFromCache(filename, canonicalName, useAbsolutePath) { + function getSourceFileFromCache(fileName, canonicalName, useAbsolutePath) { var file = filesByName[canonicalName]; if (file && host.useCaseSensitiveFileNames()) { - var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.filename, host.getCurrentDirectory()) : file.filename; + var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName; if (canonicalName !== sourceFileName) { - errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, sourceFileName)); + diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName)); } } return file; @@ -19983,13 +20111,13 @@ var ts; } function processReferencedFiles(file, basePath) { ts.forEach(file.referencedFiles, function (ref) { - var referencedFilename = ts.isRootedDiskPath(ref.filename) ? ref.filename : ts.combinePaths(basePath, ref.filename); - processSourceFile(ts.normalizePath(referencedFilename), 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) { ts.forEach(file.statements, function (node) { - if (ts.isExternalModuleImportDeclaration(node) && ts.getExternalModuleImportDeclarationExpression(node).kind === 8 /* StringLiteral */) { + if (ts.isExternalModuleImportDeclaration(node) && ts.getExternalModuleImportDeclarationExpression(node).kind === 8) { var nameLiteral = ts.getExternalModuleImportDeclarationExpression(node); var moduleName = nameLiteral.text; if (moduleName) { @@ -20007,9 +20135,9 @@ var ts; } } } - else if (node.kind === 195 /* ModuleDeclaration */ && node.name.kind === 8 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || ts.isDeclarationFile(file))) { + else if (node.kind === 195 && node.name.kind === 8 && (node.flags & 2 || ts.isDeclarationFile(file))) { ts.forEachChild(node.body, function (node) { - if (ts.isExternalModuleImportDeclaration(node) && ts.getExternalModuleImportDeclarationExpression(node).kind === 8 /* StringLiteral */) { + if (ts.isExternalModuleImportDeclaration(node) && ts.getExternalModuleImportDeclarationExpression(node).kind === 8) { var nameLiteral = ts.getExternalModuleImportDeclarationExpression(node); var moduleName = nameLiteral.text; if (moduleName) { @@ -20023,17 +20151,17 @@ var ts; }); } }); - function findModuleSourceFile(filename, nameLiteral) { - return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); + function findModuleSourceFile(fileName, nameLiteral) { + return findSourceFile(fileName, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); } } function verifyCompilerOptions() { if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { if (options.mapRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); } if (options.sourceRoot) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); } return; } @@ -20042,19 +20170,19 @@ var ts; var externalModuleErrorSpan = ts.getErrorSpanForNode(firstExternalModule.externalModuleIndicator); var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); var errorLength = externalModuleErrorSpan.end - errorStart; - errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); + diagnostics.add(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); } if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) { var commonPathComponents; ts.forEach(files, function (sourceFile) { - if (!(sourceFile.flags & 1024 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { - var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory()); + if (!(sourceFile.flags & 1024) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) { + var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.fileName, host.getCurrentDirectory()); sourcePathComponents.pop(); if (commonPathComponents) { for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathComponents.length); i++) { if (commonPathComponents[i] !== sourcePathComponents[i]) { if (i === 0) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); return; } commonPathComponents.length = i; @@ -20077,10 +20205,10 @@ var ts; } if (options.noEmit) { if (options.out || options.outDir) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir)); } if (options.declaration) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration)); } } } @@ -20137,8 +20265,8 @@ var ts; name: "module", shortName: "m", type: { - "commonjs": 1 /* CommonJS */, - "amd": 2 /* AMD */ + "commonjs": 1, + "amd": 2 }, description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_or_amd, paramType: ts.Diagnostics.KIND, @@ -20219,10 +20347,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures }, + { + name: "stripInternal", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation, + experimental: true + }, { name: "target", shortName: "t", - type: { "es3": 0 /* ES3 */, "es5": 1 /* ES5 */, "es6": 2 /* ES6 */ }, + type: { "es3": 0, "es5": 1, "es6": 2 }, description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental, paramType: ts.Diagnostics.VERSION, error: ts.Diagnostics.Argument_for_target_option_must_be_es3_es5_or_es6 @@ -20242,7 +20376,7 @@ var ts; ]; function parseCommandLine(commandLine) { var options = {}; - var filenames = []; + var fileNames = []; var errors = []; var shortOptionNames = {}; var optionNameMap = {}; @@ -20255,18 +20389,18 @@ var ts; parseStrings(commandLine); return { options: options, - filenames: filenames, + fileNames: fileNames, errors: errors }; function parseStrings(args) { var i = 0; while (i < args.length) { var s = args[i++]; - if (s.charCodeAt(0) === 64 /* at */) { + if (s.charCodeAt(0) === 64) { parseResponseFile(s.slice(1)); } - else if (s.charCodeAt(0) === 45 /* minus */) { - s = s.slice(s.charCodeAt(1) === 45 /* minus */ ? 2 : 1).toLowerCase(); + else if (s.charCodeAt(0) === 45) { + s = s.slice(s.charCodeAt(1) === 45 ? 2 : 1).toLowerCase(); if (ts.hasProperty(shortOptionNames, s)) { s = shortOptionNames[s]; } @@ -20301,38 +20435,38 @@ var ts; } } else { - filenames.push(s); + fileNames.push(s); } } } - function parseResponseFile(filename) { - var text = ts.sys.readFile(filename); + function parseResponseFile(fileName) { + var text = ts.sys.readFile(fileName); if (!text) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, filename)); + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName)); return; } var args = []; var pos = 0; while (true) { - while (pos < text.length && text.charCodeAt(pos) <= 32 /* space */) + while (pos < text.length && text.charCodeAt(pos) <= 32) pos++; if (pos >= text.length) break; var start = pos; - if (text.charCodeAt(start) === 34 /* doubleQuote */) { + if (text.charCodeAt(start) === 34) { pos++; - while (pos < text.length && text.charCodeAt(pos) !== 34 /* doubleQuote */) + while (pos < text.length && text.charCodeAt(pos) !== 34) pos++; if (pos < text.length) { args.push(text.substring(start + 1, pos)); pos++; } else { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, filename)); + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName)); } } else { - while (text.charCodeAt(pos) > 32 /* space */) + while (text.charCodeAt(pos) > 32) pos++; args.push(text.substring(start, pos)); } @@ -20341,9 +20475,9 @@ var ts; } } ts.parseCommandLine = parseCommandLine; - function readConfigFile(filename) { + function readConfigFile(fileName) { try { - var text = ts.sys.readFile(filename); + var text = ts.sys.readFile(fileName); return /\S/.test(text) ? JSON.parse(text) : {}; } catch (e) { @@ -20354,7 +20488,7 @@ var ts; var errors = []; return { options: getCompilerOptions(), - filenames: getFiles(), + fileNames: getFiles(), errors: errors }; function getCompilerOptions() { @@ -20439,10 +20573,10 @@ var ts; } function autoCollapse(node) { switch (node.kind) { - case 196 /* ModuleBlock */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: + case 196: + case 191: + case 192: + case 194: return false; } return true; @@ -20454,23 +20588,23 @@ var ts; return; } switch (n.kind) { - case 170 /* Block */: + case 170: if (!ts.isFunctionBlock(n)) { var parent = n.parent; - var openBrace = ts.findChildOfKind(n, 14 /* OpenBraceToken */, sourceFile); - var closeBrace = ts.findChildOfKind(n, 15 /* CloseBraceToken */, sourceFile); - if (parent.kind === 175 /* DoStatement */ || parent.kind === 178 /* ForInStatement */ || parent.kind === 177 /* ForStatement */ || parent.kind === 174 /* IfStatement */ || parent.kind === 176 /* WhileStatement */ || parent.kind === 182 /* WithStatement */ || parent.kind === 203 /* CatchClause */) { + var openBrace = ts.findChildOfKind(n, 14, sourceFile); + var closeBrace = ts.findChildOfKind(n, 15, sourceFile); + if (parent.kind === 175 || parent.kind === 178 || parent.kind === 177 || parent.kind === 174 || parent.kind === 176 || parent.kind === 182 || parent.kind === 203) { addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent.kind === 186 /* TryStatement */) { + if (parent.kind === 186) { var tryStatement = parent; if (tryStatement.tryBlock === n) { addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { - var finallyKeyword = ts.findChildOfKind(tryStatement, 80 /* FinallyKeyword */, sourceFile); + var finallyKeyword = ts.findChildOfKind(tryStatement, 80, sourceFile); if (finallyKeyword) { addOutliningSpan(finallyKeyword, openBrace, closeBrace, autoCollapse(n)); break; @@ -20486,23 +20620,23 @@ var ts; }); break; } - case 196 /* ModuleBlock */: - var openBrace = ts.findChildOfKind(n, 14 /* OpenBraceToken */, sourceFile); - var closeBrace = ts.findChildOfKind(n, 15 /* CloseBraceToken */, sourceFile); + case 196: + var openBrace = ts.findChildOfKind(n, 14, sourceFile); + var closeBrace = ts.findChildOfKind(n, 15, sourceFile); addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 148 /* ObjectLiteralExpression */: - case 183 /* SwitchStatement */: - var openBrace = ts.findChildOfKind(n, 14 /* OpenBraceToken */, sourceFile); - var closeBrace = ts.findChildOfKind(n, 15 /* CloseBraceToken */, sourceFile); + case 191: + case 192: + case 194: + case 148: + case 183: + var openBrace = ts.findChildOfKind(n, 14, sourceFile); + var closeBrace = ts.findChildOfKind(n, 15, sourceFile); addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; - case 147 /* ArrayLiteralExpression */: - var openBracket = ts.findChildOfKind(n, 18 /* OpenBracketToken */, sourceFile); - var closeBracket = ts.findChildOfKind(n, 19 /* CloseBracketToken */, sourceFile); + case 147: + var openBracket = ts.findChildOfKind(n, 18, sourceFile); + var closeBracket = ts.findChildOfKind(n, 19, sourceFile); addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); break; } @@ -20528,14 +20662,14 @@ var ts; var current = node.parent; while (current) { switch (current.kind) { - case 195 /* ModuleDeclaration */: + case 195: do { current = current.parent; - } while (current.kind === 195 /* ModuleDeclaration */); - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - case 192 /* InterfaceDeclaration */: - case 190 /* FunctionDeclaration */: + } while (current.kind === 195); + case 191: + case 194: + case 192: + case 190: indent++; } current = current.parent; @@ -20546,24 +20680,24 @@ var ts; var childNodes = []; function visit(node) { switch (node.kind) { - case 171 /* VariableStatement */: + case 171: ts.forEach(node.declarationList.declarations, visit); break; - case 144 /* ObjectBindingPattern */: - case 145 /* ArrayBindingPattern */: + case 144: + case 145: ts.forEach(node.elements, visit); break; - case 146 /* BindingElement */: - case 188 /* VariableDeclaration */: + case 146: + case 188: if (ts.isBindingPattern(node.name)) { visit(node.name); break; } - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - case 192 /* InterfaceDeclaration */: - case 195 /* ModuleDeclaration */: - case 190 /* FunctionDeclaration */: + case 191: + case 194: + case 192: + case 195: + case 190: childNodes.push(node); } } @@ -20597,17 +20731,17 @@ var ts; for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; switch (node.kind) { - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - case 192 /* InterfaceDeclaration */: + case 191: + case 194: + case 192: topLevelNodes.push(node); break; - case 195 /* ModuleDeclaration */: + case 195: var moduleDeclaration = node; topLevelNodes.push(node); addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); break; - case 190 /* FunctionDeclaration */: + case 190: var functionDeclaration = node; if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); @@ -20618,9 +20752,9 @@ var ts; } } function isTopLevelFunctionDeclaration(functionDeclaration) { - if (functionDeclaration.kind === 190 /* FunctionDeclaration */) { - if (functionDeclaration.body && functionDeclaration.body.kind === 170 /* Block */) { - if (ts.forEach(functionDeclaration.body.statements, function (s) { return s.kind === 190 /* FunctionDeclaration */ && !isEmpty(s.name.text); })) { + if (functionDeclaration.kind === 190) { + if (functionDeclaration.body && functionDeclaration.body.kind === 170) { + if (ts.forEach(functionDeclaration.body.statements, function (s) { return s.kind === 190 && !isEmpty(s.name.text); })) { return true; } if (!ts.isFunctionBlock(functionDeclaration.parent)) { @@ -20673,42 +20807,42 @@ var ts; } function createChildItem(node) { switch (node.kind) { - case 124 /* Parameter */: + case 124: if (ts.isBindingPattern(node.name)) { break; } - if ((node.flags & 243 /* Modifier */) === 0) { + if ((node.flags & 243) === 0) { return undefined; } return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 130 /* GetAccessor */: + case 130: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); - case 131 /* SetAccessor */: + case 131: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 134 /* IndexSignature */: + case 134: return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 206 /* EnumMember */: + case 206: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 132 /* CallSignature */: + case 132: return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 133 /* ConstructSignature */: + case 133: return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 126: + case 125: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 190 /* FunctionDeclaration */: + case 190: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: + case 188: + case 146: var variableDeclarationNode; var name; - if (node.kind === 146 /* BindingElement */) { + if (node.kind === 146) { name = node.name; variableDeclarationNode = node; - while (variableDeclarationNode && variableDeclarationNode.kind !== 188 /* VariableDeclaration */) { + while (variableDeclarationNode && variableDeclarationNode.kind !== 188) { variableDeclarationNode = variableDeclarationNode.parent; } ts.Debug.assert(variableDeclarationNode !== undefined); @@ -20727,7 +20861,7 @@ var ts; else { return createItem(node, getTextOfNode(name), ts.ScriptElementKind.variableElement); } - case 129 /* Constructor */: + case 129: return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); } return undefined; @@ -20757,27 +20891,27 @@ var ts; } function createTopLevelItem(node) { switch (node.kind) { - case 207 /* SourceFile */: + case 207: return createSourceFileItem(node); - case 191 /* ClassDeclaration */: + case 191: return createClassItem(node); - case 194 /* EnumDeclaration */: + case 194: return createEnumItem(node); - case 192 /* InterfaceDeclaration */: + case 192: return createIterfaceItem(node); - case 195 /* ModuleDeclaration */: + case 195: return createModuleItem(node); - case 190 /* FunctionDeclaration */: + case 190: return createFunctionItem(node); } return undefined; function getModuleName(moduleDeclaration) { - if (moduleDeclaration.name.kind === 8 /* StringLiteral */) { + if (moduleDeclaration.name.kind === 8) { return getTextOfNode(moduleDeclaration.name); } var result = []; result.push(moduleDeclaration.name.text); - while (moduleDeclaration.body && moduleDeclaration.body.kind === 195 /* ModuleDeclaration */) { + while (moduleDeclaration.body && moduleDeclaration.body.kind === 195) { moduleDeclaration = moduleDeclaration.body; result.push(moduleDeclaration.name.text); } @@ -20789,7 +20923,7 @@ var ts; return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } function createFunctionItem(node) { - if (node.name && node.body && node.body.kind === 170 /* Block */) { + if (node.name && node.body && node.body.kind === 170) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } @@ -20801,14 +20935,14 @@ var ts; return undefined; } hasGlobalNode = true; - var rootName = ts.isExternalModule(node) ? "\"" + ts.escapeString(ts.getBaseFilename(ts.removeFileExtension(ts.normalizePath(node.filename)))) + "\"" : ""; + 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 === 129 /* Constructor */ && member; + return member.kind === 129 && member; }); var nodes = removeComputedProperties(node); if (constructor) { @@ -20828,16 +20962,16 @@ var ts; } } function removeComputedProperties(node) { - return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 122 /* ComputedPropertyName */; }); + return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 122; }); } function getInnermostModule(node) { - while (node.body.kind === 195 /* ModuleDeclaration */) { + while (node.body.kind === 195) { node = node.body; } return node; } function getNodeSpan(node) { - return node.kind === 207 /* SourceFile */ ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); + return node.kind === 207 ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } function getTextOfNode(node) { return ts.getTextOfNodeFromSourceText(sourceFile.text, node); @@ -20876,14 +21010,14 @@ var ts; } return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); function getImmediatelyContainingArgumentInfo(node) { - if (node.parent.kind === 151 /* CallExpression */ || node.parent.kind === 152 /* NewExpression */) { + if (node.parent.kind === 151 || node.parent.kind === 152) { var callExpression = node.parent; - if (node.kind === 24 /* LessThanToken */ || node.kind === 16 /* OpenParenToken */) { + if (node.kind === 24 || node.kind === 16) { var list = getChildListThatStartsWithOpenerToken(callExpression, node, sourceFile); var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; ts.Debug.assert(list !== undefined); return { - kind: isTypeArgList ? 0 /* TypeArguments */ : 1 /* CallArguments */, + kind: isTypeArgList ? 0 : 1, invocation: callExpression, argumentsSpan: getApplicableSpanForArguments(list), argumentIndex: 0, @@ -20896,7 +21030,7 @@ var ts; var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; var argumentIndex = (listItemInfo.listItemIndex + 1) >> 1; return { - kind: isTypeArgList ? 0 /* TypeArguments */ : 1 /* CallArguments */, + kind: isTypeArgList ? 0 : 1, invocation: callExpression, argumentsSpan: getApplicableSpanForArguments(list), argumentIndex: argumentIndex, @@ -20904,24 +21038,24 @@ var ts; }; } } - else if (node.kind === 10 /* NoSubstitutionTemplateLiteral */ && node.parent.kind === 153 /* TaggedTemplateExpression */) { + else if (node.kind === 10 && node.parent.kind === 153) { if (ts.isInsideTemplateLiteral(node, position)) { return getArgumentListInfoForTemplate(node.parent, 0); } } - else if (node.kind === 11 /* TemplateHead */ && node.parent.parent.kind === 153 /* TaggedTemplateExpression */) { + else if (node.kind === 11 && node.parent.parent.kind === 153) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 165 /* TemplateExpression */); + ts.Debug.assert(templateExpression.kind === 165); var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } - else if (node.parent.kind === 169 /* TemplateSpan */ && node.parent.parent.parent.kind === 153 /* TaggedTemplateExpression */) { + else if (node.parent.kind === 169 && node.parent.parent.parent.kind === 153) { var templateSpan = node.parent; var templateExpression = templateSpan.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 165 /* TemplateExpression */); - if (node.kind === 13 /* TemplateTail */ && position >= node.getEnd() && !node.isUnterminated) { + ts.Debug.assert(templateExpression.kind === 165); + if (node.kind === 13 && position >= node.getEnd() && !node.isUnterminated) { return undefined; } var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); @@ -20931,7 +21065,7 @@ var ts; return undefined; } function getCommaBasedArgCount(argumentsList) { - return argumentsList.getChildCount() === 0 ? 0 : 1 + ts.countWhere(argumentsList.getChildren(), function (arg) { return arg.kind === 23 /* CommaToken */; }); + return argumentsList.getChildCount() === 0 ? 0 : 1 + ts.countWhere(argumentsList.getChildren(), function (arg) { return arg.kind === 23; }); } function getArgumentIndexForTemplatePiece(spanIndex, node) { ts.Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); @@ -20944,9 +21078,9 @@ var ts; return spanIndex + 1; } function getArgumentListInfoForTemplate(tagExpression, argumentIndex) { - var argumentCount = tagExpression.template.kind === 10 /* NoSubstitutionTemplateLiteral */ ? 1 : tagExpression.template.templateSpans.length + 1; + var argumentCount = tagExpression.template.kind === 10 ? 1 : tagExpression.template.templateSpans.length + 1; return { - kind: 2 /* TaggedTemplateArguments */, + kind: 2, invocation: tagExpression, argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression), argumentIndex: argumentIndex, @@ -20962,7 +21096,7 @@ var ts; var template = taggedTemplate.template; var applicableSpanStart = template.getStart(); var applicableSpanEnd = template.getEnd(); - if (template.kind === 165 /* TemplateExpression */) { + if (template.kind === 165) { var lastSpan = ts.lastOrUndefined(template.templateSpans); if (lastSpan.literal.getFullWidth() === 0) { applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, false); @@ -20971,7 +21105,7 @@ var ts; return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getContainingArgumentInfo(node) { - for (var n = node; n.kind !== 207 /* SourceFile */; n = n.parent) { + for (var n = node; n.kind !== 207; n = n.parent) { if (ts.isFunctionBlock(n)) { return undefined; } @@ -21008,7 +21142,7 @@ var ts; } function createSignatureHelpItems(candidates, bestSignature, argumentListInfo) { var applicableSpan = argumentListInfo.argumentsSpan; - var isTypeParameterList = argumentListInfo.kind === 0 /* TypeArguments */; + var isTypeParameterList = argumentListInfo.kind === 0; var invocation = argumentListInfo.invocation; var callTarget = ts.getInvokedExpression(invocation); var callTargetSymbol = typeInfoResolver.getSymbolAtLocation(callTarget); @@ -21021,20 +21155,20 @@ var ts; prefixDisplayParts.push.apply(prefixDisplayParts, callTargetDisplayParts); } if (isTypeParameterList) { - prefixDisplayParts.push(ts.punctuationPart(24 /* LessThanToken */)); + prefixDisplayParts.push(ts.punctuationPart(24)); var typeParameters = candidateSignature.typeParameters; signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; - suffixDisplayParts.push(ts.punctuationPart(25 /* GreaterThanToken */)); + suffixDisplayParts.push(ts.punctuationPart(25)); var parameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.parameters, writer, invocation); }); suffixDisplayParts.push.apply(suffixDisplayParts, parameterParts); } else { var typeParameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation); }); prefixDisplayParts.push.apply(prefixDisplayParts, typeParameterParts); - prefixDisplayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); + prefixDisplayParts.push(ts.punctuationPart(16)); var parameters = candidateSignature.parameters; signatureHelpParameters = parameters.length > 0 ? ts.map(parameters, createSignatureHelpParameterForParameter) : emptyArray; - suffixDisplayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + suffixDisplayParts.push(ts.punctuationPart(17)); } var returnTypeParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, invocation); }); suffixDisplayParts.push.apply(suffixDisplayParts, returnTypeParts); @@ -21042,7 +21176,7 @@ var ts; isVariadic: candidateSignature.hasRestParameter, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, - separatorDisplayParts: [ts.punctuationPart(23 /* CommaToken */), ts.spacePart()], + separatorDisplayParts: [ts.punctuationPart(23), ts.spacePart()], parameters: signatureHelpParameters, documentation: candidateSignature.getDocumentationComment() }; @@ -21156,7 +21290,7 @@ var ts; ts.findChildOfKind = findChildOfKind; function findContainingList(node) { var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { - if (c.kind === 208 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { + if (c.kind === 208 && c.pos <= node.pos && c.end >= node.end) { return c; } }); @@ -21190,7 +21324,7 @@ var ts; var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile); if (start <= position) { var end = child.getEnd(); - if (position < end || (position === end && child.kind === 1 /* EndOfFileToken */)) { + if (position < end || (position === end && child.kind === 1)) { current = child; continue outer; } @@ -21260,7 +21394,7 @@ var ts; } } } - ts.Debug.assert(startNode !== undefined || n.kind === 207 /* SourceFile */); + ts.Debug.assert(startNode !== undefined || n.kind === 207); if (children.length) { var candidate = findRightmostChildNodeWithTokens(children, children.length); return candidate && findRightmostToken(candidate); @@ -21281,15 +21415,15 @@ var ts; function getNodeModifiers(node) { var flags = ts.getCombinedNodeFlags(node); var result = []; - if (flags & 32 /* Private */) + if (flags & 32) result.push(ts.ScriptElementKindModifier.privateMemberModifier); - if (flags & 64 /* Protected */) + if (flags & 64) result.push(ts.ScriptElementKindModifier.protectedMemberModifier); - if (flags & 16 /* Public */) + if (flags & 16) result.push(ts.ScriptElementKindModifier.publicMemberModifier); - if (flags & 128 /* Static */) + if (flags & 128) result.push(ts.ScriptElementKindModifier.staticModifier); - if (flags & 1 /* Export */) + if (flags & 1) result.push(ts.ScriptElementKindModifier.exportedModifier); if (ts.isInAmbientContext(node)) result.push(ts.ScriptElementKindModifier.ambientModifier); @@ -21297,31 +21431,31 @@ var ts; } ts.getNodeModifiers = getNodeModifiers; function getTypeArgumentOrTypeParameterList(node) { - if (node.kind === 135 /* TypeReference */ || node.kind === 151 /* CallExpression */) { + if (node.kind === 135 || node.kind === 151) { return node.typeArguments; } - if (ts.isAnyFunction(node) || node.kind === 191 /* ClassDeclaration */ || node.kind === 192 /* InterfaceDeclaration */) { + if (ts.isAnyFunction(node) || node.kind === 191 || node.kind === 192) { return node.typeParameters; } return undefined; } ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; function isToken(n) { - return n.kind >= 0 /* FirstToken */ && n.kind <= 120 /* LastToken */; + return n.kind >= 0 && n.kind <= 120; } ts.isToken = isToken; function isWord(kind) { - return kind === 64 /* Identifier */ || ts.isKeyword(kind); + return kind === 64 || ts.isKeyword(kind); } function isPropertyName(kind) { - return kind === 8 /* StringLiteral */ || kind === 7 /* NumericLiteral */ || isWord(kind); + return kind === 8 || kind === 7 || isWord(kind); } function isComment(kind) { - return kind === 2 /* SingleLineCommentTrivia */ || kind === 3 /* MultiLineCommentTrivia */; + return kind === 2 || kind === 3; } ts.isComment = isComment; function isPunctuation(kind) { - return 14 /* FirstPunctuation */ <= kind && kind <= 63 /* LastPunctuation */; + return 14 <= kind && kind <= 63; } ts.isPunctuation = isPunctuation; function isInsideTemplateLiteral(node, position) { @@ -21348,7 +21482,7 @@ var ts; var ts; (function (ts) { function isFirstDeclarationOfSymbolParameter(symbol) { - return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 124 /* Parameter */; + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 124; } ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; var displayPartWriter = getDisplayPartWriter(); @@ -21359,12 +21493,12 @@ var ts; resetWriter(); return { displayParts: function () { return displayParts; }, - writeKeyword: function (text) { return writeKind(text, 5 /* keyword */); }, - writeOperator: function (text) { return writeKind(text, 12 /* operator */); }, - writePunctuation: function (text) { return writeKind(text, 15 /* punctuation */); }, - writeSpace: function (text) { return writeKind(text, 16 /* space */); }, - writeStringLiteral: function (text) { return writeKind(text, 8 /* stringLiteral */); }, - writeParameter: function (text) { return writeKind(text, 13 /* parameterName */); }, + writeKeyword: function (text) { return writeKind(text, 5); }, + writeOperator: function (text) { return writeKind(text, 12); }, + writePunctuation: function (text) { return writeKind(text, 15); }, + writeSpace: function (text) { return writeKind(text, 16); }, + writeStringLiteral: function (text) { return writeKind(text, 8); }, + writeParameter: function (text) { return writeKind(text, 13); }, writeSymbol: writeSymbol, writeLine: writeLine, increaseIndent: function () { @@ -21381,7 +21515,7 @@ var ts; if (lineStart) { var indentString = ts.getIndentString(indent); if (indentString) { - displayParts.push(displayPart(indentString, 16 /* space */)); + displayParts.push(displayPart(indentString, 16)); } lineStart = false; } @@ -21408,49 +21542,49 @@ var ts; return displayPart(text, displayPartKind(symbol), symbol); function displayPartKind(symbol) { var flags = symbol.flags; - if (flags & 3 /* Variable */) { - return isFirstDeclarationOfSymbolParameter(symbol) ? 13 /* parameterName */ : 9 /* localName */; + if (flags & 3) { + return isFirstDeclarationOfSymbolParameter(symbol) ? 13 : 9; } - else if (flags & 4 /* Property */) { - return 14 /* propertyName */; + else if (flags & 4) { + return 14; } - else if (flags & 32768 /* GetAccessor */) { - return 14 /* propertyName */; + else if (flags & 32768) { + return 14; } - else if (flags & 65536 /* SetAccessor */) { - return 14 /* propertyName */; + else if (flags & 65536) { + return 14; } - else if (flags & 8 /* EnumMember */) { - return 19 /* enumMemberName */; + else if (flags & 8) { + return 19; } - else if (flags & 16 /* Function */) { - return 20 /* functionName */; + else if (flags & 16) { + return 20; } - else if (flags & 32 /* Class */) { - return 1 /* className */; + else if (flags & 32) { + return 1; } - else if (flags & 64 /* Interface */) { - return 4 /* interfaceName */; + else if (flags & 64) { + return 4; } - else if (flags & 384 /* Enum */) { - return 2 /* enumName */; + else if (flags & 384) { + return 2; } - else if (flags & 1536 /* Module */) { - return 11 /* moduleName */; + else if (flags & 1536) { + return 11; } - else if (flags & 8192 /* Method */) { - return 10 /* methodName */; + else if (flags & 8192) { + return 10; } - else if (flags & 262144 /* TypeParameter */) { - return 18 /* typeParameterName */; + else if (flags & 262144) { + return 18; } - else if (flags & 524288 /* TypeAlias */) { - return 0 /* aliasName */; + else if (flags & 524288) { + return 0; } - else if (flags & 8388608 /* Import */) { - return 0 /* aliasName */; + else if (flags & 8388608) { + return 0; } - return 17 /* text */; + return 17; } } ts.symbolPart = symbolPart; @@ -21462,27 +21596,27 @@ var ts; } ts.displayPart = displayPart; function spacePart() { - return displayPart(" ", 16 /* space */); + return displayPart(" ", 16); } ts.spacePart = spacePart; function keywordPart(kind) { - return displayPart(ts.tokenToString(kind), 5 /* keyword */); + return displayPart(ts.tokenToString(kind), 5); } ts.keywordPart = keywordPart; function punctuationPart(kind) { - return displayPart(ts.tokenToString(kind), 15 /* punctuation */); + return displayPart(ts.tokenToString(kind), 15); } ts.punctuationPart = punctuationPart; function operatorPart(kind) { - return displayPart(ts.tokenToString(kind), 12 /* operator */); + return displayPart(ts.tokenToString(kind), 12); } ts.operatorPart = operatorPart; function textPart(text) { - return displayPart(text, 17 /* text */); + return displayPart(text, 17); } ts.textPart = textPart; function lineBreakPart() { - return displayPart("\n", 6 /* lineBreak */); + return displayPart("\n", 6); } ts.lineBreakPart = lineBreakPart; function mapToDisplayParts(writeDisplayParts) { @@ -21515,7 +21649,7 @@ var ts; (function (ts) { var formatting; (function (formatting) { - var scanner = ts.createScanner(2 /* Latest */, false); + var scanner = ts.createScanner(2, false); var ScanAction; (function (ScanAction) { ScanAction[ScanAction["Scan"] = 0] = "Scan"; @@ -21548,7 +21682,7 @@ var ts; if (isStarted) { if (trailingTrivia) { ts.Debug.assert(trailingTrivia.length !== 0); - wasNewLine = trailingTrivia[trailingTrivia.length - 1].kind === 4 /* NewLineTrivia */; + wasNewLine = trailingTrivia[trailingTrivia.length - 1].kind === 4; } else { wasNewLine = false; @@ -21581,27 +21715,27 @@ var ts; savedPos = scanner.getStartPos(); } function shouldRescanGreaterThanToken(container) { - if (container.kind !== 163 /* BinaryExpression */) { + if (container.kind !== 163) { return false; } switch (container.operator) { - case 27 /* GreaterThanEqualsToken */: - case 59 /* GreaterThanGreaterThanEqualsToken */: - case 60 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 42 /* GreaterThanGreaterThanGreaterThanToken */: - case 41 /* GreaterThanGreaterThanToken */: + case 27: + case 59: + case 60: + case 42: + case 41: return true; } return false; } function shouldRescanSlashToken(container) { - return container.kind === 9 /* RegularExpressionLiteral */; + return container.kind === 9; } function shouldRescanTemplateToken(container) { - return container.kind === 12 /* TemplateMiddle */ || container.kind === 13 /* TemplateTail */; + return container.kind === 12 || container.kind === 13; } function startsWithSlashToken(t) { - return t === 36 /* SlashToken */ || t === 56 /* SlashEqualsToken */; + return t === 36 || t === 56; } function readTokenInfo(n) { if (!isOnToken()) { @@ -21611,7 +21745,7 @@ var ts; token: undefined }; } - var expectedScanAction = shouldRescanGreaterThanToken(n) ? 1 /* RescanGreaterThanToken */ : shouldRescanSlashToken(n) ? 2 /* RescanSlashToken */ : shouldRescanTemplateToken(n) ? 3 /* RescanTemplateToken */ : 0 /* Scan */; + var expectedScanAction = shouldRescanGreaterThanToken(n) ? 1 : shouldRescanSlashToken(n) ? 2 : shouldRescanTemplateToken(n) ? 3 : 0; if (lastTokenInfo && expectedScanAction === lastScanAction) { return fixTokenKind(lastTokenInfo, n); } @@ -21621,22 +21755,22 @@ var ts; scanner.scan(); } var currentToken = scanner.getToken(); - if (expectedScanAction === 1 /* RescanGreaterThanToken */ && currentToken === 25 /* GreaterThanToken */) { + if (expectedScanAction === 1 && currentToken === 25) { currentToken = scanner.reScanGreaterToken(); ts.Debug.assert(n.operator === currentToken); - lastScanAction = 1 /* RescanGreaterThanToken */; + lastScanAction = 1; } - else if (expectedScanAction === 2 /* RescanSlashToken */ && startsWithSlashToken(currentToken)) { + else if (expectedScanAction === 2 && startsWithSlashToken(currentToken)) { currentToken = scanner.reScanSlashToken(); ts.Debug.assert(n.kind === currentToken); - lastScanAction = 2 /* RescanSlashToken */; + lastScanAction = 2; } - else if (expectedScanAction === 3 /* RescanTemplateToken */ && currentToken === 15 /* CloseBraceToken */) { + else if (expectedScanAction === 3 && currentToken === 15) { currentToken = scanner.reScanTemplateToken(); - lastScanAction = 3 /* RescanTemplateToken */; + lastScanAction = 3; } else { - lastScanAction = 0 /* Scan */; + lastScanAction = 0; } var token = { pos: scanner.getStartPos(), @@ -21660,7 +21794,7 @@ var ts; trailingTrivia = []; } trailingTrivia.push(trivia); - if (currentToken === 4 /* NewLineTrivia */) { + if (currentToken === 4) { scanner.scan(); break; } @@ -21675,7 +21809,7 @@ var ts; function isOnToken() { var current = (lastTokenInfo && lastTokenInfo.token.kind) || scanner.getToken(); var startPos = (lastTokenInfo && lastTokenInfo.token.pos) || scanner.getStartPos(); - return startPos < endPos && current !== 1 /* EndOfFileToken */ && !ts.isTrivia(current); + return startPos < endPos && current !== 1 && !ts.isTrivia(current); } function fixTokenKind(tokenInfo, container) { if (ts.isToken(container) && tokenInfo.token.kind !== container.kind) { @@ -21751,8 +21885,8 @@ var ts; return startLine == endLine; }; FormattingContext.prototype.BlockIsOnOneLine = function (node) { - var openBrace = ts.findChildOfKind(node, 14 /* OpenBraceToken */, this.sourceFile); - var closeBrace = ts.findChildOfKind(node, 15 /* CloseBraceToken */, this.sourceFile); + var openBrace = ts.findChildOfKind(node, 14, this.sourceFile); + var closeBrace = ts.findChildOfKind(node, 15, this.sourceFile); if (openBrace && closeBrace) { var startLine = this.sourceFile.getLineAndCharacterFromPosition(openBrace.getEnd()).line; var endLine = this.sourceFile.getLineAndCharacterFromPosition(closeBrace.getStart(this.sourceFile)).line; @@ -21785,7 +21919,7 @@ var ts; (function (formatting) { var Rule = (function () { function Rule(Descriptor, Operation, Flag) { - if (Flag === void 0) { Flag = 0 /* None */; } + if (Flag === void 0) { Flag = 0; } this.Descriptor = Descriptor; this.Operation = Operation; this.Flag = Flag; @@ -21915,72 +22049,72 @@ var ts; (function (formatting) { var Rules = (function () { function Rules() { - this.IgnoreBeforeComment = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.Comments), formatting.RuleOperation.create1(1 /* Ignore */)); - this.IgnoreAfterLineComment = new formatting.Rule(formatting.RuleDescriptor.create3(2 /* SingleLineCommentTrivia */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create1(1 /* Ignore */)); - this.NoSpaceBeforeSemicolon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 22 /* SemicolonToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeColon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 51 /* ColonToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8 /* Delete */)); - this.NoSpaceBeforeQMark = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 50 /* QuestionToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8 /* Delete */)); - this.SpaceAfterColon = new formatting.Rule(formatting.RuleDescriptor.create3(51 /* ColonToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2 /* Space */)); - this.SpaceAfterQMark = new formatting.Rule(formatting.RuleDescriptor.create3(50 /* QuestionToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2 /* Space */)); - this.SpaceAfterSemicolon = new formatting.Rule(formatting.RuleDescriptor.create3(22 /* SemicolonToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* CloseBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 2 /* Space */)); - this.SpaceBetweenCloseBraceAndElse = new formatting.Rule(formatting.RuleDescriptor.create1(15 /* CloseBraceToken */, 75 /* ElseKeyword */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceBetweenCloseBraceAndWhile = new formatting.Rule(formatting.RuleDescriptor.create1(15 /* CloseBraceToken */, 99 /* WhileKeyword */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.NoSpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* CloseBraceToken */, formatting.Shared.TokenRange.FromTokens([17 /* CloseParenToken */, 19 /* CloseBracketToken */, 23 /* CommaToken */, 22 /* SemicolonToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeDot = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 20 /* DotToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterDot = new formatting.Rule(formatting.RuleDescriptor.create3(20 /* DotToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 18 /* OpenBracketToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create3(18 /* OpenBracketToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 19 /* CloseBracketToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create3(19 /* CloseBracketToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); + this.IgnoreBeforeComment = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.Comments), formatting.RuleOperation.create1(1)); + this.IgnoreAfterLineComment = new formatting.Rule(formatting.RuleDescriptor.create3(2, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create1(1)); + this.NoSpaceBeforeSemicolon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 22), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeColon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 51), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceBeforeQMark = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 50), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.SpaceAfterColon = new formatting.Rule(formatting.RuleDescriptor.create3(51, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2)); + this.SpaceAfterQMark = new formatting.Rule(formatting.RuleDescriptor.create3(50, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2)); + this.SpaceAfterSemicolon = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 2)); + this.SpaceBetweenCloseBraceAndElse = new formatting.Rule(formatting.RuleDescriptor.create1(15, 75), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceBetweenCloseBraceAndWhile = new formatting.Rule(formatting.RuleDescriptor.create1(15, 99), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.NoSpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.FromTokens([17, 19, 23, 22])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeDot = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 20), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterDot = new formatting.Rule(formatting.RuleDescriptor.create3(20, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 18), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create3(18, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 19), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create3(19, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); this.FunctionOpenBraceLeftTokenRange = formatting.Shared.TokenRange.AnyIncludingMultilineComments; - this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); - this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([64 /* Identifier */, 3 /* MultiLineCommentTrivia */]); - this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); - this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([17 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 74 /* DoKeyword */, 95 /* TryKeyword */, 80 /* FinallyKeyword */, 75 /* ElseKeyword */]); - this.SpaceBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); - this.SpaceAfterOpenBrace = new formatting.Rule(formatting.RuleDescriptor.create3(14 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2 /* Space */)); - this.SpaceBeforeCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 15 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2 /* Space */)); - this.NoSpaceBetweenEmptyBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14 /* OpenBraceToken */, 15 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 8 /* Delete */)); - this.NewLineAfterOpenBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create3(14 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4 /* NewLine */)); - this.NewLineBeforeCloseBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.AnyIncludingMultilineComments, 15 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4 /* NewLine */)); - this.NoSpaceAfterUnaryPrefixOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.UnaryPrefixOperators, formatting.Shared.TokenRange.UnaryPrefixExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8 /* Delete */)); - this.NoSpaceAfterUnaryPreincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(38 /* PlusPlusToken */, formatting.Shared.TokenRange.UnaryPreincrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterUnaryPredecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(39 /* MinusMinusToken */, formatting.Shared.TokenRange.UnaryPredecrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeUnaryPostincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostincrementExpressions, 38 /* PlusPlusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeUnaryPostdecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 39 /* MinusMinusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterPostincrementWhenFollowedByAdd = new formatting.Rule(formatting.RuleDescriptor.create1(38 /* PlusPlusToken */, 33 /* PlusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterAddWhenFollowedByUnaryPlus = new formatting.Rule(formatting.RuleDescriptor.create1(33 /* PlusToken */, 33 /* PlusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterAddWhenFollowedByPreincrement = new formatting.Rule(formatting.RuleDescriptor.create1(33 /* PlusToken */, 38 /* PlusPlusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterPostdecrementWhenFollowedBySubtract = new formatting.Rule(formatting.RuleDescriptor.create1(39 /* MinusMinusToken */, 34 /* MinusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new formatting.Rule(formatting.RuleDescriptor.create1(34 /* MinusToken */, 34 /* MinusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterSubtractWhenFollowedByPredecrement = new formatting.Rule(formatting.RuleDescriptor.create1(34 /* MinusToken */, 39 /* MinusMinusToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.NoSpaceBeforeComma = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 23 /* CommaToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterCertainKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([97 /* VarKeyword */, 93 /* ThrowKeyword */, 87 /* NewKeyword */, 73 /* DeleteKeyword */, 89 /* ReturnKeyword */, 96 /* TypeOfKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncCall = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext, Rules.IsPreviousTokenNotComma), 8 /* Delete */)); - this.SpaceAfterFunctionInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create3(82 /* FunctionKeyword */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); - this.NoSpaceBeforeOpenParenInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 8 /* Delete */)); - this.SpaceAfterVoidOperator = new formatting.Rule(formatting.RuleDescriptor.create3(98 /* VoidKeyword */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 2 /* Space */)); - this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(89 /* ReturnKeyword */, 22 /* SemicolonToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([17 /* CloseParenToken */, 74 /* DoKeyword */, 75 /* ElseKeyword */, 66 /* CaseKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 2 /* Space */)); - this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([95 /* TryKeyword */, 80 /* FinallyKeyword */]), 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([114 /* GetKeyword */, 118 /* SetKeyword */]), 64 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); - this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(112 /* ConstructorKeyword */, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([115 /* ModuleKeyword */, 116 /* RequireKeyword */]), 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([68 /* ClassKeyword */, 113 /* DeclareKeyword */, 76 /* EnumKeyword */, 77 /* ExportKeyword */, 78 /* ExtendsKeyword */, 114 /* GetKeyword */, 101 /* ImplementsKeyword */, 84 /* ImportKeyword */, 102 /* InterfaceKeyword */, 115 /* ModuleKeyword */, 105 /* PrivateKeyword */, 107 /* PublicKeyword */, 118 /* SetKeyword */, 108 /* StaticKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([78 /* ExtendsKeyword */, 101 /* ImplementsKeyword */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(8 /* StringLiteral */, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2 /* Space */)); - this.SpaceAfterArrow = new formatting.Rule(formatting.RuleDescriptor.create3(32 /* EqualsGreaterThanToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.NoSpaceAfterEllipsis = new formatting.Rule(formatting.RuleDescriptor.create1(21 /* DotDotDotToken */, 64 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterOptionalParameters = new formatting.Rule(formatting.RuleDescriptor.create3(50 /* QuestionToken */, formatting.Shared.TokenRange.FromTokens([17 /* CloseParenToken */, 23 /* CommaToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8 /* Delete */)); - this.NoSpaceBeforeOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.TypeNames, 24 /* LessThanToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8 /* Delete */)); - this.NoSpaceBetweenCloseParenAndAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create1(17 /* CloseParenToken */, 24 /* LessThanToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8 /* Delete */)); - this.NoSpaceAfterOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* LessThanToken */, formatting.Shared.TokenRange.TypeNames), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8 /* Delete */)); - this.NoSpaceBeforeCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 25 /* GreaterThanToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8 /* Delete */)); - this.NoSpaceAfterCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(25 /* GreaterThanToken */, formatting.Shared.TokenRange.FromTokens([16 /* OpenParenToken */, 18 /* OpenBracketToken */, 25 /* GreaterThanToken */, 23 /* CommaToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8 /* Delete */)); - this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14 /* OpenBraceToken */, 15 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 8 /* Delete */)); + this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([64, 3]); + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([17, 3, 74, 95, 80, 75]); + this.SpaceBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.SpaceAfterOpenBrace = new formatting.Rule(formatting.RuleDescriptor.create3(14, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2)); + this.SpaceBeforeCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2)); + this.NoSpaceBetweenEmptyBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 8)); + this.NewLineAfterOpenBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create3(14, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4)); + this.NewLineBeforeCloseBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.AnyIncludingMultilineComments, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4)); + this.NoSpaceAfterUnaryPrefixOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.UnaryPrefixOperators, formatting.Shared.TokenRange.UnaryPrefixExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceAfterUnaryPreincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(38, formatting.Shared.TokenRange.UnaryPreincrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterUnaryPredecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(39, formatting.Shared.TokenRange.UnaryPredecrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeUnaryPostincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostincrementExpressions, 38), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeUnaryPostdecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 39), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceAfterPostincrementWhenFollowedByAdd = new formatting.Rule(formatting.RuleDescriptor.create1(38, 33), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterAddWhenFollowedByUnaryPlus = new formatting.Rule(formatting.RuleDescriptor.create1(33, 33), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterAddWhenFollowedByPreincrement = new formatting.Rule(formatting.RuleDescriptor.create1(33, 38), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterPostdecrementWhenFollowedBySubtract = new formatting.Rule(formatting.RuleDescriptor.create1(39, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new formatting.Rule(formatting.RuleDescriptor.create1(34, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterSubtractWhenFollowedByPredecrement = new formatting.Rule(formatting.RuleDescriptor.create1(34, 39), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceBeforeComma = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 23), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceAfterCertainKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([97, 93, 87, 73, 89, 96]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.NoSpaceBeforeOpenParenInFuncCall = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext, Rules.IsPreviousTokenNotComma), 8)); + this.SpaceAfterFunctionInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create3(82, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.NoSpaceBeforeOpenParenInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 8)); + this.SpaceAfterVoidOperator = new formatting.Rule(formatting.RuleDescriptor.create3(98, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 2)); + this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(89, 22), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([17, 74, 75, 66]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 2)); + this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([95, 80]), 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([114, 118]), 64), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(112, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([115, 116]), 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([68, 113, 76, 77, 78, 114, 101, 84, 102, 115, 105, 107, 118, 108]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([78, 101])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(8, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2)); + this.SpaceAfterArrow = new formatting.Rule(formatting.RuleDescriptor.create3(32, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.NoSpaceAfterEllipsis = new formatting.Rule(formatting.RuleDescriptor.create1(21, 64), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterOptionalParameters = new formatting.Rule(formatting.RuleDescriptor.create3(50, formatting.Shared.TokenRange.FromTokens([17, 23])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceBeforeOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.TypeNames, 24), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8)); + this.NoSpaceBetweenCloseParenAndAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create1(17, 24), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8)); + this.NoSpaceAfterOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.TypeNames), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8)); + this.NoSpaceBeforeCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 25), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8)); + this.NoSpaceAfterCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(25, formatting.Shared.TokenRange.FromTokens([16, 18, 25, 23])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8)); + this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 8)); this.HighPriorityCommonRules = [ this.IgnoreBeforeComment, this.IgnoreAfterLineComment, @@ -22048,26 +22182,26 @@ var ts; this.SpaceBetweenStatements, this.SpaceAfterTryFinally ]; - this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.SpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); - this.NoSpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8 /* Delete */)); - this.NoSpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8 /* Delete */)); - this.SpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 2 /* Space */)); - this.NoSpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 8 /* Delete */)); - this.NewLineBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 4 /* NewLine */), 1 /* CanDeleteNewLines */); - this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 4 /* NewLine */), 1 /* CanDeleteNewLines */); - this.NewLineBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 4 /* NewLine */), 1 /* CanDeleteNewLines */); - this.SpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22 /* SemicolonToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 2 /* Space */)); - this.NoSpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22 /* SemicolonToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 8 /* Delete */)); - this.SpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16 /* OpenParenToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.SpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17 /* CloseParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2 /* Space */)); - this.NoSpaceBetweenParens = new formatting.Rule(formatting.RuleDescriptor.create1(16 /* OpenParenToken */, 17 /* CloseParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16 /* OpenParenToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.NoSpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17 /* CloseParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82 /* FunctionKeyword */, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); - this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82 /* FunctionKeyword */, 16 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8 /* Delete */)); + this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8)); + this.NoSpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8)); + this.SpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 2)); + this.NoSpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 8)); + this.NewLineBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.NewLineBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.SpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 2)); + this.NoSpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 8)); + this.SpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.SpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2)); + this.NoSpaceBetweenParens = new formatting.Rule(formatting.RuleDescriptor.create1(16, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.NoSpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8)); + this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8)); } Rules.prototype.getRuleName = function (rule) { var o = this; @@ -22079,25 +22213,25 @@ var ts; throw new Error("Unknown rule"); }; Rules.IsForContext = function (context) { - return context.contextNode.kind === 177 /* ForStatement */; + return context.contextNode.kind === 177; }; Rules.IsNotForContext = function (context) { return !Rules.IsForContext(context); }; Rules.IsBinaryOpContext = function (context) { switch (context.contextNode.kind) { - case 163 /* BinaryExpression */: - case 164 /* ConditionalExpression */: + case 163: + case 164: return true; - case 197 /* ImportDeclaration */: - case 188 /* VariableDeclaration */: - case 124 /* Parameter */: - case 206 /* EnumMember */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - return context.currentTokenSpan.kind === 52 /* EqualsToken */ || context.nextTokenSpan.kind === 52 /* EqualsToken */; - case 178 /* ForInStatement */: - return context.currentTokenSpan.kind === 85 /* InKeyword */ || context.nextTokenSpan.kind === 85 /* InKeyword */; + case 197: + case 188: + case 124: + case 206: + case 126: + case 125: + return context.currentTokenSpan.kind === 52 || context.nextTokenSpan.kind === 52; + case 178: + return context.currentTokenSpan.kind === 85 || context.nextTokenSpan.kind === 85; } return false; }; @@ -22127,26 +22261,26 @@ var ts; return true; } switch (node.kind) { - case 170 /* Block */: - case 183 /* SwitchStatement */: - case 148 /* ObjectLiteralExpression */: - case 196 /* ModuleBlock */: + case 170: + case 183: + case 148: + case 196: return true; } return false; }; Rules.IsFunctionDeclContext = function (context) { switch (context.contextNode.kind) { - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 132 /* CallSignature */: - case 156 /* FunctionExpression */: - case 129 /* Constructor */: - case 157 /* ArrowFunction */: - case 192 /* InterfaceDeclaration */: + case 190: + case 128: + case 127: + case 130: + case 131: + case 132: + case 156: + case 129: + case 157: + case 192: return true; } return false; @@ -22156,88 +22290,88 @@ var ts; }; Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { switch (node.kind) { - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 139 /* TypeLiteral */: - case 195 /* ModuleDeclaration */: + case 191: + case 192: + case 194: + case 139: + case 195: return true; } return false; }; Rules.IsAfterCodeBlockContext = function (context) { switch (context.currentTokenParent.kind) { - case 191 /* ClassDeclaration */: - case 195 /* ModuleDeclaration */: - case 194 /* EnumDeclaration */: - case 170 /* Block */: - case 203 /* CatchClause */: - case 196 /* ModuleBlock */: - case 183 /* SwitchStatement */: + case 191: + case 195: + case 194: + case 170: + case 203: + case 196: + case 183: return true; } return false; }; Rules.IsControlDeclContext = function (context) { switch (context.contextNode.kind) { - case 174 /* IfStatement */: - case 183 /* SwitchStatement */: - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 176 /* WhileStatement */: - case 186 /* TryStatement */: - case 175 /* DoStatement */: - case 182 /* WithStatement */: - case 203 /* CatchClause */: + case 174: + case 183: + case 177: + case 178: + case 176: + case 186: + case 175: + case 182: + case 203: return true; default: return false; } }; Rules.IsObjectContext = function (context) { - return context.contextNode.kind === 148 /* ObjectLiteralExpression */; + return context.contextNode.kind === 148; }; Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind === 151 /* CallExpression */; + return context.contextNode.kind === 151; }; Rules.IsNewContext = function (context) { - return context.contextNode.kind === 152 /* NewExpression */; + return context.contextNode.kind === 152; }; Rules.IsFunctionCallOrNewContext = function (context) { return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); }; Rules.IsPreviousTokenNotComma = function (context) { - return context.currentTokenSpan.kind !== 23 /* CommaToken */; + return context.currentTokenSpan.kind !== 23; }; Rules.IsSameLineTokenContext = function (context) { return context.TokensAreOnSameLine(); }; Rules.IsNotFormatOnEnter = function (context) { - return context.formattingRequestKind != 2 /* FormatOnEnter */; + return context.formattingRequestKind != 2; }; Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind === 195 /* ModuleDeclaration */; + return context.contextNode.kind === 195; }; Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind === 139 /* TypeLiteral */; + return context.contextNode.kind === 139; }; Rules.IsTypeArgumentOrParameter = function (token, parent) { - if (token.kind !== 24 /* LessThanToken */ && token.kind !== 25 /* GreaterThanToken */) { + if (token.kind !== 24 && token.kind !== 25) { return false; } switch (parent.kind) { - case 135 /* TypeReference */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 135: + case 191: + case 192: + case 190: + case 156: + case 157: + case 128: + case 127: + case 132: + case 133: + case 151: + case 152: return true; default: return false; @@ -22247,7 +22381,7 @@ var ts; return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan, context.currentTokenParent) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan, context.nextTokenParent); }; Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind === 98 /* VoidKeyword */ && context.currentTokenParent.kind === 160 /* VoidExpression */; + return context.currentTokenSpan.kind === 98 && context.currentTokenParent.kind === 160; }; return Rules; })(); @@ -22269,7 +22403,7 @@ var ts; return result; }; RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 120 /* LastToken */ + 1; + this.mapRowLength = 120 + 1; this.map = new Array(this.mapRowLength * this.mapRowLength); var rulesBucketConstructionStateList = new Array(this.map.length); this.FillRules(rules, rulesBucketConstructionStateList); @@ -22360,8 +22494,8 @@ var ts; }; RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { var position; - if (rule.Operation.Action == 1 /* Ignore */) { - position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; + if (rule.Operation.Action == 1) { + position = specificTokens ? 0 : RulesPosition.IgnoreRulesAny; } else if (!rule.Operation.Context.IsAny()) { position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; @@ -22437,7 +22571,7 @@ var ts; } TokenAllAccess.prototype.GetTokens = function () { var result = []; - for (var token = 0 /* FirstToken */; token <= 120 /* LastToken */; token++) { + for (var token = 0; token <= 120; token++) { result.push(token); } return result; @@ -22478,18 +22612,18 @@ var ts; return this.tokenAccess.toString(); }; TokenRange.Any = TokenRange.AllTokens(); - TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(65 /* FirstKeyword */, 120 /* LastKeyword */); - TokenRange.BinaryOperators = TokenRange.FromRange(24 /* FirstBinaryOperator */, 63 /* LastBinaryOperator */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([85 /* InKeyword */, 86 /* InstanceOfKeyword */]); - TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([38 /* PlusPlusToken */, 39 /* MinusMinusToken */, 47 /* TildeToken */, 46 /* ExclamationToken */]); - TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([7 /* NumericLiteral */, 64 /* Identifier */, 16 /* OpenParenToken */, 18 /* OpenBracketToken */, 14 /* OpenBraceToken */, 92 /* ThisKeyword */, 87 /* NewKeyword */]); - TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([64 /* Identifier */, 16 /* OpenParenToken */, 92 /* ThisKeyword */, 87 /* NewKeyword */]); - TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([64 /* Identifier */, 17 /* CloseParenToken */, 19 /* CloseBracketToken */, 87 /* NewKeyword */]); - TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([64 /* Identifier */, 16 /* OpenParenToken */, 92 /* ThisKeyword */, 87 /* NewKeyword */]); - TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([64 /* Identifier */, 17 /* CloseParenToken */, 19 /* CloseBracketToken */, 87 /* NewKeyword */]); - TokenRange.Comments = TokenRange.FromTokens([2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([64 /* Identifier */, 117 /* NumberKeyword */, 119 /* StringKeyword */, 111 /* BooleanKeyword */, 98 /* VoidKeyword */, 110 /* AnyKeyword */]); + TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3])); + TokenRange.Keywords = TokenRange.FromRange(65, 120); + TokenRange.BinaryOperators = TokenRange.FromRange(24, 63); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([85, 86]); + TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([38, 39, 47, 46]); + TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([7, 64, 16, 18, 14, 92, 87]); + TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([64, 16, 92, 87]); + TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([64, 17, 19, 87]); + TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([64, 16, 92, 87]); + TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([64, 17, 19, 87]); + TokenRange.Comments = TokenRange.FromTokens([2, 3]); + TokenRange.TypeNames = TokenRange.FromTokens([64, 117, 119, 111, 98, 110]); return TokenRange; })(); Shared.TokenRange = TokenRange; @@ -22501,8 +22635,7 @@ var ts; var formatting; (function (formatting) { var RulesProvider = (function () { - function RulesProvider(logger) { - this.logger = logger; + function RulesProvider() { this.globalRules = new formatting.Rules(); } RulesProvider.prototype.getRuleName = function (rule) { @@ -22599,15 +22732,15 @@ var ts; pos: ts.getStartPositionOfLine(line - 1, sourceFile), end: ts.getEndLinePosition(line, sourceFile) + 1 }; - return formatSpan(span, sourceFile, options, rulesProvider, 2 /* FormatOnEnter */); + return formatSpan(span, sourceFile, options, rulesProvider, 2); } formatting.formatOnEnter = formatOnEnter; function formatOnSemicolon(position, sourceFile, rulesProvider, options) { - return formatOutermostParent(position, 22 /* SemicolonToken */, sourceFile, options, rulesProvider, 3 /* FormatOnSemicolon */); + return formatOutermostParent(position, 22, sourceFile, options, rulesProvider, 3); } formatting.formatOnSemicolon = formatOnSemicolon; function formatOnClosingCurly(position, sourceFile, rulesProvider, options) { - return formatOutermostParent(position, 15 /* CloseBraceToken */, sourceFile, options, rulesProvider, 4 /* FormatOnClosingCurlyBrace */); + return formatOutermostParent(position, 15, sourceFile, options, rulesProvider, 4); } formatting.formatOnClosingCurly = formatOnClosingCurly; function formatDocument(sourceFile, rulesProvider, options) { @@ -22615,7 +22748,7 @@ var ts; pos: 0, end: sourceFile.text.length }; - return formatSpan(span, sourceFile, options, rulesProvider, 0 /* FormatDocument */); + return formatSpan(span, sourceFile, options, rulesProvider, 0); } formatting.formatDocument = formatDocument; function formatSelection(start, end, sourceFile, rulesProvider, options) { @@ -22623,7 +22756,7 @@ var ts; pos: ts.getStartLinePositionForPosition(start, sourceFile), end: end }; - return formatSpan(span, sourceFile, options, rulesProvider, 1 /* FormatSelection */); + return formatSpan(span, sourceFile, options, rulesProvider, 1); } formatting.formatSelection = formatSelection; function formatOutermostParent(position, expectedLastToken, sourceFile, options, rulesProvider, requestKind) { @@ -22639,7 +22772,7 @@ var ts; } function findOutermostParent(position, expectedTokenKind, sourceFile) { var precedingToken = ts.findPrecedingToken(position, sourceFile); - if (!precedingToken || precedingToken.kind !== expectedTokenKind) { + if (!precedingToken || precedingToken.kind !== expectedTokenKind || position !== precedingToken.getEnd()) { return undefined; } var current = precedingToken; @@ -22650,17 +22783,17 @@ var ts; } function isListElement(parent, node) { switch (parent.kind) { - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: + case 191: + case 192: return ts.rangeContainsRange(parent.members, node); - case 195 /* ModuleDeclaration */: + case 195: var body = parent.body; - return body && body.kind === 170 /* Block */ && ts.rangeContainsRange(body.statements, node); - case 207 /* SourceFile */: - case 170 /* Block */: - case 196 /* ModuleBlock */: + return body && body.kind === 170 && ts.rangeContainsRange(body.statements, node); + case 207: + case 170: + case 196: return ts.rangeContainsRange(parent.statements, node); - case 203 /* CatchClause */: + case 203: return ts.rangeContainsRange(parent.block.statements, node); } return false; @@ -22721,11 +22854,11 @@ var ts; return precedingToken.end; } function getOwnOrInheritedDelta(n, options, sourceFile) { - var previousLine = -1 /* Unknown */; - var childKind = 0 /* Unknown */; + var previousLine = -1; + var childKind = 0; while (n) { var line = sourceFile.getLineAndCharacterFromPosition(n.getStart(sourceFile)).line; - if (previousLine !== -1 /* Unknown */ && line !== previousLine) { + if (previousLine !== -1 && line !== previousLine) { break; } if (formatting.SmartIndenter.shouldIndentChildNode(n.kind, childKind)) { @@ -22758,7 +22891,7 @@ var ts; return edits; function tryComputeIndentationForListItem(startPos, endPos, parentStartLine, range, inheritedIndentation) { if (ts.rangeOverlapsWithStartEnd(range, startPos, endPos)) { - if (inheritedIndentation !== -1 /* Unknown */) { + if (inheritedIndentation !== -1) { return inheritedIndentation; } } @@ -22770,13 +22903,13 @@ var ts; return column; } } - return -1 /* Unknown */; + return -1; } function computeIndentation(node, startLine, inheritedIndentation, parent, parentDynamicIndentation, effectiveParentStartLine) { var indentation = inheritedIndentation; - if (indentation === -1 /* Unknown */) { + if (indentation === -1) { if (isSomeBlock(node.kind)) { - if (isSomeBlock(parent.kind) || parent.kind === 207 /* SourceFile */ || parent.kind === 200 /* CaseClause */ || parent.kind === 201 /* DefaultClause */) { + if (isSomeBlock(parent.kind) || parent.kind === 207 || parent.kind === 200 || parent.kind === 201) { indentation = parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta(); } else { @@ -22792,7 +22925,7 @@ var ts; } } } - var delta = formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0 /* Unknown */) ? options.IndentSize : 0; + var delta = formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0) ? options.IndentSize : 0; if (effectiveParentStartLine === startLine) { indentation = parentDynamicIndentation.getIndentation(); delta = Math.min(options.IndentSize, parentDynamicIndentation.getDelta() + delta); @@ -22806,20 +22939,20 @@ var ts; return { getIndentationForComment: function (kind) { switch (kind) { - case 15 /* CloseBraceToken */: - case 19 /* CloseBracketToken */: + case 15: + case 19: return indentation + delta; } return indentation; }, getIndentationForToken: function (line, kind) { switch (kind) { - case 14 /* OpenBraceToken */: - case 15 /* CloseBraceToken */: - case 18 /* OpenBracketToken */: - case 19 /* CloseBracketToken */: - case 75 /* ElseKeyword */: - case 99 /* WhileKeyword */: + case 14: + case 15: + case 18: + case 19: + case 75: + case 99: return indentation; default: return nodeStartLine !== line ? indentation + delta : indentation; @@ -22835,7 +22968,7 @@ var ts; else { indentation -= options.IndentSize; } - if (formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0 /* Unknown */)) { + if (formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0)) { delta = options.IndentSize; } else { @@ -22852,7 +22985,7 @@ var ts; var nodeDynamicIndentation = getDynamicIndentation(node, nodeStartLine, indentation, delta); var childContextNode = contextNode; ts.forEachChild(node, function (child) { - processChildNode(child, -1 /* Unknown */, node, nodeDynamicIndentation, nodeStartLine, false); + processChildNode(child, -1, node, nodeDynamicIndentation, nodeStartLine, false); }, function (nodes) { processChildNodes(nodes, node, nodeStartLine, nodeDynamicIndentation); }); @@ -22866,10 +22999,10 @@ var ts; function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, isListItem) { var childStartPos = child.getStart(sourceFile); var childStart = sourceFile.getLineAndCharacterFromPosition(childStartPos); - var childIndentationAmount = -1 /* Unknown */; + var childIndentationAmount = -1; if (isListItem) { childIndentationAmount = tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation); - if (childIndentationAmount !== -1 /* Unknown */) { + if (childIndentationAmount !== -1) { inheritedIndentation = childIndentationAmount; } } @@ -22905,7 +23038,7 @@ var ts; var listEndToken = getCloseTokenForOpenToken(listStartToken); var listDynamicIndentation = parentDynamicIndentation; var startLine = parentStartLine; - if (listStartToken !== 0 /* Unknown */) { + if (listStartToken !== 0) { while (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); if (tokenInfo.token.end > nodes.pos) { @@ -22913,7 +23046,7 @@ var ts; } else if (tokenInfo.token.kind === listStartToken) { startLine = sourceFile.getLineAndCharacterFromPosition(tokenInfo.token.pos).line; - var indentation = computeIndentation(tokenInfo.token, startLine, -1 /* Unknown */, parent, parentDynamicIndentation, startLine); + var indentation = computeIndentation(tokenInfo.token, startLine, -1, parent, parentDynamicIndentation, startLine); listDynamicIndentation = getDynamicIndentation(parent, parentStartLine, indentation.indentation, indentation.delta); consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation); } @@ -22922,11 +23055,11 @@ var ts; } } } - var inheritedIndentation = -1 /* Unknown */; + var inheritedIndentation = -1; for (var i = 0, len = nodes.length; i < len; ++i) { inheritedIndentation = processChildNode(nodes[i], inheritedIndentation, node, listDynamicIndentation, startLine, true); } - if (listEndToken !== 0 /* Unknown */) { + if (listEndToken !== 0) { if (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) { @@ -22974,19 +23107,19 @@ var ts; } var triviaStartLine = sourceFile.getLineAndCharacterFromPosition(triviaItem.pos).line; switch (triviaItem.kind) { - case 3 /* MultiLineCommentTrivia */: + case 3: var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind); indentMultilineComment(triviaItem, commentIndentation, !indentNextTokenOrTrivia); indentNextTokenOrTrivia = false; break; - case 2 /* SingleLineCommentTrivia */: + case 2: if (indentNextTokenOrTrivia) { var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind); insertIndentation(triviaItem.pos, commentIndentation, false); indentNextTokenOrTrivia = false; } break; - case 4 /* NewLineTrivia */: + case 4: indentNextTokenOrTrivia = true; break; } @@ -23035,19 +23168,19 @@ var ts; var lineAdded; if (rule) { applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine); - if (rule.Operation.Action & (2 /* Space */ | 8 /* Delete */) && currentStartLine !== previousStartLine) { + if (rule.Operation.Action & (2 | 8) && currentStartLine !== previousStartLine) { lineAdded = false; if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(false); } } - else if (rule.Operation.Action & 4 /* NewLine */ && currentStartLine === previousStartLine) { + else if (rule.Operation.Action & 4 && currentStartLine === previousStartLine) { lineAdded = true; if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(true); } } - trimTrailingWhitespaces = (rule.Operation.Action & (4 /* NewLine */ | 2 /* Space */)) && rule.Flag !== 1 /* CanDeleteNewLines */; + trimTrailingWhitespaces = (rule.Operation.Action & (4 | 2)) && rule.Flag !== 1; } else { trimTrailingWhitespaces = true; @@ -23146,15 +23279,15 @@ var ts; function applyRuleEdits(rule, previousRange, previousStartLine, currentRange, currentStartLine) { var between; switch (rule.Operation.Action) { - case 1 /* Ignore */: + case 1: return; - case 8 /* Delete */: + case 8: if (previousRange.end !== currentRange.pos) { recordDelete(previousRange.end, currentRange.pos - previousRange.end); } break; - case 4 /* NewLine */: - if (rule.Flag !== 1 /* CanDeleteNewLines */ && previousStartLine !== currentStartLine) { + case 4: + if (rule.Flag !== 1 && previousStartLine !== currentStartLine) { return; } var lineDelta = currentStartLine - previousStartLine; @@ -23162,12 +23295,12 @@ var ts; recordReplace(previousRange.end, currentRange.pos - previousRange.end, options.NewLineCharacter); } break; - case 2 /* Space */: - if (rule.Flag !== 1 /* CanDeleteNewLines */ && previousStartLine !== currentStartLine) { + case 2: + if (rule.Flag !== 1 && previousStartLine !== currentStartLine) { return; } var posDelta = currentRange.pos - previousRange.end; - if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange.end) !== 32 /* space */) { + if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange.end) !== 32) { recordReplace(previousRange.end, currentRange.pos - previousRange.end, " "); } break; @@ -23176,51 +23309,51 @@ var ts; } function isSomeBlock(kind) { switch (kind) { - case 170 /* Block */: - case 196 /* ModuleBlock */: + case 170: + case 196: return true; } return false; } function getOpenTokenForList(node, list) { switch (node.kind) { - case 129 /* Constructor */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 157 /* ArrowFunction */: + case 129: + case 190: + case 156: + case 128: + case 127: + case 157: if (node.typeParameters === list) { - return 24 /* LessThanToken */; + return 24; } else if (node.parameters === list) { - return 16 /* OpenParenToken */; + return 16; } break; - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 151: + case 152: if (node.typeArguments === list) { - return 24 /* LessThanToken */; + return 24; } else if (node.arguments === list) { - return 16 /* OpenParenToken */; + return 16; } break; - case 135 /* TypeReference */: + case 135: if (node.typeArguments === list) { - return 24 /* LessThanToken */; + return 24; } } - return 0 /* Unknown */; + return 0; } function getCloseTokenForOpenToken(kind) { switch (kind) { - case 16 /* OpenParenToken */: - return 17 /* CloseParenToken */; - case 24 /* LessThanToken */: - return 25 /* GreaterThanToken */; + case 16: + return 17; + case 24: + return 25; } - return 0 /* Unknown */; + return 0; } var internedTabsIndentation; var internedSpacesIndentation; @@ -23281,12 +23414,12 @@ var ts; if (!precedingToken) { return 0; } - var precedingTokenIsLiteral = precedingToken.kind === 8 /* StringLiteral */ || precedingToken.kind === 9 /* RegularExpressionLiteral */ || precedingToken.kind === 10 /* NoSubstitutionTemplateLiteral */ || precedingToken.kind === 11 /* TemplateHead */ || precedingToken.kind === 12 /* TemplateMiddle */ || precedingToken.kind === 13 /* TemplateTail */; + var precedingTokenIsLiteral = precedingToken.kind === 8 || precedingToken.kind === 9 || precedingToken.kind === 10 || precedingToken.kind === 11 || precedingToken.kind === 12 || precedingToken.kind === 13; if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) { return 0; } var lineAtPosition = sourceFile.getLineAndCharacterFromPosition(position).line; - if (precedingToken.kind === 23 /* CommaToken */ && precedingToken.parent.kind !== 163 /* BinaryExpression */) { + if (precedingToken.kind === 23 && precedingToken.parent.kind !== 163) { var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation; @@ -23297,7 +23430,7 @@ var ts; var currentStart; var indentationDelta; while (current) { - if (positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode(current.kind, previous ? previous.kind : 0 /* Unknown */)) { + if (positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode(current.kind, previous ? previous.kind : 0)) { currentStart = getStartLineAndCharacterForNode(current, sourceFile); if (nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile)) { indentationDelta = 0; @@ -23370,7 +23503,7 @@ var ts; 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 === 207 /* SourceFile */ || !parentAndChildShareLine); + var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && (parent.kind === 207 || !parentAndChildShareLine); if (!useActualIndentation) { return -1; } @@ -23381,10 +23514,10 @@ var ts; if (!nextToken) { return false; } - if (nextToken.kind === 14 /* OpenBraceToken */) { + if (nextToken.kind === 14) { return true; } - else if (nextToken.kind === 15 /* CloseBraceToken */) { + else if (nextToken.kind === 15) { var nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line; return lineAtPosition === nextTokenStartLine; } @@ -23397,8 +23530,8 @@ var ts; return candidate.end > position || !isCompletedNode(candidate, sourceFile); } function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { - if (parent.kind === 174 /* IfStatement */ && parent.elseStatement === child) { - var elseKeyword = ts.findChildOfKind(parent, 75 /* ElseKeyword */, sourceFile); + if (parent.kind === 174 && parent.elseStatement === child) { + var elseKeyword = ts.findChildOfKind(parent, 75, sourceFile); ts.Debug.assert(elseKeyword !== undefined); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; return elseKeywordStartLine === childStartLine; @@ -23409,22 +23542,22 @@ var ts; function getContainingList(node, sourceFile) { if (node.parent) { switch (node.parent.kind) { - case 135 /* TypeReference */: + case 135: if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { return node.parent.typeArguments; } break; - case 148 /* ObjectLiteralExpression */: + case 148: return node.parent.properties; - case 147 /* ArrayLiteralExpression */: + case 147: return node.parent.elements; - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: + case 190: + case 156: + case 157: + case 128: + case 127: + case 132: + case 133: var start = node.getStart(sourceFile); if (node.parent.typeParameters && ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { return node.parent.typeParameters; @@ -23433,8 +23566,8 @@ var ts; return node.parent.parameters; } break; - case 152 /* NewExpression */: - case 151 /* CallExpression */: + case 152: + case 151: var start = node.getStart(sourceFile); if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { return node.parent.typeArguments; @@ -23460,7 +23593,7 @@ var ts; var node = list[index]; var lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile); for (var i = index - 1; i >= 0; --i) { - if (list[i].kind === 23 /* CommaToken */) { + if (list[i].kind === 23) { continue; } var prevEndLine = sourceFile.getLineAndCharacterFromPosition(list[i].end).line; @@ -23482,7 +23615,7 @@ var ts; if (!ts.isWhiteSpace(ch)) { return column; } - if (ch === 9 /* tab */) { + if (ch === 9) { column += options.TabSize + (column % options.TabSize); } else { @@ -23494,25 +23627,25 @@ var ts; SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; function nodeContentIsAlwaysIndented(kind) { switch (kind) { - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 147 /* ArrayLiteralExpression */: - case 170 /* Block */: - case 196 /* ModuleBlock */: - case 148 /* ObjectLiteralExpression */: - case 139 /* TypeLiteral */: - case 183 /* SwitchStatement */: - case 201 /* DefaultClause */: - case 200 /* CaseClause */: - case 155 /* ParenthesizedExpression */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: - case 171 /* VariableStatement */: - case 188 /* VariableDeclaration */: - case 198 /* ExportAssignment */: - case 181 /* ReturnStatement */: - case 164 /* ConditionalExpression */: + case 191: + case 192: + case 194: + case 147: + case 170: + case 196: + case 148: + case 139: + case 183: + case 201: + case 200: + case 155: + case 151: + case 152: + case 171: + case 188: + case 198: + case 181: + case 164: return true; } return false; @@ -23522,20 +23655,20 @@ var ts; return true; } switch (parent) { - case 175 /* DoStatement */: - case 176 /* WhileStatement */: - case 178 /* ForInStatement */: - case 177 /* ForStatement */: - case 174 /* IfStatement */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 157 /* ArrowFunction */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - return child !== 170 /* Block */; + case 175: + case 176: + case 178: + case 177: + case 174: + case 190: + case 156: + case 128: + case 127: + case 157: + case 129: + case 130: + case 131: + return child !== 170; default: return false; } @@ -23548,7 +23681,7 @@ var ts; if (last.kind === expectedLastToken) { return true; } - else if (last.kind === 22 /* SemicolonToken */ && children.length !== 1) { + else if (last.kind === 22 && children.length !== 1) { return children[children.length - 2].kind === expectedLastToken; } } @@ -23559,47 +23692,47 @@ var ts; return false; } switch (n.kind) { - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 148 /* ObjectLiteralExpression */: - case 170 /* Block */: - case 196 /* ModuleBlock */: - case 183 /* SwitchStatement */: - return nodeEndsWith(n, 15 /* CloseBraceToken */, sourceFile); - case 203 /* CatchClause */: + case 191: + case 192: + case 194: + case 148: + case 170: + case 196: + case 183: + return nodeEndsWith(n, 15, sourceFile); + case 203: return isCompletedNode(n.block, sourceFile); - case 155 /* ParenthesizedExpression */: - case 132 /* CallSignature */: - case 151 /* CallExpression */: - case 133 /* ConstructSignature */: - return nodeEndsWith(n, 17 /* CloseParenToken */, sourceFile); - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 157 /* ArrowFunction */: + case 155: + case 132: + case 151: + case 133: + return nodeEndsWith(n, 17, sourceFile); + case 190: + case 156: + case 128: + case 127: + case 157: return !n.body || isCompletedNode(n.body, sourceFile); - case 195 /* ModuleDeclaration */: + case 195: return n.body && isCompletedNode(n.body, sourceFile); - case 174 /* IfStatement */: + case 174: if (n.elseStatement) { return isCompletedNode(n.elseStatement, sourceFile); } return isCompletedNode(n.thenStatement, sourceFile); - case 173 /* ExpressionStatement */: + case 173: return isCompletedNode(n.expression, sourceFile); - case 147 /* ArrayLiteralExpression */: - return nodeEndsWith(n, 19 /* CloseBracketToken */, sourceFile); - case 200 /* CaseClause */: - case 201 /* DefaultClause */: + case 147: + return nodeEndsWith(n, 19, sourceFile); + case 200: + case 201: return false; - case 176 /* WhileStatement */: + case 176: return isCompletedNode(n.statement, sourceFile); - case 175 /* DoStatement */: - var hasWhileKeyword = ts.findChildOfKind(n, 99 /* WhileKeyword */, sourceFile); + case 175: + var hasWhileKeyword = ts.findChildOfKind(n, 99, sourceFile); if (hasWhileKeyword) { - return nodeEndsWith(n, 17 /* CloseParenToken */, sourceFile); + return nodeEndsWith(n, 17, sourceFile); } return isCompletedNode(n.statement, sourceFile); default: @@ -23617,7 +23750,7 @@ var __extends = this.__extends || function (d, b) { }; var ts; (function (ts) { - ts.servicesVersion = "0.5"; + ts.servicesVersion = "0.4"; var ScriptSnapshot; (function (ScriptSnapshot) { var StringScriptSnapshot = (function () { @@ -23631,14 +23764,8 @@ var ts; StringScriptSnapshot.prototype.getLength = function () { return this.text.length; }; - StringScriptSnapshot.prototype.getLineStartPositions = function () { - if (!this._lineStartPositions) { - this._lineStartPositions = ts.computeLineStarts(this.text); - } - return this._lineStartPositions; - }; StringScriptSnapshot.prototype.getChangeRange = function (oldSnapshot) { - throw new Error("not yet implemented"); + return undefined; }; return StringScriptSnapshot; })(); @@ -23647,7 +23774,7 @@ var ts; } ScriptSnapshot.fromString = fromString; })(ScriptSnapshot = ts.ScriptSnapshot || (ts.ScriptSnapshot = {})); - var scanner = ts.createScanner(2 /* Latest */, true); + var scanner = ts.createScanner(2, true); var emptyArray = []; function createNode(kind, pos, end, flags, parent) { var node = new (ts.getNodeConstructor(kind))(); @@ -23692,13 +23819,13 @@ var ts; while (pos < end) { var token = scanner.scan(); var textPos = scanner.getTextPos(); - nodes.push(createNode(token, pos, textPos, 512 /* Synthetic */, this)); + nodes.push(createNode(token, pos, textPos, 512, this)); pos = textPos; } return pos; }; NodeObject.prototype.createSyntaxList = function (nodes) { - var list = createNode(208 /* SyntaxList */, nodes.pos, nodes.end, 512 /* Synthetic */, this); + var list = createNode(208, nodes.pos, nodes.end, 512, this); list._children = []; var pos = nodes.pos; for (var i = 0, len = nodes.length; i < len; i++) { @@ -23716,7 +23843,7 @@ var ts; }; NodeObject.prototype.createChildren = function (sourceFile) { var _this = this; - if (this.kind >= 121 /* FirstNode */) { + if (this.kind >= 121) { scanner.setText((sourceFile || this.getSourceFile()).text); var children = []; var pos = this.pos; @@ -23761,7 +23888,7 @@ var ts; var children = this.getChildren(); for (var i = 0; i < children.length; i++) { var child = children[i]; - if (child.kind < 121 /* FirstNode */) { + if (child.kind < 121) { return child; } return child.getFirstToken(sourceFile); @@ -23771,7 +23898,7 @@ var ts; var children = this.getChildren(sourceFile); for (var i = children.length - 1; i >= 0; i--) { var child = children[i]; - if (child.kind < 121 /* FirstNode */) { + if (child.kind < 121) { return child; } return child.getLastToken(sourceFile); @@ -23795,7 +23922,7 @@ var ts; }; SymbolObject.prototype.getDocumentationComment = function () { if (this.documentationComment === undefined) { - this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 4 /* Property */)); + this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 4)); } return this.documentationComment; }; @@ -23817,7 +23944,7 @@ var ts; ts.forEach(declarations, function (declaration, indexOfDeclaration) { if (ts.indexOf(declarations, declaration) === indexOfDeclaration) { var sourceFileOfDeclaration = ts.getSourceFileOfNode(declaration); - if (canUseParsedParamTagComments && declaration.kind === 124 /* Parameter */) { + if (canUseParsedParamTagComments && declaration.kind === 124) { ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration), function (jsDocCommentTextRange) { var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration); if (cleanedParamJsDocComment) { @@ -23825,13 +23952,13 @@ var ts; } }); } - if (declaration.kind === 195 /* ModuleDeclaration */ && declaration.body.kind === 195 /* ModuleDeclaration */) { + if (declaration.kind === 195 && declaration.body.kind === 195) { return; } - while (declaration.kind === 195 /* ModuleDeclaration */ && declaration.parent.kind === 195 /* ModuleDeclaration */) { + while (declaration.kind === 195 && declaration.parent.kind === 195) { declaration = declaration.parent; } - ts.forEach(getJsDocCommentTextRange(declaration.kind === 188 /* VariableDeclaration */ ? declaration.parent.parent : declaration, sourceFileOfDeclaration), function (jsDocCommentTextRange) { + ts.forEach(getJsDocCommentTextRange(declaration.kind === 188 ? declaration.parent.parent : declaration, sourceFileOfDeclaration), function (jsDocCommentTextRange) { var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration); if (cleanedJsDocComment) { jsDocCommentParts.push.apply(jsDocCommentParts, cleanedJsDocComment); @@ -23885,7 +24012,7 @@ var ts; while (pos < end) { var docCommentTextOfLine = ""; pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile); - if (pos < end && sourceFile.text.charCodeAt(pos) === 42 /* asterisk */) { + if (pos < end && sourceFile.text.charCodeAt(pos) === 42) { var lineStartPos = pos + 1; pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, spacesToRemoveAfterAsterisk); if (spacesToRemoveAfterAsterisk === undefined && pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { @@ -23934,15 +24061,15 @@ var ts; if (pos >= end) { break; } - if (sourceFile.text.charCodeAt(pos) === 123 /* openBrace */) { + if (sourceFile.text.charCodeAt(pos) === 123) { pos++; for (var curlies = 1; pos < end; pos++) { var charCode = sourceFile.text.charCodeAt(pos); - if (charCode === 123 /* openBrace */) { + if (charCode === 123) { curlies++; continue; } - if (charCode === 125 /* closeBrace */) { + if (charCode === 125) { curlies--; if (curlies === 0) { pos++; @@ -23952,7 +24079,7 @@ var ts; continue; } } - if (charCode === 64 /* at */) { + if (charCode === 64) { break; } } @@ -23983,7 +24110,7 @@ var ts; setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos); continue; } - if (ch === 64 /* at */) { + if (ch === 64) { break; } paramHelpString += sourceFile.text.charAt(pos); @@ -23994,7 +24121,7 @@ var ts; } paramHelpStringMargin = undefined; } - if (sourceFile.text.charCodeAt(pos) === 64 /* at */) { + if (sourceFile.text.charCodeAt(pos) === 64) { continue; } } @@ -24023,7 +24150,7 @@ var ts; var consumedSpaces = pos - startOfLinePos; if (consumedSpaces < paramHelpStringMargin) { var ch = sourceFile.text.charCodeAt(pos); - if (ch === 42 /* asterisk */) { + if (ch === 42) { pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, paramHelpStringMargin - consumedSpaces - 1); } } @@ -24052,16 +24179,16 @@ var ts; return this.checker.getAugmentedPropertiesOfType(this); }; TypeObject.prototype.getCallSignatures = function () { - return this.checker.getSignaturesOfType(this, 0 /* Call */); + return this.checker.getSignaturesOfType(this, 0); }; TypeObject.prototype.getConstructSignatures = function () { - return this.checker.getSignaturesOfType(this, 1 /* Construct */); + return this.checker.getSignaturesOfType(this, 1); }; TypeObject.prototype.getStringIndexType = function () { - return this.checker.getIndexTypeOfType(this, 0 /* String */); + return this.checker.getIndexTypeOfType(this, 0); }; TypeObject.prototype.getNumberIndexType = function () { - return this.checker.getIndexTypeOfType(this, 1 /* Number */); + return this.checker.getIndexTypeOfType(this, 1); }; return TypeObject; })(); @@ -24094,15 +24221,27 @@ var ts; function SourceFileObject() { _super.apply(this, arguments); } + SourceFileObject.prototype.update = function (newText, textChangeRange) { + return ts.updateSourceFile(this, newText, textChangeRange); + }; + SourceFileObject.prototype.getLineAndCharacterFromPosition = function (position) { + return ts.getLineAndCharacterOfPosition(this, position); + }; + SourceFileObject.prototype.getLineStarts = function () { + return ts.getLineStarts(this); + }; + SourceFileObject.prototype.getPositionFromLineAndCharacter = function (line, character) { + return ts.getPositionFromLineAndCharacter(this, line, character); + }; SourceFileObject.prototype.getNamedDeclarations = function () { if (!this.namedDeclarations) { var sourceFile = this; var namedDeclarations = []; ts.forEachChild(sourceFile, function visit(node) { switch (node.kind) { - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 190: + case 128: + case 127: var functionDeclaration = node; if (functionDeclaration.name && functionDeclaration.name.getFullWidth() > 0) { var lastDeclaration = namedDeclarations.length > 0 ? namedDeclarations[namedDeclarations.length - 1] : undefined; @@ -24117,44 +24256,44 @@ var ts; ts.forEachChild(node, visit); } break; - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 194 /* EnumDeclaration */: - case 195 /* ModuleDeclaration */: - case 197 /* ImportDeclaration */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 139 /* TypeLiteral */: + case 191: + case 192: + case 193: + case 194: + case 195: + case 197: + case 130: + case 131: + case 139: if (node.name) { namedDeclarations.push(node); } - case 129 /* Constructor */: - case 171 /* VariableStatement */: - case 189 /* VariableDeclarationList */: - case 144 /* ObjectBindingPattern */: - case 145 /* ArrayBindingPattern */: - case 196 /* ModuleBlock */: + case 129: + case 171: + case 189: + case 144: + case 145: + case 196: ts.forEachChild(node, visit); break; - case 170 /* Block */: + case 170: if (ts.isFunctionBlock(node)) { ts.forEachChild(node, visit); } break; - case 124 /* Parameter */: - if (!(node.flags & 112 /* AccessibilityModifier */)) { + case 124: + if (!(node.flags & 112)) { break; } - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: + case 188: + case 146: if (ts.isBindingPattern(node.name)) { ts.forEachChild(node.name, visit); break; } - case 206 /* EnumMember */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 206: + case 126: + case 125: namedDeclarations.push(node); break; } @@ -24307,14 +24446,14 @@ var ts; return false; } return ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 156 /* FunctionExpression */) { + if (declaration.kind === 156) { return true; } - if (declaration.kind !== 188 /* VariableDeclaration */ && declaration.kind !== 190 /* FunctionDeclaration */) { + if (declaration.kind !== 188 && declaration.kind !== 190) { return false; } for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) { - if (parent.kind === 207 /* SourceFile */ || parent.kind === 196 /* ModuleBlock */) { + if (parent.kind === 207 || parent.kind === 196) { return false; } } @@ -24323,8 +24462,8 @@ var ts; } function getDefaultCompilerOptions() { return { - target: 2 /* Latest */, - module: 0 /* None */ + target: 1, + module: 0 }; } ts.getDefaultCompilerOptions = getDefaultCompilerOptions; @@ -24353,63 +24492,63 @@ var ts; var HostCache = (function () { function HostCache(host) { this.host = host; - this.filenameToEntry = {}; - var filenames = host.getScriptFileNames(); - for (var i = 0, n = filenames.length; i < n; i++) { - var filename = filenames[i]; - this.filenameToEntry[ts.normalizeSlashes(filename)] = { - filename: filename, - version: host.getScriptVersion(filename), - isOpen: host.getScriptIsOpen(filename) - }; + this.fileNameToEntry = {}; + var rootFileNames = host.getScriptFileNames(); + for (var i = 0, n = rootFileNames.length; i < n; i++) { + this.createEntry(rootFileNames[i]); } this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions(); } HostCache.prototype.compilationSettings = function () { return this._compilationSettings; }; - HostCache.prototype.getEntry = function (filename) { - filename = ts.normalizeSlashes(filename); - return ts.lookUp(this.filenameToEntry, filename); - }; - HostCache.prototype.contains = function (filename) { - return !!this.getEntry(filename); - }; - HostCache.prototype.getHostfilename = function (filename) { - var hostCacheEntry = this.getEntry(filename); - if (hostCacheEntry) { - return hostCacheEntry.filename; + HostCache.prototype.createEntry = function (fileName) { + var entry; + var scriptSnapshot = this.host.getScriptSnapshot(fileName); + if (scriptSnapshot) { + entry = { + hostFileName: fileName, + version: this.host.getScriptVersion(fileName), + scriptSnapshot: scriptSnapshot + }; } - return filename; + return this.fileNameToEntry[ts.normalizeSlashes(fileName)] = entry; }; - HostCache.prototype.getFilenames = function () { + HostCache.prototype.getEntry = function (fileName) { + return ts.lookUp(this.fileNameToEntry, ts.normalizeSlashes(fileName)); + }; + HostCache.prototype.contains = function (fileName) { + return ts.hasProperty(this.fileNameToEntry, ts.normalizeSlashes(fileName)); + }; + HostCache.prototype.getOrCreateEntry = function (fileName) { + if (this.contains(fileName)) { + return this.getEntry(fileName); + } + return this.createEntry(fileName); + }; + HostCache.prototype.getRootFileNames = function () { var _this = this; var fileNames = []; - ts.forEachKey(this.filenameToEntry, function (key) { - if (ts.hasProperty(_this.filenameToEntry, key)) + ts.forEachKey(this.fileNameToEntry, function (key) { + if (ts.hasProperty(_this.fileNameToEntry, key) && _this.fileNameToEntry[key]) fileNames.push(key); }); return fileNames; }; - HostCache.prototype.getVersion = function (filename) { - return this.getEntry(filename).version; + HostCache.prototype.getVersion = function (fileName) { + var file = this.getEntry(fileName); + return file && file.version; }; - HostCache.prototype.isOpen = function (filename) { - return this.getEntry(filename).isOpen; + HostCache.prototype.getScriptSnapshot = function (fileName) { + var file = this.getEntry(fileName); + return file && file.scriptSnapshot; }; - HostCache.prototype.getScriptSnapshot = function (filename) { - var file = this.getEntry(filename); - if (!file.sourceText) { - file.sourceText = this.host.getScriptSnapshot(file.filename); - } - return file.sourceText; - }; - HostCache.prototype.getChangeRange = function (filename, lastKnownVersion, oldScriptSnapshot) { - var currentVersion = this.getVersion(filename); + HostCache.prototype.getChangeRange = function (fileName, lastKnownVersion, oldScriptSnapshot) { + var currentVersion = this.getVersion(fileName); if (lastKnownVersion === currentVersion) { return ts.unchangedTextChangeRange; } - var scriptSnapshot = this.getScriptSnapshot(filename); + var scriptSnapshot = this.getScriptSnapshot(fileName); return scriptSnapshot.getChangeRange(oldScriptSnapshot); }; return HostCache; @@ -24417,63 +24556,67 @@ var ts; var SyntaxTreeCache = (function () { function SyntaxTreeCache(host) { this.host = host; - this.currentFilename = ""; + this.currentFileName = ""; this.currentFileVersion = null; this.currentSourceFile = null; } - SyntaxTreeCache.prototype.initialize = function (filename) { + SyntaxTreeCache.prototype.log = function (message) { + if (this.host.log) { + this.host.log(message); + } + }; + SyntaxTreeCache.prototype.initialize = function (fileName) { var start = new Date().getTime(); this.hostCache = new HostCache(this.host); - this.host.log("SyntaxTreeCache.Initialize: new HostCache: " + (new Date().getTime() - start)); - var version = this.hostCache.getVersion(filename); + this.log("SyntaxTreeCache.Initialize: new HostCache: " + (new Date().getTime() - start)); + var version = this.hostCache.getVersion(fileName); var sourceFile; - if (this.currentFilename !== filename) { - var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); + if (this.currentFileName !== fileName) { + var scriptSnapshot = this.hostCache.getScriptSnapshot(fileName); var start = new Date().getTime(); - sourceFile = createLanguageServiceSourceFile(filename, scriptSnapshot, 2 /* Latest */, version, true, true); - this.host.log("SyntaxTreeCache.Initialize: createSourceFile: " + (new Date().getTime() - start)); + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, 2, version, true); + this.log("SyntaxTreeCache.Initialize: createSourceFile: " + (new Date().getTime() - start)); } else if (this.currentFileVersion !== version) { - var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); - var editRange = this.hostCache.getChangeRange(filename, this.currentFileVersion, this.currentSourceFile.scriptSnapshot); + var scriptSnapshot = this.hostCache.getScriptSnapshot(fileName); + var editRange = this.hostCache.getChangeRange(fileName, this.currentFileVersion, this.currentSourceFile.scriptSnapshot); var start = new Date().getTime(); - sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version, true, editRange); - this.host.log("SyntaxTreeCache.Initialize: updateSourceFile: " + (new Date().getTime() - start)); + sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version, editRange); + this.log("SyntaxTreeCache.Initialize: updateSourceFile: " + (new Date().getTime() - start)); } if (sourceFile) { this.currentFileVersion = version; - this.currentFilename = filename; + this.currentFileName = fileName; this.currentSourceFile = sourceFile; } }; - SyntaxTreeCache.prototype.getCurrentSourceFile = function (filename) { - this.initialize(filename); + SyntaxTreeCache.prototype.getCurrentSourceFile = function (fileName) { + this.initialize(fileName); return this.currentSourceFile; }; - SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (filename) { - return this.getCurrentSourceFile(filename).scriptSnapshot; + SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (fileName) { + return this.getCurrentSourceFile(fileName).scriptSnapshot; }; return SyntaxTreeCache; })(); - function setSourceFileFields(sourceFile, scriptSnapshot, version, isOpen) { + function setSourceFileFields(sourceFile, scriptSnapshot, version) { sourceFile.version = version; - sourceFile.isOpen = isOpen; sourceFile.scriptSnapshot = scriptSnapshot; } - function createLanguageServiceSourceFile(filename, scriptSnapshot, scriptTarget, version, isOpen, setNodeParents) { - var sourceFile = ts.createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), scriptTarget, setNodeParents); - setSourceFileFields(sourceFile, scriptSnapshot, version, isOpen); + function createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, setNodeParents) { + var sourceFile = ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), scriptTarget, setNodeParents); + setSourceFileFields(sourceFile, scriptSnapshot, version); sourceFile.nameTable = sourceFile.identifiers; return sourceFile; } ts.createLanguageServiceSourceFile = createLanguageServiceSourceFile; ts.disableIncrementalParsing = false; - function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version, isOpen, textChangeRange) { - if (textChangeRange && ts.Debug.shouldAssert(1 /* Normal */)) { + function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version, textChangeRange) { + if (textChangeRange && ts.Debug.shouldAssert(1)) { var oldText = sourceFile.scriptSnapshot; var newText = scriptSnapshot; ts.Debug.assert((oldText.getLength() - textChangeRange.span.length + textChangeRange.newLength) === newText.getLength()); - if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + if (ts.Debug.shouldAssert(3)) { var oldTextPrefix = oldText.getText(0, textChangeRange.span.start); var newTextPrefix = newText.getText(0, textChangeRange.span.start); ts.Debug.assert(oldTextPrefix === newTextPrefix); @@ -24483,16 +24626,16 @@ var ts; } } if (textChangeRange) { - if (version !== sourceFile.version || isOpen != sourceFile.isOpen) { + if (version !== sourceFile.version) { if (!ts.disableIncrementalParsing) { - var newSourceFile = sourceFile.update(scriptSnapshot.getText(0, scriptSnapshot.getLength()), textChangeRange); - setSourceFileFields(newSourceFile, scriptSnapshot, version, isOpen); + var newSourceFile = ts.updateSourceFile(sourceFile, scriptSnapshot.getText(0, scriptSnapshot.getLength()), textChangeRange); + setSourceFileFields(newSourceFile, scriptSnapshot, version); newSourceFile.nameTable = undefined; return newSourceFile; } } } - return createLanguageServiceSourceFile(sourceFile.filename, scriptSnapshot, sourceFile.languageVersion, version, isOpen, true); + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, true); } ts.updateLanguageServiceSourceFile = updateLanguageServiceSourceFile; function createDocumentRegistry() { @@ -24528,12 +24671,12 @@ var ts; }); return JSON.stringify(bucketInfoArray, null, 2); } - function acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen) { + function acquireDocument(fileName, compilationSettings, scriptSnapshot, version) { var bucket = getBucketForCompilationSettings(compilationSettings, true); - var entry = ts.lookUp(bucket, filename); + var entry = ts.lookUp(bucket, fileName); if (!entry) { - var sourceFile = createLanguageServiceSourceFile(filename, scriptSnapshot, compilationSettings.target, version, isOpen, false); - bucket[filename] = entry = { + var sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, compilationSettings.target, version, false); + bucket[fileName] = entry = { sourceFile: sourceFile, refCount: 0, owners: [] @@ -24542,22 +24685,22 @@ var ts; entry.refCount++; return entry.sourceFile; } - function updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange) { + function updateDocument(sourceFile, fileName, compilationSettings, scriptSnapshot, version, textChangeRange) { var bucket = getBucketForCompilationSettings(compilationSettings, false); ts.Debug.assert(bucket !== undefined); - var entry = ts.lookUp(bucket, filename); + var entry = ts.lookUp(bucket, fileName); ts.Debug.assert(entry !== undefined); - entry.sourceFile = updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version, isOpen, textChangeRange); + entry.sourceFile = updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version, textChangeRange); return entry.sourceFile; } - function releaseDocument(filename, compilationSettings) { + function releaseDocument(fileName, compilationSettings) { var bucket = getBucketForCompilationSettings(compilationSettings, false); ts.Debug.assert(bucket !== undefined); - var entry = ts.lookUp(bucket, filename); + var entry = ts.lookUp(bucket, fileName); entry.refCount--; ts.Debug.assert(entry.refCount >= 0); if (entry.refCount === 0) { - delete bucket[filename]; + delete bucket[fileName]; } } return { @@ -24590,22 +24733,22 @@ var ts; function processImport() { scanner.setText(sourceText); var token = scanner.scan(); - while (token !== 1 /* EndOfFileToken */) { - if (token === 84 /* ImportKeyword */) { + while (token !== 1) { + if (token === 84) { token = scanner.scan(); - if (token === 64 /* Identifier */) { + if (token === 64) { token = scanner.scan(); - if (token === 52 /* EqualsToken */) { + if (token === 52) { token = scanner.scan(); - if (token === 116 /* RequireKeyword */) { + if (token === 116) { token = scanner.scan(); - if (token === 16 /* OpenParenToken */) { + if (token === 16) { token = scanner.scan(); - if (token === 8 /* StringLiteral */) { + if (token === 8) { var importPath = scanner.getTokenValue(); var pos = scanner.getTokenPos(); importedFiles.push({ - filename: importPath, + fileName: importPath, pos: pos, end: pos + importPath.length }); @@ -24628,7 +24771,7 @@ var ts; ts.preProcessFile = preProcessFile; function getTargetLabel(referenceNode, labelName) { while (referenceNode) { - if (referenceNode.kind === 184 /* LabeledStatement */ && referenceNode.label.text === labelName) { + if (referenceNode.kind === 184 && referenceNode.label.text === labelName) { return referenceNode.label; } referenceNode = referenceNode.parent; @@ -24636,13 +24779,13 @@ var ts; return undefined; } function isJumpStatementTarget(node) { - return node.kind === 64 /* Identifier */ && (node.parent.kind === 180 /* BreakStatement */ || node.parent.kind === 179 /* ContinueStatement */) && node.parent.label === node; + return node.kind === 64 && (node.parent.kind === 180 || node.parent.kind === 179) && node.parent.label === node; } function isLabelOfLabeledStatement(node) { - return node.kind === 64 /* Identifier */ && node.parent.kind === 184 /* LabeledStatement */ && node.parent.label === node; + return node.kind === 64 && node.parent.kind === 184 && node.parent.label === node; } function isLabeledBy(node, labelName) { - for (var owner = node.parent; owner.kind === 184 /* LabeledStatement */; owner = owner.parent) { + for (var owner = node.parent; owner.kind === 184; owner = owner.parent) { if (owner.label.text === labelName) { return true; } @@ -24653,53 +24796,53 @@ var ts; return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); } function isRightSideOfQualifiedName(node) { - return node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node; + return node.parent.kind === 121 && node.parent.right === node; } function isRightSideOfPropertyAccess(node) { - return node && node.parent && node.parent.kind === 149 /* PropertyAccessExpression */ && node.parent.name === node; + return node && node.parent && node.parent.kind === 149 && node.parent.name === node; } function isCallExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 151 /* CallExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 151 && node.parent.expression === node; } function isNewExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 152 /* NewExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 152 && node.parent.expression === node; } function isNameOfModuleDeclaration(node) { - return node.parent.kind === 195 /* ModuleDeclaration */ && node.parent.name === node; + return node.parent.kind === 195 && node.parent.name === node; } function isNameOfFunctionDeclaration(node) { - return node.kind === 64 /* Identifier */ && ts.isAnyFunction(node.parent) && node.parent.name === node; + return node.kind === 64 && ts.isAnyFunction(node.parent) && node.parent.name === node; } function isNameOfPropertyAssignment(node) { - return (node.kind === 64 /* Identifier */ || node.kind === 8 /* StringLiteral */ || node.kind === 7 /* NumericLiteral */) && (node.parent.kind === 204 /* PropertyAssignment */ || node.parent.kind === 205 /* ShorthandPropertyAssignment */) && node.parent.name === node; + return (node.kind === 64 || node.kind === 8 || node.kind === 7) && (node.parent.kind === 204 || node.parent.kind === 205) && node.parent.name === node; } function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { - if (node.kind === 8 /* StringLiteral */ || node.kind === 7 /* NumericLiteral */) { + if (node.kind === 8 || node.kind === 7) { switch (node.parent.kind) { - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 204 /* PropertyAssignment */: - case 206 /* EnumMember */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 195 /* ModuleDeclaration */: + case 126: + case 125: + case 204: + case 206: + case 128: + case 127: + case 130: + case 131: + case 195: return node.parent.name === node; - case 150 /* ElementAccessExpression */: + case 150: return node.parent.argumentExpression === node; } } return false; } function isNameOfExternalModuleImportOrDeclaration(node) { - if (node.kind === 8 /* StringLiteral */) { + if (node.kind === 8) { return isNameOfModuleDeclaration(node) || (ts.isExternalModuleImportDeclaration(node.parent.parent) && ts.getExternalModuleImportDeclarationExpression(node.parent.parent) === node); } return false; @@ -24714,11 +24857,11 @@ var ts; else if (position === comment.end) { var text = sourceFile.text; var width = comment.end - comment.pos; - if (width <= 2 || text.charCodeAt(comment.pos + 1) === 47 /* slash */) { + if (width <= 2 || text.charCodeAt(comment.pos + 1) === 47) { return true; } else { - return !(text.charCodeAt(comment.end - 1) === 47 /* slash */ && text.charCodeAt(comment.end - 2) === 42 /* asterisk */); + return !(text.charCodeAt(comment.end - 1) === 47 && text.charCodeAt(comment.end - 2) === 42); } } return false; @@ -24741,7 +24884,7 @@ var ts; BreakContinueSearchType[BreakContinueSearchType["All"] = 3] = "All"; })(BreakContinueSearchType || (BreakContinueSearchType = {})); var keywordCompletions = []; - for (var i = 65 /* FirstKeyword */; i <= 120 /* LastKeyword */; i++) { + for (var i = 65; i <= 120; i++) { keywordCompletions.push({ name: ts.tokenToString(i), kind: ScriptElementKind.keyword, @@ -24749,149 +24892,138 @@ var ts; }); } function createLanguageService(host, documentRegistry) { + if (documentRegistry === void 0) { documentRegistry = createDocumentRegistry(); } var syntaxTreeCache = new SyntaxTreeCache(host); var ruleProvider; - var hostCache; var program; var typeInfoResolver; - var useCaseSensitivefilenames = false; - var sourceFilesByName = {}; - var documentRegistry = documentRegistry; + var useCaseSensitivefileNames = false; var cancellationToken = new CancellationTokenObject(host.getCancellationToken && host.getCancellationToken()); var activeCompletionSession; if (!ts.localizedDiagnosticMessages && host.getLocalizedDiagnosticMessages) { ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); } - function getCanonicalFileName(filename) { - return useCaseSensitivefilenames ? filename : filename.toLowerCase(); + function log(message) { + if (host.log) { + host.log(message); + } } - function getSourceFile(filename) { - return ts.lookUp(sourceFilesByName, getCanonicalFileName(filename)); + function getCanonicalFileName(fileName) { + return useCaseSensitivefileNames ? fileName : fileName.toLowerCase(); } - function getDiagnosticsProducingTypeChecker() { - return program.getTypeChecker(true); + function getValidSourceFile(fileName) { + var sourceFile = program.getSourceFile(getCanonicalFileName(fileName)); + if (!sourceFile) { + throw new Error("Could not find file: '" + fileName + "'."); + } + return sourceFile; } function getRuleProvider(options) { if (!ruleProvider) { - ruleProvider = new ts.formatting.RulesProvider(host); + ruleProvider = new ts.formatting.RulesProvider(); } ruleProvider.ensureUpToDate(options); return ruleProvider; } - function createCompilerHost() { - return { - getSourceFile: function (filename, languageVersion) { - var sourceFile = getSourceFile(filename); - return sourceFile && sourceFile.getSourceFile(); - }, - getCancellationToken: function () { return cancellationToken; }, - getCanonicalFileName: function (filename) { return useCaseSensitivefilenames ? filename : filename.toLowerCase(); }, - useCaseSensitiveFileNames: function () { return useCaseSensitivefilenames; }, - getNewLine: function () { - return host.getNewLine ? host.getNewLine() : "\r\n"; - }, - getDefaultLibFilename: function (options) { - return host.getDefaultLibFilename(options); - }, - writeFile: function (filename, data, writeByteOrderMark) { - }, - getCurrentDirectory: function () { - return host.getCurrentDirectory(); - } - }; - } - function sourceFileUpToDate(sourceFile) { - return sourceFile && sourceFile.version === hostCache.getVersion(sourceFile.filename) && sourceFile.isOpen === hostCache.isOpen(sourceFile.filename); - } - function programUpToDate() { - if (!program) { - return false; - } - var hostFilenames = hostCache.getFilenames(); - if (program.getSourceFiles().length !== hostFilenames.length) { - return false; - } - for (var i = 0, n = hostFilenames.length; i < n; i++) { - if (!sourceFileUpToDate(program.getSourceFile(hostFilenames[i]))) { - return false; - } - } - return ts.compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings()); - } function synchronizeHostData() { - hostCache = new HostCache(host); + var hostCache = new HostCache(host); if (programUpToDate()) { return; } - var compilationSettings = hostCache.compilationSettings(); - var oldProgram = program; - if (oldProgram) { - var oldSettings = program.getCompilerOptions(); - var settingsChangeAffectsSyntax = oldSettings.target !== compilationSettings.target || oldSettings.module !== compilationSettings.module; - var changesInCompilationSettingsAffectSyntax = oldSettings && compilationSettings && !ts.compareDataObjects(oldSettings, compilationSettings) && settingsChangeAffectsSyntax; + var oldSettings = program && program.getCompilerOptions(); + var newSettings = hostCache.compilationSettings(); + var changesInCompilationSettingsAffectSyntax = oldSettings && oldSettings.target !== newSettings.target; + var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, { + getSourceFile: getOrCreateSourceFile, + getCancellationToken: function () { return cancellationToken; }, + getCanonicalFileName: function (fileName) { return useCaseSensitivefileNames ? fileName : fileName.toLowerCase(); }, + useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; }, + getNewLine: function () { return host.getNewLine ? host.getNewLine() : "\r\n"; }, + getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); }, + writeFile: function (fileName, data, writeByteOrderMark) { + }, + getCurrentDirectory: function () { return host.getCurrentDirectory(); } + }); + if (program) { var oldSourceFiles = program.getSourceFiles(); for (var i = 0, n = oldSourceFiles.length; i < n; i++) { - cancellationToken.throwIfCancellationRequested(); - var filename = oldSourceFiles[i].filename; - if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) { - documentRegistry.releaseDocument(filename, oldSettings); - delete sourceFilesByName[getCanonicalFileName(filename)]; + var fileName = oldSourceFiles[i].fileName; + if (!newProgram.getSourceFile(fileName) || changesInCompilationSettingsAffectSyntax) { + documentRegistry.releaseDocument(fileName, oldSettings); } } } - var hostfilenames = hostCache.getFilenames(); - for (var i = 0, n = hostfilenames.length; i < n; i++) { - var filename = hostfilenames[i]; - var version = hostCache.getVersion(filename); - var isOpen = hostCache.isOpen(filename); - var scriptSnapshot = hostCache.getScriptSnapshot(filename); - var sourceFile = getSourceFile(filename); - if (sourceFile) { - if (sourceFileUpToDate(sourceFile)) { - continue; - } - var textChangeRange = null; - if (sourceFile.isOpen && isOpen) { - textChangeRange = hostCache.getChangeRange(filename, sourceFile.version, sourceFile.scriptSnapshot); - } - sourceFile = documentRegistry.updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange); + program = newProgram; + typeInfoResolver = program.getTypeChecker(); + return; + function getOrCreateSourceFile(fileName) { + cancellationToken.throwIfCancellationRequested(); + var hostFileInformation = hostCache.getOrCreateEntry(fileName); + if (!hostFileInformation) { + return undefined; } - else { - sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen); + if (!changesInCompilationSettingsAffectSyntax) { + var oldSourceFile = program && program.getSourceFile(fileName); + if (oldSourceFile) { + if (sourceFileUpToDate(oldSourceFile)) { + return oldSourceFile; + } + var textChangeRange = hostCache.getChangeRange(fileName, oldSourceFile.version, oldSourceFile.scriptSnapshot); + return documentRegistry.updateDocument(oldSourceFile, fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, textChangeRange); + } } - sourceFilesByName[getCanonicalFileName(filename)] = sourceFile; + return documentRegistry.acquireDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version); } - program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost()); - typeInfoResolver = program.getTypeChecker(false); + function sourceFileUpToDate(sourceFile) { + return sourceFile && sourceFile.version === hostCache.getVersion(sourceFile.fileName); + } + function programUpToDate() { + if (!program) { + return false; + } + var rootFileNames = hostCache.getRootFileNames(); + if (program.getSourceFiles().length !== rootFileNames.length) { + return false; + } + for (var i = 0, n = rootFileNames.length; i < n; i++) { + if (!sourceFileUpToDate(program.getSourceFile(rootFileNames[i]))) { + return false; + } + } + return ts.compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings()); + } + } + function getProgram() { + synchronizeHostData(); + return program; } function cleanupSemanticCache() { if (program) { - typeInfoResolver = program.getTypeChecker(false); + typeInfoResolver = program.getTypeChecker(); } } function dispose() { if (program) { ts.forEach(program.getSourceFiles(), function (f) { - documentRegistry.releaseDocument(f.filename, program.getCompilerOptions()); + documentRegistry.releaseDocument(f.fileName, program.getCompilerOptions()); }); } } - function getSyntacticDiagnostics(filename) { + function getSyntacticDiagnostics(fileName) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - return program.getDiagnostics(getSourceFile(filename)); + fileName = ts.normalizeSlashes(fileName); + return program.getSyntacticDiagnostics(getValidSourceFile(fileName)); } - function getSemanticDiagnostics(filename) { + function getSemanticDiagnostics(fileName) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - var compilerOptions = program.getCompilerOptions(); - var checker = getDiagnosticsProducingTypeChecker(); - var targetSourceFile = getSourceFile(filename); - var allDiagnostics = checker.getDiagnostics(targetSourceFile); - if (compilerOptions.declaration) { - allDiagnostics = allDiagnostics.concat(program.getDeclarationDiagnostics(targetSourceFile)); + fileName = ts.normalizeSlashes(fileName); + var targetSourceFile = getValidSourceFile(fileName); + var semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile); + if (!program.getCompilerOptions().declaration) { + return semanticDiagnostics; } - return allDiagnostics; + var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile); + return semanticDiagnostics.concat(declarationDiagnostics); } function getCompilerOptionsDiagnostics() { synchronizeHostData(); @@ -24901,10 +25033,10 @@ var ts; var displayName = symbol.getName(); if (displayName && displayName.length > 0) { var firstCharCode = displayName.charCodeAt(0); - if ((symbol.flags & 1536 /* Namespace */) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { + if ((symbol.flags & 1536) && (firstCharCode === 39 || firstCharCode === 34)) { return undefined; } - if (displayName && displayName.length >= 2 && firstCharCode === displayName.charCodeAt(displayName.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { + if (displayName && displayName.length >= 2 && firstCharCode === displayName.charCodeAt(displayName.length - 1) && (firstCharCode === 39 || firstCharCode === 34)) { displayName = displayName.substring(1, displayName.length - 1); } var isValid = ts.isIdentifierStart(displayName.charCodeAt(0), target); @@ -24928,40 +25060,40 @@ var ts; kindModifiers: getSymbolModifiers(symbol) }; } - function getCompletionsAtPosition(filename, position) { + function getCompletionsAtPosition(fileName, position) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); + fileName = ts.normalizeSlashes(fileName); var syntacticStart = new Date().getTime(); - var sourceFile = getSourceFile(filename); + var sourceFile = getValidSourceFile(fileName); var start = new Date().getTime(); var currentToken = ts.getTokenAtPosition(sourceFile, position); - host.log("getCompletionsAtPosition: Get current token: " + (new Date().getTime() - start)); + log("getCompletionsAtPosition: Get current token: " + (new Date().getTime() - start)); var start = new Date().getTime(); var insideComment = isInsideComment(sourceFile, currentToken, position); - host.log("getCompletionsAtPosition: Is inside comment: " + (new Date().getTime() - start)); + log("getCompletionsAtPosition: Is inside comment: " + (new Date().getTime() - start)); if (insideComment) { - host.log("Returning an empty list because completion was inside a comment."); + log("Returning an empty list because completion was inside a comment."); return undefined; } var start = new Date().getTime(); var previousToken = ts.findPrecedingToken(position, sourceFile); - host.log("getCompletionsAtPosition: Get previous token 1: " + (new Date().getTime() - start)); - if (previousToken && position <= previousToken.end && previousToken.kind === 64 /* Identifier */) { + log("getCompletionsAtPosition: Get previous token 1: " + (new Date().getTime() - start)); + if (previousToken && position <= previousToken.end && previousToken.kind === 64) { var start = new Date().getTime(); previousToken = ts.findPrecedingToken(previousToken.pos, sourceFile); - host.log("getCompletionsAtPosition: Get previous token 2: " + (new Date().getTime() - start)); + log("getCompletionsAtPosition: Get previous token 2: " + (new Date().getTime() - start)); } if (previousToken && isCompletionListBlocker(previousToken)) { - host.log("Returning an empty list because completion was requested in an invalid position."); + log("Returning an empty list because completion was requested in an invalid position."); return undefined; } var node; var isRightOfDot; - if (previousToken && previousToken.kind === 20 /* DotToken */ && previousToken.parent.kind === 149 /* PropertyAccessExpression */) { + if (previousToken && previousToken.kind === 20 && previousToken.parent.kind === 149) { node = previousToken.parent.expression; isRightOfDot = true; } - else if (previousToken && previousToken.kind === 20 /* DotToken */ && previousToken.parent.kind === 121 /* QualifiedName */) { + else if (previousToken && previousToken.kind === 20 && previousToken.parent.kind === 121) { node = previousToken.parent.left; isRightOfDot = true; } @@ -24970,24 +25102,25 @@ var ts; isRightOfDot = false; } activeCompletionSession = { - filename: filename, + fileName: fileName, position: position, entries: [], symbols: {}, typeChecker: typeInfoResolver }; - host.log("getCompletionsAtPosition: Syntactic work: " + (new Date().getTime() - syntacticStart)); + log("getCompletionsAtPosition: Syntactic work: " + (new Date().getTime() - syntacticStart)); var location = ts.getTouchingPropertyName(sourceFile, position); var semanticStart = new Date().getTime(); if (isRightOfDot) { var symbols = []; var isMemberCompletion = true; - if (node.kind === 64 /* Identifier */ || node.kind === 121 /* QualifiedName */ || node.kind === 149 /* PropertyAccessExpression */) { + var isNewIdentifierLocation = false; + if (node.kind === 64 || node.kind === 121 || node.kind === 149) { var symbol = typeInfoResolver.getSymbolAtLocation(node); - if (symbol && symbol.flags & 8388608 /* Import */) { + if (symbol && symbol.flags & 8388608) { symbol = typeInfoResolver.getAliasedSymbol(symbol); } - if (symbol && symbol.flags & 1952 /* HasExports */) { + if (symbol && symbol.flags & 1952) { ts.forEachValue(symbol.exports, function (symbol) { if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) { symbols.push(symbol); @@ -25009,6 +25142,7 @@ var ts; var containingObjectLiteral = getContainingObjectLiteralApplicableForCompletion(previousToken); if (containingObjectLiteral) { isMemberCompletion = true; + isNewIdentifierLocation = true; var contextualType = typeInfoResolver.getContextualType(containingObjectLiteral); if (!contextualType) { return undefined; @@ -25021,7 +25155,8 @@ var ts; } else { isMemberCompletion = false; - var symbolMeanings = 793056 /* Type */ | 107455 /* Value */ | 1536 /* Namespace */ | 8388608 /* Import */; + isNewIdentifierLocation = isNewIdentifierDefinitionLocation(previousToken); + var symbolMeanings = 793056 | 107455 | 1536 | 8388608; var symbols = typeInfoResolver.getSymbolsInScope(node, symbolMeanings); getCompletionEntriesFromSymbols(symbols, activeCompletionSession); } @@ -25029,9 +25164,11 @@ var ts; if (!isMemberCompletion) { Array.prototype.push.apply(activeCompletionSession.entries, keywordCompletions); } - host.log("getCompletionsAtPosition: Semantic work: " + (new Date().getTime() - semanticStart)); + log("getCompletionsAtPosition: Semantic work: " + (new Date().getTime() - semanticStart)); return { isMemberCompletion: isMemberCompletion, + isNewIdentifierLocation: isNewIdentifierLocation, + isBuilder: isNewIdentifierDefinitionLocation, entries: activeCompletionSession.entries }; function getCompletionEntriesFromSymbols(symbols, session) { @@ -25046,16 +25183,52 @@ var ts; } } }); - host.log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start)); + log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start)); } function isCompletionListBlocker(previousToken) { var start = new Date().getTime(); var result = isInStringOrRegularExpressionOrTemplateLiteral(previousToken) || isIdentifierDefinitionLocation(previousToken) || isRightOfIllegalDot(previousToken); - host.log("getCompletionsAtPosition: isCompletionListBlocker: " + (new Date().getTime() - start)); + log("getCompletionsAtPosition: isCompletionListBlocker: " + (new Date().getTime() - start)); return result; } + function isNewIdentifierDefinitionLocation(previousToken) { + if (previousToken) { + var containingNodeKind = previousToken.parent.kind; + switch (previousToken.kind) { + case 23: + return containingNodeKind === 151 || containingNodeKind === 129 || containingNodeKind === 152 || containingNodeKind === 147 || containingNodeKind === 163; + case 16: + return containingNodeKind === 151 || containingNodeKind === 129 || containingNodeKind === 152 || containingNodeKind === 155; + case 18: + return containingNodeKind === 147; + case 115: + return true; + case 20: + return containingNodeKind === 195; + case 14: + return containingNodeKind === 191; + case 52: + return containingNodeKind === 188 || containingNodeKind === 163; + case 11: + return containingNodeKind === 165; + case 12: + return containingNodeKind === 169; + case 107: + case 105: + case 106: + return containingNodeKind === 126; + } + switch (previousToken.getText()) { + case "public": + case "protected": + case "private": + return true; + } + } + return false; + } function isInStringOrRegularExpressionOrTemplateLiteral(previousToken) { - if (previousToken.kind === 8 /* StringLiteral */ || previousToken.kind === 9 /* RegularExpressionLiteral */ || ts.isTemplateLiteralKind(previousToken.kind)) { + if (previousToken.kind === 8 || previousToken.kind === 9 || ts.isTemplateLiteralKind(previousToken.kind)) { var start = previousToken.getStart(); var end = previousToken.getEnd(); if (start < position && position < end) { @@ -25071,9 +25244,9 @@ var ts; if (previousToken) { var parent = previousToken.parent; switch (previousToken.kind) { - case 14 /* OpenBraceToken */: - case 23 /* CommaToken */: - if (parent && parent.kind === 148 /* ObjectLiteralExpression */) { + case 14: + case 23: + if (parent && parent.kind === 148) { return parent; } break; @@ -25083,17 +25256,16 @@ var ts; } function isFunction(kind) { switch (kind) { - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 132 /* CallSignature */: - case 133 /* ConstructSignature */: - case 134 /* IndexSignature */: + case 156: + case 157: + case 190: + case 128: + case 127: + case 130: + case 131: + case 132: + case 133: + case 134: return true; } return false; @@ -25102,44 +25274,58 @@ var ts; if (previousToken) { var containingNodeKind = previousToken.parent.kind; switch (previousToken.kind) { - case 23 /* CommaToken */: - return containingNodeKind === 188 /* VariableDeclaration */ || containingNodeKind === 189 /* VariableDeclarationList */ || containingNodeKind === 171 /* VariableStatement */ || containingNodeKind === 194 /* EnumDeclaration */ || isFunction(containingNodeKind); - case 16 /* OpenParenToken */: - return containingNodeKind === 203 /* CatchClause */ || isFunction(containingNodeKind); - case 14 /* OpenBraceToken */: - return containingNodeKind === 194 /* EnumDeclaration */ || containingNodeKind === 192 /* InterfaceDeclaration */; - case 22 /* SemicolonToken */: - return containingNodeKind === 125 /* PropertySignature */ && previousToken.parent.parent.kind === 192 /* InterfaceDeclaration */; - case 107 /* PublicKeyword */: - case 105 /* PrivateKeyword */: - case 108 /* StaticKeyword */: - case 21 /* DotDotDotToken */: - return containingNodeKind === 124 /* Parameter */; - case 68 /* ClassKeyword */: - case 115 /* ModuleKeyword */: - case 76 /* EnumKeyword */: - case 102 /* InterfaceKeyword */: - case 82 /* FunctionKeyword */: - case 97 /* VarKeyword */: - case 114 /* GetKeyword */: - case 118 /* SetKeyword */: - case 84 /* ImportKeyword */: + case 23: + return containingNodeKind === 188 || containingNodeKind === 189 || containingNodeKind === 171 || containingNodeKind === 194 || isFunction(containingNodeKind) || containingNodeKind === 191 || containingNodeKind === 190 || containingNodeKind === 192 || containingNodeKind === 145 || containingNodeKind === 144; + case 20: + return containingNodeKind === 145; + case 18: + return containingNodeKind === 145; + case 16: + return containingNodeKind === 203 || isFunction(containingNodeKind); + case 14: + return containingNodeKind === 194 || containingNodeKind === 192 || containingNodeKind === 139 || containingNodeKind === 144; + case 22: + return containingNodeKind === 125 && (previousToken.parent.parent.kind === 192 || previousToken.parent.parent.kind === 139); + case 24: + return containingNodeKind === 191 || containingNodeKind === 190 || containingNodeKind === 192 || isFunction(containingNodeKind); + case 108: + return containingNodeKind === 126; + case 21: + return containingNodeKind === 124 || containingNodeKind === 129 || (previousToken.parent.parent.kind === 145); + case 107: + case 105: + case 106: + return containingNodeKind === 124; + case 68: + case 76: + case 102: + case 82: + case 97: + case 114: + case 118: + case 84: + case 103: + case 69: + case 109: return true; } switch (previousToken.getText()) { case "class": case "interface": case "enum": - case "module": case "function": case "var": + case "static": + case "let": + case "const": + case "yield": return true; } } return false; } function isRightOfIllegalDot(previousToken) { - if (previousToken && previousToken.kind === 7 /* NumericLiteral */) { + if (previousToken && previousToken.kind === 7) { var text = previousToken.getFullText(); return text.charAt(text.length - 1) === "."; } @@ -25151,7 +25337,7 @@ var ts; } var existingMemberNames = {}; ts.forEach(existingMembers, function (m) { - if (m.kind !== 204 /* PropertyAssignment */ && m.kind !== 205 /* ShorthandPropertyAssignment */) { + if (m.kind !== 204 && m.kind !== 205) { return; } if (m.getStart() <= position && position <= m.getEnd()) { @@ -25168,11 +25354,11 @@ var ts; return filteredMembers; } } - function getCompletionEntryDetails(filename, position, entryName) { - filename = ts.normalizeSlashes(filename); - var sourceFile = getSourceFile(filename); + function getCompletionEntryDetails(fileName, position, entryName) { + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getValidSourceFile(fileName); var session = activeCompletionSession; - if (!session || session.filename !== filename || session.position !== position) { + if (!session || session.fileName !== fileName || session.position !== position) { return undefined; } var symbol = ts.lookUp(activeCompletionSession.symbols, ts.escapeIdentifier(entryName)); @@ -25180,7 +25366,7 @@ var ts; var location = ts.getTouchingPropertyName(sourceFile, position); var completionEntry = createCompletionEntry(symbol, session.typeChecker, location); ts.Debug.assert(session.typeChecker.getTypeOfSymbolAtLocation(symbol, location) !== undefined, "Could not find type for symbol"); - var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), location, session.typeChecker, location, 7 /* All */); + var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getValidSourceFile(fileName), location, session.typeChecker, location, 7); return { name: entryName, kind: displayPartsDocumentationsAndSymbolKind.symbolKind, @@ -25194,7 +25380,7 @@ var ts; name: entryName, kind: ScriptElementKind.keyword, kindModifiers: ScriptElementKindModifier.none, - displayParts: [ts.displayPart(entryName, 5 /* keyword */)], + displayParts: [ts.displayPart(entryName, 5)], documentation: undefined }; } @@ -25206,42 +25392,42 @@ var ts; return undefined; } switch (node.kind) { - case 207 /* SourceFile */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 191 /* ClassDeclaration */: - case 192 /* InterfaceDeclaration */: - case 194 /* EnumDeclaration */: - case 195 /* ModuleDeclaration */: + case 207: + case 128: + case 127: + case 190: + case 156: + case 130: + case 131: + case 191: + case 192: + case 194: + case 195: return node; } } } function getSymbolKind(symbol, typeResolver, location) { var flags = symbol.getFlags(); - if (flags & 32 /* Class */) + if (flags & 32) return ScriptElementKind.classElement; - if (flags & 384 /* Enum */) + if (flags & 384) return ScriptElementKind.enumElement; - if (flags & 524288 /* TypeAlias */) + if (flags & 524288) return ScriptElementKind.typeElement; - if (flags & 64 /* Interface */) + if (flags & 64) return ScriptElementKind.interfaceElement; - if (flags & 262144 /* TypeParameter */) + if (flags & 262144) return ScriptElementKind.typeParameterElement; var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver, location); if (result === ScriptElementKind.unknown) { - if (flags & 262144 /* TypeParameter */) + if (flags & 262144) return ScriptElementKind.typeParameterElement; - if (flags & 8 /* EnumMember */) + if (flags & 8) return ScriptElementKind.variableElement; - if (flags & 8388608 /* Import */) + if (flags & 8388608) return ScriptElementKind.alias; - if (flags & 1536 /* Module */) + if (flags & 1536) return ScriptElementKind.moduleElement; } return result; @@ -25253,7 +25439,7 @@ var ts; if (typeResolver.isArgumentsSymbol(symbol)) { return ScriptElementKind.localVariableElement; } - if (flags & 3 /* Variable */) { + if (flags & 3) { if (ts.isFirstDeclarationOfSymbolParameter(symbol)) { return ScriptElementKind.parameterElement; } @@ -25265,24 +25451,24 @@ var ts; } return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement; } - if (flags & 16 /* Function */) + if (flags & 16) return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement; - if (flags & 32768 /* GetAccessor */) + if (flags & 32768) return ScriptElementKind.memberGetAccessorElement; - if (flags & 65536 /* SetAccessor */) + if (flags & 65536) return ScriptElementKind.memberSetAccessorElement; - if (flags & 8192 /* Method */) + if (flags & 8192) return ScriptElementKind.memberFunctionElement; - if (flags & 16384 /* Constructor */) + if (flags & 16384) return ScriptElementKind.constructorImplementationElement; - if (flags & 4 /* Property */) { - if (flags & 268435456 /* UnionProperty */) { + if (flags & 4) { + if (flags & 268435456) { var unionPropertyKind = ts.forEach(typeInfoResolver.getRootSymbols(symbol), function (rootSymbol) { var rootSymbolFlags = rootSymbol.getFlags(); - if (rootSymbolFlags & (98308 /* PropertyOrAccessor */ | 3 /* Variable */)) { + if (rootSymbolFlags & (98308 | 3)) { return ScriptElementKind.memberVariableElement; } - ts.Debug.assert(!!(rootSymbolFlags & 8192 /* Method */)); + ts.Debug.assert(!!(rootSymbolFlags & 8192)); }); if (!unionPropertyKind) { var typeOfUnionProperty = typeInfoResolver.getTypeOfSymbolAtLocation(symbol, location); @@ -25299,45 +25485,45 @@ var ts; } function getTypeKind(type) { var flags = type.getFlags(); - if (flags & 128 /* Enum */) + if (flags & 128) return ScriptElementKind.enumElement; - if (flags & 1024 /* Class */) + if (flags & 1024) return ScriptElementKind.classElement; - if (flags & 2048 /* Interface */) + if (flags & 2048) return ScriptElementKind.interfaceElement; - if (flags & 512 /* TypeParameter */) + if (flags & 512) return ScriptElementKind.typeParameterElement; - if (flags & 127 /* Intrinsic */) + if (flags & 127) return ScriptElementKind.primitiveType; - if (flags & 256 /* StringLiteral */) + if (flags & 256) return ScriptElementKind.primitiveType; return ScriptElementKind.unknown; } function getNodeKind(node) { switch (node.kind) { - case 195 /* ModuleDeclaration */: return ScriptElementKind.moduleElement; - case 191 /* ClassDeclaration */: return ScriptElementKind.classElement; - case 192 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement; - case 193 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement; - case 194 /* EnumDeclaration */: return ScriptElementKind.enumElement; - case 188 /* VariableDeclaration */: + case 195: return ScriptElementKind.moduleElement; + case 191: return ScriptElementKind.classElement; + case 192: return ScriptElementKind.interfaceElement; + case 193: return ScriptElementKind.typeElement; + case 194: return ScriptElementKind.enumElement; + case 188: return ts.isConst(node) ? ScriptElementKind.constElement : ts.isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement; - case 190 /* FunctionDeclaration */: return ScriptElementKind.functionElement; - case 130 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement; - case 131 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 190: return ScriptElementKind.functionElement; + case 130: return ScriptElementKind.memberGetAccessorElement; + case 131: return ScriptElementKind.memberSetAccessorElement; + case 128: + case 127: return ScriptElementKind.memberFunctionElement; - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 126: + case 125: return ScriptElementKind.memberVariableElement; - case 134 /* IndexSignature */: return ScriptElementKind.indexSignatureElement; - case 133 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement; - case 132 /* CallSignature */: return ScriptElementKind.callSignatureElement; - case 129 /* Constructor */: return ScriptElementKind.constructorImplementationElement; - case 123 /* TypeParameter */: return ScriptElementKind.typeParameterElement; - case 206 /* EnumMember */: return ScriptElementKind.variableElement; - case 124 /* Parameter */: return (node.flags & 112 /* AccessibilityModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case 134: return ScriptElementKind.indexSignatureElement; + case 133: return ScriptElementKind.constructSignatureElement; + case 132: return ScriptElementKind.callSignatureElement; + case 129: return ScriptElementKind.constructorImplementationElement; + case 123: return ScriptElementKind.typeParameterElement; + case 206: return ScriptElementKind.variableElement; + case 124: return (node.flags & 112) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; } return ScriptElementKind.unknown; } @@ -25351,20 +25537,20 @@ var ts; var symbolFlags = symbol.flags; var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, symbolFlags, typeResolver, location); var hasAddedSymbolInfo; - if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 32 /* Class */ || symbolFlags & 8388608 /* Import */) { + if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 32 || symbolFlags & 8388608) { if (symbolKind === ScriptElementKind.memberGetAccessorElement || symbolKind === ScriptElementKind.memberSetAccessorElement) { symbolKind = ScriptElementKind.memberVariableElement; } var type = typeResolver.getTypeOfSymbolAtLocation(symbol, location); if (type) { - if (location.parent && location.parent.kind === 149 /* PropertyAccessExpression */) { + if (location.parent && location.parent.kind === 149) { var right = location.parent.name; if (right === location || (right && right.getFullWidth() === 0)) { location = location.parent; } } var callExpression; - if (location.kind === 151 /* CallExpression */ || location.kind === 152 /* NewExpression */) { + if (location.kind === 151 || location.kind === 152) { callExpression = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { @@ -25376,24 +25562,24 @@ var ts; if (!signature && candidateSignatures.length) { signature = candidateSignatures[0]; } - var useConstructSignatures = callExpression.kind === 152 /* NewExpression */ || callExpression.expression.kind === 90 /* SuperKeyword */; + var useConstructSignatures = callExpression.kind === 152 || callExpression.expression.kind === 90; 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 & 32 /* Class */)) { + if (useConstructSignatures && (symbolFlags & 32)) { symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } - else if (symbolFlags & 8388608 /* Import */) { + else if (symbolFlags & 8388608) { symbolKind = ScriptElementKind.alias; - displayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); + displayParts.push(ts.punctuationPart(16)); displayParts.push(ts.textPart(symbolKind)); - displayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + displayParts.push(ts.punctuationPart(17)); displayParts.push(ts.spacePart()); if (useConstructSignatures) { - displayParts.push(ts.keywordPart(87 /* NewKeyword */)); + displayParts.push(ts.keywordPart(87)); displayParts.push(ts.spacePart()); } addFullSymbolName(symbol); @@ -25408,16 +25594,16 @@ var ts; case ScriptElementKind.letElement: case ScriptElementKind.parameterElement: case ScriptElementKind.localVariableElement: - displayParts.push(ts.punctuationPart(51 /* ColonToken */)); + displayParts.push(ts.punctuationPart(51)); displayParts.push(ts.spacePart()); if (useConstructSignatures) { - displayParts.push(ts.keywordPart(87 /* NewKeyword */)); + displayParts.push(ts.keywordPart(87)); displayParts.push(ts.spacePart()); } - if (!(type.flags & 32768 /* Anonymous */)) { - displayParts.push.apply(displayParts, ts.symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, undefined, 1 /* WriteTypeParametersOrArguments */)); + if (!(type.flags & 32768)) { + displayParts.push.apply(displayParts, ts.symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, undefined, 1)); } - addSignatureDisplayParts(signature, allSignatures, 8 /* WriteArrowStyleSignature */); + addSignatureDisplayParts(signature, allSignatures, 8); break; default: addSignatureDisplayParts(signature, allSignatures); @@ -25425,129 +25611,129 @@ var ts; hasAddedSymbolInfo = true; } } - else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304 /* Accessor */)) || (location.kind === 112 /* ConstructorKeyword */ && location.parent.kind === 129 /* Constructor */)) { + else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304)) || (location.kind === 112 && location.parent.kind === 129)) { var signature; var functionDeclaration = location.parent; - var allSignatures = functionDeclaration.kind === 129 /* Constructor */ ? type.getConstructSignatures() : type.getCallSignatures(); + var allSignatures = functionDeclaration.kind === 129 ? type.getConstructSignatures() : type.getCallSignatures(); if (!typeResolver.isImplementationOfOverload(functionDeclaration)) { signature = typeResolver.getSignatureFromDeclaration(functionDeclaration); } else { signature = allSignatures[0]; } - if (functionDeclaration.kind === 129 /* Constructor */) { + if (functionDeclaration.kind === 129) { symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { - addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 132 /* CallSignature */ && !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind); + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 132 && !(type.symbol.flags & 2048 || type.symbol.flags & 4096) ? type.symbol : symbol, symbolKind); } addSignatureDisplayParts(signature, allSignatures); hasAddedSymbolInfo = true; } } } - if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo) { - displayParts.push(ts.keywordPart(68 /* ClassKeyword */)); + if (symbolFlags & 32 && !hasAddedSymbolInfo) { + displayParts.push(ts.keywordPart(68)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); } - if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) { + if ((symbolFlags & 64) && (semanticMeaning & 2)) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(102 /* InterfaceKeyword */)); + displayParts.push(ts.keywordPart(102)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); } - if (symbolFlags & 524288 /* TypeAlias */) { + if (symbolFlags & 524288) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(120 /* TypeKeyword */)); + displayParts.push(ts.keywordPart(120)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); displayParts.push(ts.spacePart()); - displayParts.push(ts.operatorPart(52 /* EqualsToken */)); + displayParts.push(ts.operatorPart(52)); displayParts.push(ts.spacePart()); displayParts.push.apply(displayParts, ts.typeToDisplayParts(typeResolver, typeResolver.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration)); } - if (symbolFlags & 384 /* Enum */) { + if (symbolFlags & 384) { addNewLineIfDisplayPartsExist(); if (ts.forEach(symbol.declarations, ts.isConstEnumDeclaration)) { - displayParts.push(ts.keywordPart(69 /* ConstKeyword */)); + displayParts.push(ts.keywordPart(69)); displayParts.push(ts.spacePart()); } - displayParts.push(ts.keywordPart(76 /* EnumKeyword */)); + displayParts.push(ts.keywordPart(76)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } - if (symbolFlags & 1536 /* Module */) { + if (symbolFlags & 1536) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(115 /* ModuleKeyword */)); + displayParts.push(ts.keywordPart(115)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } - if ((symbolFlags & 262144 /* TypeParameter */) && (semanticMeaning & 2 /* Type */)) { + if ((symbolFlags & 262144) && (semanticMeaning & 2)) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); + displayParts.push(ts.punctuationPart(16)); displayParts.push(ts.textPart("type parameter")); - displayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + displayParts.push(ts.punctuationPart(17)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); displayParts.push(ts.spacePart()); - displayParts.push(ts.keywordPart(85 /* InKeyword */)); + displayParts.push(ts.keywordPart(85)); displayParts.push(ts.spacePart()); if (symbol.parent) { addFullSymbolName(symbol.parent, enclosingDeclaration); writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); } else { - var signatureDeclaration = ts.getDeclarationOfKind(symbol, 123 /* TypeParameter */).parent; + var signatureDeclaration = ts.getDeclarationOfKind(symbol, 123).parent; var signature = typeResolver.getSignatureFromDeclaration(signatureDeclaration); - if (signatureDeclaration.kind === 133 /* ConstructSignature */) { - displayParts.push(ts.keywordPart(87 /* NewKeyword */)); + if (signatureDeclaration.kind === 133) { + displayParts.push(ts.keywordPart(87)); displayParts.push(ts.spacePart()); } - else if (signatureDeclaration.kind !== 132 /* CallSignature */ && signatureDeclaration.name) { + else if (signatureDeclaration.kind !== 132 && signatureDeclaration.name) { addFullSymbolName(signatureDeclaration.symbol); } - displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */)); + displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, sourceFile, 32)); } } - if (symbolFlags & 8 /* EnumMember */) { + if (symbolFlags & 8) { addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; - if (declaration.kind === 206 /* EnumMember */) { - var constantValue = typeResolver.getEnumMemberValue(declaration); + if (declaration.kind === 206) { + var constantValue = typeResolver.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(ts.spacePart()); - displayParts.push(ts.operatorPart(52 /* EqualsToken */)); + displayParts.push(ts.operatorPart(52)); displayParts.push(ts.spacePart()); - displayParts.push(ts.displayPart(constantValue.toString(), 7 /* numericLiteral */)); + displayParts.push(ts.displayPart(constantValue.toString(), 7)); } } } - if (symbolFlags & 8388608 /* Import */) { + if (symbolFlags & 8388608) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(84 /* ImportKeyword */)); + displayParts.push(ts.keywordPart(84)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 197 /* ImportDeclaration */) { + if (declaration.kind === 197) { var importDeclaration = declaration; if (ts.isExternalModuleImportDeclaration(importDeclaration)) { displayParts.push(ts.spacePart()); - displayParts.push(ts.operatorPart(52 /* EqualsToken */)); + displayParts.push(ts.operatorPart(52)); displayParts.push(ts.spacePart()); - displayParts.push(ts.keywordPart(116 /* RequireKeyword */)); - displayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); - displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportDeclarationExpression(importDeclaration)), 8 /* stringLiteral */)); - displayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + displayParts.push(ts.keywordPart(116)); + displayParts.push(ts.punctuationPart(16)); + displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportDeclarationExpression(importDeclaration)), 8)); + displayParts.push(ts.punctuationPart(17)); } else { var internalAliasSymbol = typeResolver.getSymbolAtLocation(importDeclaration.moduleReference); if (internalAliasSymbol) { displayParts.push(ts.spacePart()); - displayParts.push(ts.operatorPart(52 /* EqualsToken */)); + displayParts.push(ts.operatorPart(52)); displayParts.push(ts.spacePart()); addFullSymbolName(internalAliasSymbol, enclosingDeclaration); } @@ -25560,10 +25746,10 @@ var ts; if (symbolKind !== ScriptElementKind.unknown) { if (type) { addPrefixForAnyFunctionOrVar(symbol, symbolKind); - if (symbolKind === ScriptElementKind.memberVariableElement || symbolFlags & 3 /* Variable */ || symbolKind === ScriptElementKind.localVariableElement) { - displayParts.push(ts.punctuationPart(51 /* ColonToken */)); + if (symbolKind === ScriptElementKind.memberVariableElement || symbolFlags & 3 || symbolKind === ScriptElementKind.localVariableElement) { + displayParts.push(ts.punctuationPart(51)); displayParts.push(ts.spacePart()); - if (type.symbol && type.symbol.flags & 262144 /* TypeParameter */) { + if (type.symbol && type.symbol.flags & 262144) { var typeParameterParts = ts.mapToDisplayParts(function (writer) { typeResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(type, writer, enclosingDeclaration); }); @@ -25573,7 +25759,7 @@ var ts; displayParts.push.apply(displayParts, ts.typeToDisplayParts(typeResolver, type, enclosingDeclaration)); } } - else if (symbolFlags & 16 /* Function */ || symbolFlags & 8192 /* Method */ || symbolFlags & 16384 /* Constructor */ || symbolFlags & 131072 /* Signature */ || symbolFlags & 98304 /* Accessor */ || symbolKind === ScriptElementKind.memberFunctionElement) { + else if (symbolFlags & 16 || symbolFlags & 8192 || symbolFlags & 16384 || symbolFlags & 131072 || symbolFlags & 98304 || symbolKind === ScriptElementKind.memberFunctionElement) { var allSignatures = type.getCallSignatures(); addSignatureDisplayParts(allSignatures[0], allSignatures); } @@ -25593,29 +25779,29 @@ var ts; } } function addFullSymbolName(symbol, enclosingDeclaration) { - var fullSymbolDisplayParts = ts.symbolToDisplayParts(typeResolver, symbol, enclosingDeclaration || sourceFile, undefined, 1 /* WriteTypeParametersOrArguments */ | 2 /* UseOnlyExternalAliasing */); + var fullSymbolDisplayParts = ts.symbolToDisplayParts(typeResolver, symbol, enclosingDeclaration || sourceFile, undefined, 1 | 2); displayParts.push.apply(displayParts, fullSymbolDisplayParts); } function addPrefixForAnyFunctionOrVar(symbol, symbolKind) { addNewLineIfDisplayPartsExist(); if (symbolKind) { - displayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); + displayParts.push(ts.punctuationPart(16)); displayParts.push(ts.textPart(symbolKind)); - displayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + displayParts.push(ts.punctuationPart(17)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } } function addSignatureDisplayParts(signature, allSignatures, flags) { - displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | 32 /* WriteTypeArgumentsOfSignature */)); + displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | 32)); if (allSignatures.length > 1) { displayParts.push(ts.spacePart()); - displayParts.push(ts.punctuationPart(16 /* OpenParenToken */)); - displayParts.push(ts.operatorPart(33 /* PlusToken */)); - displayParts.push(ts.displayPart((allSignatures.length - 1).toString(), 7 /* numericLiteral */)); + displayParts.push(ts.punctuationPart(16)); + displayParts.push(ts.operatorPart(33)); + displayParts.push(ts.displayPart((allSignatures.length - 1).toString(), 7)); displayParts.push(ts.spacePart()); displayParts.push(ts.textPart(allSignatures.length === 2 ? "overload" : "overloads")); - displayParts.push(ts.punctuationPart(17 /* CloseParenToken */)); + displayParts.push(ts.punctuationPart(17)); } documentation = signature.getDocumentationComment(); } @@ -25629,7 +25815,7 @@ var ts; function getQuickInfoAtPosition(fileName, position) { synchronizeHostData(); fileName = ts.normalizeSlashes(fileName); - var sourceFile = getSourceFile(fileName); + var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; @@ -25637,11 +25823,11 @@ var ts; var symbol = typeInfoResolver.getSymbolAtLocation(node); if (!symbol) { switch (node.kind) { - case 64 /* Identifier */: - case 149 /* PropertyAccessExpression */: - case 121 /* QualifiedName */: - case 92 /* ThisKeyword */: - case 90 /* SuperKeyword */: + case 64: + case 149: + case 121: + case 92: + case 90: var type = typeInfoResolver.getTypeAtLocation(node); if (type) { return { @@ -25664,10 +25850,10 @@ var ts; documentation: displayPartsDocumentationsAndKind.documentation }; } - function getDefinitionAtPosition(filename, position) { + function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; @@ -25682,10 +25868,10 @@ var ts; var referenceFile = ts.tryResolveScriptReference(program, sourceFile, comment); if (referenceFile) { return [{ - fileName: referenceFile.filename, + fileName: referenceFile.fileName, textSpan: ts.createTextSpanFromBounds(0, 0), kind: ScriptElementKind.scriptElement, - name: comment.filename, + name: comment.fileName, containerName: undefined, containerKind: undefined }]; @@ -25697,7 +25883,7 @@ var ts; return undefined; } var result = []; - if (node.parent.kind === 205 /* ShorthandPropertyAssignment */) { + if (node.parent.kind === 205) { var shorthandSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); var shorthandDeclarations = shorthandSymbol.getDeclarations(); var shorthandSymbolKind = getSymbolKind(shorthandSymbol, typeInfoResolver, node); @@ -25721,7 +25907,7 @@ var ts; return result; function getDefinitionInfo(node, symbolKind, symbolName, containerName) { return { - fileName: node.getSourceFile().filename, + fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()), kind: symbolKind, name: symbolName, @@ -25733,7 +25919,7 @@ var ts; var declarations = []; var definition; ts.forEach(signatureDeclarations, function (d) { - if ((selectConstructors && d.kind === 129 /* Constructor */) || (!selectConstructors && (d.kind === 190 /* FunctionDeclaration */ || d.kind === 128 /* MethodDeclaration */ || d.kind === 127 /* MethodSignature */))) { + if ((selectConstructors && d.kind === 129) || (!selectConstructors && (d.kind === 190 || d.kind === 128 || d.kind === 127))) { declarations.push(d); if (d.body) definition = d; @@ -25750,10 +25936,10 @@ var ts; return false; } function tryAddConstructSignature(symbol, location, symbolKind, symbolName, containerName, result) { - if (isNewExpressionTarget(location) || location.kind === 112 /* ConstructorKeyword */) { - if (symbol.flags & 32 /* Class */) { + if (isNewExpressionTarget(location) || location.kind === 112) { + if (symbol.flags & 32) { var classDeclaration = symbol.getDeclarations()[0]; - ts.Debug.assert(classDeclaration && classDeclaration.kind === 191 /* ClassDeclaration */); + ts.Debug.assert(classDeclaration && classDeclaration.kind === 191); return tryAddSignature(classDeclaration.members, true, symbolKind, symbolName, containerName, result); } } @@ -25766,110 +25952,110 @@ var ts; return false; } } - function getOccurrencesAtPosition(filename, position) { + function getOccurrencesAtPosition(fileName, position) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingWord(sourceFile, position); if (!node) { return undefined; } - if (node.kind === 64 /* Identifier */ || node.kind === 92 /* ThisKeyword */ || node.kind === 90 /* SuperKeyword */ || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { + if (node.kind === 64 || node.kind === 92 || node.kind === 90 || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { return getReferencesForNode(node, [sourceFile], true, false, false); } switch (node.kind) { - case 83 /* IfKeyword */: - case 75 /* ElseKeyword */: - if (hasKind(node.parent, 174 /* IfStatement */)) { + case 83: + case 75: + if (hasKind(node.parent, 174)) { return getIfElseOccurrences(node.parent); } break; - case 89 /* ReturnKeyword */: - if (hasKind(node.parent, 181 /* ReturnStatement */)) { + case 89: + if (hasKind(node.parent, 181)) { return getReturnOccurrences(node.parent); } break; - case 93 /* ThrowKeyword */: - if (hasKind(node.parent, 185 /* ThrowStatement */)) { + case 93: + if (hasKind(node.parent, 185)) { return getThrowOccurrences(node.parent); } break; - case 67 /* CatchKeyword */: - if (hasKind(parent(parent(node)), 186 /* TryStatement */)) { + case 67: + if (hasKind(parent(parent(node)), 186)) { return getTryCatchFinallyOccurrences(node.parent.parent); } break; - case 95 /* TryKeyword */: - case 80 /* FinallyKeyword */: - if (hasKind(parent(node), 186 /* TryStatement */)) { + case 95: + case 80: + if (hasKind(parent(node), 186)) { return getTryCatchFinallyOccurrences(node.parent); } break; - case 91 /* SwitchKeyword */: - if (hasKind(node.parent, 183 /* SwitchStatement */)) { + case 91: + if (hasKind(node.parent, 183)) { return getSwitchCaseDefaultOccurrences(node.parent); } break; - case 66 /* CaseKeyword */: - case 72 /* DefaultKeyword */: - if (hasKind(parent(parent(node)), 183 /* SwitchStatement */)) { + case 66: + case 72: + if (hasKind(parent(parent(node)), 183)) { return getSwitchCaseDefaultOccurrences(node.parent.parent); } break; - case 65 /* BreakKeyword */: - case 70 /* ContinueKeyword */: - if (hasKind(node.parent, 180 /* BreakStatement */) || hasKind(node.parent, 179 /* ContinueStatement */)) { + case 65: + case 70: + if (hasKind(node.parent, 180) || hasKind(node.parent, 179)) { return getBreakOrContinueStatementOccurences(node.parent); } break; - case 81 /* ForKeyword */: - if (hasKind(node.parent, 177 /* ForStatement */) || hasKind(node.parent, 178 /* ForInStatement */)) { + case 81: + if (hasKind(node.parent, 177) || hasKind(node.parent, 178)) { return getLoopBreakContinueOccurrences(node.parent); } break; - case 99 /* WhileKeyword */: - case 74 /* DoKeyword */: - if (hasKind(node.parent, 176 /* WhileStatement */) || hasKind(node.parent, 175 /* DoStatement */)) { + case 99: + case 74: + if (hasKind(node.parent, 176) || hasKind(node.parent, 175)) { return getLoopBreakContinueOccurrences(node.parent); } break; - case 112 /* ConstructorKeyword */: - if (hasKind(node.parent, 129 /* Constructor */)) { + case 112: + if (hasKind(node.parent, 129)) { return getConstructorOccurrences(node.parent); } break; - case 114 /* GetKeyword */: - case 118 /* SetKeyword */: - if (hasKind(node.parent, 130 /* GetAccessor */) || hasKind(node.parent, 131 /* SetAccessor */)) { + case 114: + case 118: + if (hasKind(node.parent, 130) || hasKind(node.parent, 131)) { return getGetAndSetOccurrences(node.parent); } default: - if (ts.isModifier(node.kind) && node.parent && (ts.isDeclaration(node.parent) || node.parent.kind === 171 /* VariableStatement */)) { + if (ts.isModifier(node.kind) && node.parent && (ts.isDeclaration(node.parent) || node.parent.kind === 171)) { return getModifierOccurrences(node.kind, node.parent); } } return undefined; function getIfElseOccurrences(ifStatement) { var keywords = []; - while (hasKind(ifStatement.parent, 174 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) { + while (hasKind(ifStatement.parent, 174) && ifStatement.parent.elseStatement === ifStatement) { ifStatement = ifStatement.parent; } while (ifStatement) { var children = ifStatement.getChildren(); - pushKeywordIf(keywords, children[0], 83 /* IfKeyword */); + pushKeywordIf(keywords, children[0], 83); for (var i = children.length - 1; i >= 0; i--) { - if (pushKeywordIf(keywords, children[i], 75 /* ElseKeyword */)) { + if (pushKeywordIf(keywords, children[i], 75)) { break; } } - if (!hasKind(ifStatement.elseStatement, 174 /* IfStatement */)) { + if (!hasKind(ifStatement.elseStatement, 174)) { break; } ifStatement = ifStatement.elseStatement; } var result = []; for (var i = 0; i < keywords.length; i++) { - if (keywords[i].kind === 75 /* ElseKeyword */ && i < keywords.length - 1) { + if (keywords[i].kind === 75 && i < keywords.length - 1) { var elseKeyword = keywords[i]; var ifKeyword = keywords[i + 1]; var shouldHighlightNextKeyword = true; @@ -25881,7 +26067,7 @@ var ts; } if (shouldHighlightNextKeyword) { result.push({ - fileName: filename, + fileName: fileName, textSpan: ts.createTextSpanFromBounds(elseKeyword.getStart(), ifKeyword.end), isWriteAccess: false }); @@ -25895,15 +26081,15 @@ var ts; } function getReturnOccurrences(returnStatement) { var func = ts.getContainingFunction(returnStatement); - if (!(func && hasKind(func.body, 170 /* Block */))) { + if (!(func && hasKind(func.body, 170))) { return undefined; } var keywords = []; ts.forEachReturnStatement(func.body, function (returnStatement) { - pushKeywordIf(keywords, returnStatement.getFirstToken(), 89 /* ReturnKeyword */); + pushKeywordIf(keywords, returnStatement.getFirstToken(), 89); }); ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) { - pushKeywordIf(keywords, throwStatement.getFirstToken(), 93 /* ThrowKeyword */); + pushKeywordIf(keywords, throwStatement.getFirstToken(), 93); }); return ts.map(keywords, getReferenceEntryFromNode); } @@ -25914,11 +26100,11 @@ var ts; } var keywords = []; ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) { - pushKeywordIf(keywords, throwStatement.getFirstToken(), 93 /* ThrowKeyword */); + pushKeywordIf(keywords, throwStatement.getFirstToken(), 93); }); if (ts.isFunctionBlock(owner)) { ts.forEachReturnStatement(owner, function (returnStatement) { - pushKeywordIf(keywords, returnStatement.getFirstToken(), 89 /* ReturnKeyword */); + pushKeywordIf(keywords, returnStatement.getFirstToken(), 89); }); } return ts.map(keywords, getReferenceEntryFromNode); @@ -25928,10 +26114,10 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 185 /* ThrowStatement */) { + if (node.kind === 185) { statementAccumulator.push(node); } - else if (node.kind === 186 /* TryStatement */) { + else if (node.kind === 186) { var tryStatement = node; if (tryStatement.catchClause) { aggregate(tryStatement.catchClause); @@ -25953,10 +26139,10 @@ var ts; var child = throwStatement; while (child.parent) { var parent = child.parent; - if (ts.isFunctionBlock(parent) || parent.kind === 207 /* SourceFile */) { + if (ts.isFunctionBlock(parent) || parent.kind === 207) { return parent; } - if (parent.kind === 186 /* TryStatement */) { + if (parent.kind === 186) { var tryStatement = parent; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; @@ -25968,23 +26154,23 @@ var ts; } function getTryCatchFinallyOccurrences(tryStatement) { var keywords = []; - pushKeywordIf(keywords, tryStatement.getFirstToken(), 95 /* TryKeyword */); + pushKeywordIf(keywords, tryStatement.getFirstToken(), 95); if (tryStatement.catchClause) { - pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 67 /* CatchKeyword */); + pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 67); } if (tryStatement.finallyBlock) { - var finallyKeyword = ts.findChildOfKind(tryStatement, 80 /* FinallyKeyword */, sourceFile); - pushKeywordIf(keywords, finallyKeyword, 80 /* FinallyKeyword */); + var finallyKeyword = ts.findChildOfKind(tryStatement, 80, sourceFile); + pushKeywordIf(keywords, finallyKeyword, 80); } return ts.map(keywords, getReferenceEntryFromNode); } function getLoopBreakContinueOccurrences(loopNode) { var keywords = []; - if (pushKeywordIf(keywords, loopNode.getFirstToken(), 81 /* ForKeyword */, 99 /* WhileKeyword */, 74 /* DoKeyword */)) { - if (loopNode.kind === 175 /* DoStatement */) { + if (pushKeywordIf(keywords, loopNode.getFirstToken(), 81, 99, 74)) { + if (loopNode.kind === 175) { var loopTokens = loopNode.getChildren(); for (var i = loopTokens.length - 1; i >= 0; i--) { - if (pushKeywordIf(keywords, loopTokens[i], 99 /* WhileKeyword */)) { + if (pushKeywordIf(keywords, loopTokens[i], 99)) { break; } } @@ -25993,20 +26179,20 @@ var ts; var breaksAndContinues = aggregateAllBreakAndContinueStatements(loopNode.statement); ts.forEach(breaksAndContinues, function (statement) { if (ownsBreakOrContinueStatement(loopNode, statement)) { - pushKeywordIf(keywords, statement.getFirstToken(), 65 /* BreakKeyword */, 70 /* ContinueKeyword */); + pushKeywordIf(keywords, statement.getFirstToken(), 65, 70); } }); return ts.map(keywords, getReferenceEntryFromNode); } function getSwitchCaseDefaultOccurrences(switchStatement) { var keywords = []; - pushKeywordIf(keywords, switchStatement.getFirstToken(), 91 /* SwitchKeyword */); + pushKeywordIf(keywords, switchStatement.getFirstToken(), 91); ts.forEach(switchStatement.clauses, function (clause) { - pushKeywordIf(keywords, clause.getFirstToken(), 66 /* CaseKeyword */, 72 /* DefaultKeyword */); + pushKeywordIf(keywords, clause.getFirstToken(), 66, 72); var breaksAndContinues = aggregateAllBreakAndContinueStatements(clause); ts.forEach(breaksAndContinues, function (statement) { if (ownsBreakOrContinueStatement(switchStatement, statement)) { - pushKeywordIf(keywords, statement.getFirstToken(), 65 /* BreakKeyword */); + pushKeywordIf(keywords, statement.getFirstToken(), 65); } }); }); @@ -26016,12 +26202,12 @@ var ts; var owner = getBreakOrContinueOwner(breakOrContinueStatement); if (owner) { switch (owner.kind) { - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 175 /* DoStatement */: - case 176 /* WhileStatement */: + case 177: + case 178: + case 175: + case 176: return getLoopBreakContinueOccurrences(owner); - case 183 /* SwitchStatement */: + case 183: return getSwitchCaseDefaultOccurrences(owner); } } @@ -26032,7 +26218,7 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 180 /* BreakStatement */ || node.kind === 179 /* ContinueStatement */) { + if (node.kind === 180 || node.kind === 179) { statementAccumulator.push(node); } else if (!ts.isAnyFunction(node)) { @@ -26048,14 +26234,14 @@ var ts; function getBreakOrContinueOwner(statement) { for (var node = statement.parent; node; node = node.parent) { switch (node.kind) { - case 183 /* SwitchStatement */: - if (statement.kind === 179 /* ContinueStatement */) { + case 183: + if (statement.kind === 179) { continue; } - case 177 /* ForStatement */: - case 178 /* ForInStatement */: - case 176 /* WhileStatement */: - case 175 /* DoStatement */: + case 177: + case 178: + case 176: + case 175: if (!statement.label || isLabeledBy(node, statement.label.text)) { return node; } @@ -26074,37 +26260,37 @@ var ts; var keywords = []; ts.forEach(declarations, function (declaration) { ts.forEach(declaration.getChildren(), function (token) { - return pushKeywordIf(keywords, token, 112 /* ConstructorKeyword */); + return pushKeywordIf(keywords, token, 112); }); }); return ts.map(keywords, getReferenceEntryFromNode); } function getGetAndSetOccurrences(accessorDeclaration) { var keywords = []; - tryPushAccessorKeyword(accessorDeclaration.symbol, 130 /* GetAccessor */); - tryPushAccessorKeyword(accessorDeclaration.symbol, 131 /* SetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 130); + tryPushAccessorKeyword(accessorDeclaration.symbol, 131); 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, 114 /* GetKeyword */, 118 /* SetKeyword */); }); + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 114, 118); }); } } } function getModifierOccurrences(modifier, declaration) { var container = declaration.parent; - if (declaration.flags & 112 /* AccessibilityModifier */) { - if (!(container.kind === 191 /* ClassDeclaration */ || (declaration.kind === 124 /* Parameter */ && hasKind(container, 129 /* Constructor */)))) { + if (declaration.flags & 112) { + if (!(container.kind === 191 || (declaration.kind === 124 && hasKind(container, 129)))) { return undefined; } } - else if (declaration.flags & 128 /* Static */) { - if (container.kind !== 191 /* ClassDeclaration */) { + else if (declaration.flags & 128) { + if (container.kind !== 191) { return undefined; } } - else if (declaration.flags & (1 /* Export */ | 2 /* Ambient */)) { - if (!(container.kind === 196 /* ModuleBlock */ || container.kind === 207 /* SourceFile */)) { + else if (declaration.flags & (1 | 2)) { + if (!(container.kind === 196 || container.kind === 207)) { return undefined; } } @@ -26115,18 +26301,18 @@ var ts; var modifierFlag = getFlagFromModifier(modifier); var nodes; switch (container.kind) { - case 196 /* ModuleBlock */: - case 207 /* SourceFile */: + case 196: + case 207: nodes = container.statements; break; - case 129 /* Constructor */: + case 129: nodes = container.parameters.concat(container.parent.members); break; - case 191 /* ClassDeclaration */: + case 191: nodes = container.members; - if (modifierFlag & 112 /* AccessibilityModifier */) { + if (modifierFlag & 112) { var constructor = ts.forEach(container.members, function (member) { - return member.kind === 129 /* Constructor */ && member; + return member.kind === 129 && member; }); if (constructor) { nodes = nodes.concat(constructor.parameters); @@ -26144,18 +26330,18 @@ var ts; return ts.map(keywords, getReferenceEntryFromNode); function getFlagFromModifier(modifier) { switch (modifier) { - case 107 /* PublicKeyword */: - return 16 /* Public */; - case 105 /* PrivateKeyword */: - return 32 /* Private */; - case 106 /* ProtectedKeyword */: - return 64 /* Protected */; - case 108 /* StaticKeyword */: - return 128 /* Static */; - case 77 /* ExportKeyword */: - return 1 /* Export */; - case 113 /* DeclareKeyword */: - return 2 /* Ambient */; + case 107: + return 16; + case 105: + return 32; + case 106: + return 64; + case 108: + return 128; + case 77: + return 1; + case 113: + return 2; default: ts.Debug.fail(); } @@ -26188,15 +26374,15 @@ var ts; function findReferences(fileName, position, findInStrings, findInComments) { synchronizeHostData(); fileName = ts.normalizeSlashes(fileName); - var sourceFile = getSourceFile(fileName); + var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } - if (node.kind !== 64 /* Identifier */ && !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && !isNameOfExternalModuleImportOrDeclaration(node)) { + if (node.kind !== 64 && !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && !isNameOfExternalModuleImportOrDeclaration(node)) { return undefined; } - ts.Debug.assert(node.kind === 64 /* Identifier */ || node.kind === 7 /* NumericLiteral */ || node.kind === 8 /* StringLiteral */); + ts.Debug.assert(node.kind === 64 || node.kind === 7 || node.kind === 8); return getReferencesForNode(node, program.getSourceFiles(), false, findInStrings, findInComments); } function initializeNameTable(sourceFile) { @@ -26205,11 +26391,11 @@ var ts; sourceFile.nameTable = nameTable; function walk(node) { switch (node.kind) { - case 64 /* Identifier */: + case 64: nameTable[node.text] = node.text; break; - case 8 /* StringLiteral */: - case 7 /* NumericLiteral */: + case 8: + case 7: nameTable[node.text] = node.text; break; default: @@ -26227,10 +26413,10 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 92 /* ThisKeyword */) { + if (node.kind === 92) { return getReferencesForThisKeyword(node, sourceFiles); } - if (node.kind === 90 /* SuperKeyword */) { + if (node.kind === 90) { return getReferencesForSuperKeyword(node); } var symbol = typeInfoResolver.getSymbolAtLocation(node); @@ -26276,7 +26462,7 @@ var ts; return stripQuotes(name); } function getInternedName(symbol, declarations) { - var functionExpression = ts.forEach(declarations, function (d) { return d.kind === 156 /* FunctionExpression */ ? d : undefined; }); + var functionExpression = ts.forEach(declarations, function (d) { return d.kind === 156 ? d : undefined; }); if (functionExpression && functionExpression.name) { var name = functionExpression.name.text; } @@ -26287,20 +26473,20 @@ var ts; } function stripQuotes(name) { var length = name.length; - if (length >= 2 && name.charCodeAt(0) === 34 /* doubleQuote */ && name.charCodeAt(length - 1) === 34 /* doubleQuote */) { + if (length >= 2 && name.charCodeAt(0) === 34 && name.charCodeAt(length - 1) === 34) { return name.substring(1, length - 1); } ; return name; } function getSymbolScope(symbol) { - if (symbol.getFlags() && (4 /* Property */ | 8192 /* Method */)) { - var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 32 /* Private */) ? d : undefined; }); + if (symbol.getFlags() && (4 | 8192)) { + var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 32) ? d : undefined; }); if (privateDeclaration) { - return ts.getAncestor(privateDeclaration, 191 /* ClassDeclaration */); + return ts.getAncestor(privateDeclaration, 191); } } - if (symbol.parent || (symbol.getFlags() & 268435456 /* UnionProperty */)) { + if (symbol.parent || (symbol.getFlags() & 268435456)) { return undefined; } var scope = undefined; @@ -26314,7 +26500,7 @@ var ts; if (scope && scope !== container) { return undefined; } - if (container.kind === 207 /* SourceFile */ && !ts.isExternalModule(container)) { + if (container.kind === 207 && !ts.isExternalModule(container)) { return undefined; } scope = container; @@ -26336,7 +26522,7 @@ var ts; if (position > end) break; var endPosition = position + symbolNameLength; - if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 2 /* Latest */)) && (endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 2 /* Latest */))) { + if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 2)) && (endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 2))) { positions.push(position); } position = text.indexOf(symbolName, position + symbolNameLength + 1); @@ -26363,14 +26549,14 @@ var ts; function isValidReferencePosition(node, searchSymbolName) { if (node) { switch (node.kind) { - case 64 /* Identifier */: + case 64: return node.getWidth() === searchSymbolName.length; - case 8 /* StringLiteral */: + case 8: if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { return node.getWidth() === searchSymbolName.length + 2; } break; - case 7 /* NumericLiteral */: + case 7: if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { return node.getWidth() === searchSymbolName.length; } @@ -26391,7 +26577,7 @@ var ts; if (!isValidReferencePosition(referenceLocation, searchText)) { if ((findInStrings && isInString(position)) || (findInComments && isInComment(position))) { result.push({ - fileName: sourceFile.filename, + fileName: sourceFile.fileName, textSpan: ts.createTextSpan(position, searchText.length), isWriteAccess: false }); @@ -26408,7 +26594,7 @@ var ts; if (isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation)) { result.push(getReferenceEntryFromNode(referenceLocation)); } - else if (!(referenceSymbol.flags & 67108864 /* Transient */) && searchSymbols.indexOf(shorthandValueSymbol) >= 0) { + else if (!(referenceSymbol.flags & 67108864) && searchSymbols.indexOf(shorthandValueSymbol) >= 0) { result.push(getReferenceEntryFromNode(referenceSymbolDeclaration.name)); } } @@ -26416,7 +26602,7 @@ var ts; } function isInString(position) { var token = ts.getTokenAtPosition(sourceFile, position); - return token && token.kind === 8 /* StringLiteral */ && position > token.getStart(); + return token && token.kind === 8 && position > token.getStart(); } function isInComment(position) { var token = ts.getTokenAtPosition(sourceFile, position); @@ -26439,15 +26625,15 @@ var ts; if (!searchSpaceNode) { return undefined; } - var staticFlag = 128 /* Static */; + var staticFlag = 128; switch (searchSpaceNode.kind) { - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 126: + case 125: + case 128: + case 127: + case 129: + case 130: + case 131: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; break; @@ -26460,11 +26646,11 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || node.kind !== 90 /* SuperKeyword */) { + if (!node || node.kind !== 90) { return; } var container = ts.getSuperContainer(node, false); - if (container && (128 /* Static */ & container.flags) === staticFlag && container.parent.symbol === searchSpaceNode.symbol) { + if (container && (128 & container.flags) === staticFlag && container.parent.symbol === searchSpaceNode.symbol) { result.push(getReferenceEntryFromNode(node)); } }); @@ -26472,33 +26658,33 @@ var ts; } function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles) { var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false); - var staticFlag = 128 /* Static */; + var staticFlag = 128; switch (searchSpaceNode.kind) { - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: if (ts.isObjectLiteralMethod(searchSpaceNode)) { break; } - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: + case 126: + case 125: + case 129: + case 130: + case 131: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; break; - case 207 /* SourceFile */: + case 207: if (ts.isExternalModule(searchSpaceNode)) { return undefined; } - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: + case 190: + case 156: break; default: return undefined; } var result = []; - if (searchSpaceNode.kind === 207 /* SourceFile */) { + if (searchSpaceNode.kind === 207) { ts.forEach(sourceFiles, function (sourceFile) { var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd()); getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, result); @@ -26514,30 +26700,30 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || node.kind !== 92 /* ThisKeyword */) { + if (!node || node.kind !== 92) { return; } var container = ts.getThisContainer(node, false); switch (searchSpaceNode.kind) { - case 156 /* FunctionExpression */: - case 190 /* FunctionDeclaration */: + case 156: + case 190: if (searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: + case 128: + case 127: if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 191 /* ClassDeclaration */: - if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 128 /* Static */) === staticFlag) { + case 191: + if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 128) === staticFlag) { result.push(getReferenceEntryFromNode(node)); } break; - case 207 /* SourceFile */: - if (container.kind === 207 /* SourceFile */ && !ts.isExternalModule(container)) { + case 207: + if (container.kind === 207 && !ts.isExternalModule(container)) { result.push(getReferenceEntryFromNode(node)); } break; @@ -26560,20 +26746,20 @@ var ts; if (rootSymbol !== symbol) { result.push(rootSymbol); } - if (rootSymbol.parent && rootSymbol.parent.flags & (32 /* Class */ | 64 /* Interface */)) { + if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) { getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result); } }); return result; } function getPropertySymbolsFromBaseTypes(symbol, propertyName, result) { - if (symbol && symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + if (symbol && symbol.flags & (32 | 64)) { ts.forEach(symbol.getDeclarations(), function (declaration) { - if (declaration.kind === 191 /* ClassDeclaration */) { + if (declaration.kind === 191) { getPropertySymbolFromTypeReference(ts.getClassBaseTypeNode(declaration)); ts.forEach(ts.getClassImplementedTypeNodes(declaration), getPropertySymbolFromTypeReference); } - else if (declaration.kind === 192 /* InterfaceDeclaration */) { + else if (declaration.kind === 192) { ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference); } }); @@ -26605,7 +26791,7 @@ var ts; if (searchSymbols.indexOf(rootSymbol) >= 0) { return true; } - if (rootSymbol.parent && rootSymbol.parent.flags & (32 /* Class */ | 64 /* Interface */)) { + if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) { var result = []; getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result); return ts.forEach(result, function (s) { return searchSymbols.indexOf(s) >= 0; }); @@ -26619,7 +26805,7 @@ var ts; var contextualType = typeInfoResolver.getContextualType(objectLiteral); var name = node.text; if (contextualType) { - if (contextualType.flags & 16384 /* Union */) { + if (contextualType.flags & 16384) { var unionProperty = contextualType.getProperty(name); if (unionProperty) { return [unionProperty]; @@ -26663,28 +26849,28 @@ var ts; function getReferenceEntryFromNode(node) { var start = node.getStart(); var end = node.getEnd(); - if (node.kind === 8 /* StringLiteral */) { + if (node.kind === 8) { start += 1; end -= 1; } return { - fileName: node.getSourceFile().filename, + fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(start, end), isWriteAccess: isWriteAccess(node) }; } function isWriteAccess(node) { - if (node.kind === 64 /* Identifier */ && ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { + if (node.kind === 64 && ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) { return true; } var parent = node.parent; if (parent) { - if (parent.kind === 162 /* PostfixUnaryExpression */ || parent.kind === 161 /* PrefixUnaryExpression */) { + if (parent.kind === 162 || parent.kind === 161) { return true; } - else if (parent.kind === 163 /* BinaryExpression */ && parent.left === node) { + else if (parent.kind === 163 && parent.left === node) { var operator = parent.operator; - return 52 /* FirstAssignment */ <= operator && operator <= 63 /* LastAssignment */; + return 52 <= operator && operator <= 63; } } return false; @@ -26696,20 +26882,20 @@ var ts; var items = []; ts.forEach(program.getSourceFiles(), function (sourceFile) { cancellationToken.throwIfCancellationRequested(); - var filename = sourceFile.filename; + var fileName = sourceFile.fileName; var declarations = sourceFile.getNamedDeclarations(); for (var i = 0, n = declarations.length; i < n; i++) { var declaration = declarations[i]; var name = declaration.name.text; var matchKind = getMatchKind(searchTerms, name); - if (matchKind !== 0 /* none */) { + if (matchKind !== 0) { var container = getContainerNode(declaration); items.push({ name: name, kind: getNodeKind(declaration), kindModifiers: ts.getNodeModifiers(declaration), matchKind: MatchKind[matchKind], - fileName: filename, + fileName: fileName, textSpan: ts.createTextSpanFromBounds(declaration.getStart(), declaration.getEnd()), containerName: container && container.name ? container.name.text : "", containerKind: container && container.name ? getNodeKind(container) : "" @@ -26721,27 +26907,27 @@ var ts; function hasAnyUpperCaseCharacter(s) { for (var i = 0, n = s.length; i < n; i++) { var c = s.charCodeAt(i); - if ((65 /* A */ <= c && c <= 90 /* Z */) || (c >= 127 /* maxAsciiCharacter */ && s.charAt(i).toLocaleLowerCase() !== s.charAt(i))) { + if ((65 <= c && c <= 90) || (c >= 127 && s.charAt(i).toLocaleLowerCase() !== s.charAt(i))) { return true; } } return false; } function getMatchKind(searchTerms, name) { - var matchKind = 0 /* none */; + var matchKind = 0; if (name) { for (var j = 0, n = searchTerms.length; j < n; j++) { var searchTerm = searchTerms[j]; var nameToSearch = searchTerm.caseSensitive ? name : name.toLocaleLowerCase(); var index = nameToSearch.indexOf(searchTerm.term); if (index < 0) { - return 0 /* none */; + return 0; } - var termKind = 2 /* substring */; + var termKind = 2; if (index === 0) { - termKind = name.length === searchTerm.term.length ? 1 /* exact */ : 3 /* prefix */; + termKind = name.length === searchTerm.term.length ? 1 : 3; } - if (matchKind === 0 /* none */ || termKind < matchKind) { + if (matchKind === 0 || termKind < matchKind) { matchKind = termKind; } } @@ -26750,70 +26936,68 @@ var ts; } } function containErrors(diagnostics) { - return ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1 /* Error */; }); + return ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1; }); } - function getEmitOutput(filename) { + function getEmitOutput(fileName) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getValidSourceFile(fileName); var outputFiles = []; - function writeFile(filename, data, writeByteOrderMark) { + function writeFile(fileName, data, writeByteOrderMark) { outputFiles.push({ - name: filename, + name: fileName, writeByteOrderMark: writeByteOrderMark, text: data }); } - var emitHost = ts.createEmitHostFromProgram(program); - emitHost.writeFile = writeFile; - var emitOutput = ts.emitFiles(getDiagnosticsProducingTypeChecker().getEmitResolver(), emitHost, sourceFile); + var emitOutput = program.emit(sourceFile, writeFile); return { outputFiles: outputFiles, - emitOutputStatus: emitOutput.emitResultStatus + emitSkipped: emitOutput.emitSkipped }; } function getMeaningFromDeclaration(node) { switch (node.kind) { - case 124 /* Parameter */: - case 188 /* VariableDeclaration */: - case 146 /* BindingElement */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: - case 204 /* PropertyAssignment */: - case 205 /* ShorthandPropertyAssignment */: - case 206 /* EnumMember */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 129 /* Constructor */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 190 /* FunctionDeclaration */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: - case 203 /* CatchClause */: - return 1 /* Value */; - case 123 /* TypeParameter */: - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: - case 139 /* TypeLiteral */: - return 2 /* Type */; - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - return 1 /* Value */ | 2 /* Type */; - case 195 /* ModuleDeclaration */: - if (node.name.kind === 8 /* StringLiteral */) { - return 4 /* Namespace */ | 1 /* Value */; + case 124: + case 188: + case 146: + case 126: + case 125: + case 204: + case 205: + case 206: + case 128: + case 127: + case 129: + case 130: + case 131: + case 190: + case 156: + case 157: + case 203: + return 1; + case 123: + case 192: + case 193: + case 139: + return 2; + case 191: + case 194: + return 1 | 2; + case 195: + if (node.name.kind === 8) { + return 4 | 1; } - else if (ts.getModuleInstanceState(node) === 1 /* Instantiated */) { - return 4 /* Namespace */ | 1 /* Value */; + else if (ts.getModuleInstanceState(node) === 1) { + return 4 | 1; } else { - return 4 /* Namespace */; + return 4; } - case 197 /* ImportDeclaration */: - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; - case 207 /* SourceFile */: - return 4 /* Namespace */ | 1 /* Value */; + case 197: + return 1 | 2 | 4; + case 207: + return 4 | 1; } ts.Debug.fail("Unknown declaration type"); } @@ -26821,34 +27005,34 @@ var ts; if (isRightSideOfQualifiedName(node)) { node = node.parent; } - return node.parent.kind === 135 /* TypeReference */; + return node.parent.kind === 135; } function isNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 121 /* QualifiedName */) { - while (root.parent && root.parent.kind === 121 /* QualifiedName */) + if (root.parent.kind === 121) { + while (root.parent && root.parent.kind === 121) root = root.parent; isLastClause = root.right === node; } - return root.parent.kind === 135 /* TypeReference */ && !isLastClause; + return root.parent.kind === 135 && !isLastClause; } function isInRightSideOfImport(node) { - while (node.parent.kind === 121 /* QualifiedName */) { + while (node.parent.kind === 121) { node = node.parent; } return ts.isInternalModuleImportDeclaration(node.parent) && node.parent.moduleReference === node; } function getMeaningFromRightHandSideOfImport(node) { - ts.Debug.assert(node.kind === 64 /* Identifier */); - if (node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node && node.parent.parent.kind === 197 /* ImportDeclaration */) { - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + ts.Debug.assert(node.kind === 64); + if (node.parent.kind === 121 && node.parent.right === node && node.parent.parent.kind === 197) { + return 1 | 2 | 4; } - return 4 /* Namespace */; + return 4; } function getMeaningFromLocation(node) { - if (node.parent.kind === 198 /* ExportAssignment */) { - return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; + if (node.parent.kind === 198) { + return 1 | 2 | 4; } else if (isInRightSideOfImport(node)) { return getMeaningFromRightHandSideOfImport(node); @@ -26857,42 +27041,42 @@ var ts; return getMeaningFromDeclaration(node.parent); } else if (isTypeReference(node)) { - return 2 /* Type */; + return 2; } else if (isNamespaceReference(node)) { - return 4 /* Namespace */; + return 4; } else { - return 1 /* Value */; + return 1; } } function getSignatureHelpItems(fileName, position) { synchronizeHostData(); fileName = ts.normalizeSlashes(fileName); - var sourceFile = getSourceFile(fileName); + var sourceFile = getValidSourceFile(fileName); return ts.SignatureHelp.getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken); } - function getCurrentSourceFile(filename) { - filename = ts.normalizeSlashes(filename); - var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(filename); + function getCurrentSourceFile(fileName) { + fileName = ts.normalizeSlashes(fileName); + var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); return currentSourceFile; } - function getNameOrDottedNameSpan(filename, startPos, endPos) { - filename = ts.normalizeSlashes(filename); - var node = ts.getTouchingPropertyName(getCurrentSourceFile(filename), startPos); + function getNameOrDottedNameSpan(fileName, startPos, endPos) { + fileName = ts.normalizeSlashes(fileName); + var node = ts.getTouchingPropertyName(getCurrentSourceFile(fileName), startPos); if (!node) { return; } switch (node.kind) { - case 149 /* PropertyAccessExpression */: - case 121 /* QualifiedName */: - case 8 /* StringLiteral */: - case 79 /* FalseKeyword */: - case 94 /* TrueKeyword */: - case 88 /* NullKeyword */: - case 90 /* SuperKeyword */: - case 92 /* ThisKeyword */: - case 64 /* Identifier */: + case 149: + case 121: + case 8: + case 79: + case 94: + case 88: + case 90: + case 92: + case 64: break; default: return; @@ -26903,7 +27087,7 @@ var ts; nodeForStartPos = nodeForStartPos.parent; } else if (isNameOfModuleDeclaration(nodeForStartPos)) { - if (nodeForStartPos.parent.parent.kind === 195 /* ModuleDeclaration */ && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { + if (nodeForStartPos.parent.parent.kind === 195 && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { nodeForStartPos = nodeForStartPos.parent.parent.name; } else { @@ -26916,55 +27100,55 @@ var ts; } return ts.createTextSpanFromBounds(nodeForStartPos.getStart(), node.getEnd()); } - function getBreakpointStatementAtPosition(filename, position) { - filename = ts.normalizeSlashes(filename); - return ts.BreakpointResolver.spanInSourceFileAtLocation(getCurrentSourceFile(filename), position); + function getBreakpointStatementAtPosition(fileName, position) { + fileName = ts.normalizeSlashes(fileName); + return ts.BreakpointResolver.spanInSourceFileAtLocation(getCurrentSourceFile(fileName), position); } - function getNavigationBarItems(filename) { - filename = ts.normalizeSlashes(filename); - return ts.NavigationBar.getNavigationBarItems(getCurrentSourceFile(filename)); + function getNavigationBarItems(fileName) { + fileName = ts.normalizeSlashes(fileName); + return ts.NavigationBar.getNavigationBarItems(getCurrentSourceFile(fileName)); } function getSemanticClassifications(fileName, span) { synchronizeHostData(); fileName = ts.normalizeSlashes(fileName); - var sourceFile = getSourceFile(fileName); + var sourceFile = getValidSourceFile(fileName); var result = []; processNode(sourceFile); return result; function classifySymbol(symbol, meaningAtPosition) { var flags = symbol.getFlags(); - if (flags & 32 /* Class */) { + if (flags & 32) { return ClassificationTypeNames.className; } - else if (flags & 384 /* Enum */) { + else if (flags & 384) { return ClassificationTypeNames.enumName; } - else if (flags & 524288 /* TypeAlias */) { + else if (flags & 524288) { return ClassificationTypeNames.typeAlias; } - else if (meaningAtPosition & 2 /* Type */) { - if (flags & 64 /* Interface */) { + else if (meaningAtPosition & 2) { + if (flags & 64) { return ClassificationTypeNames.interfaceName; } - else if (flags & 262144 /* TypeParameter */) { + else if (flags & 262144) { return ClassificationTypeNames.typeParameterName; } } - else if (flags & 1536 /* Module */) { - if (meaningAtPosition & 4 /* Namespace */ || (meaningAtPosition & 1 /* Value */ && hasValueSideModule(symbol))) { + else if (flags & 1536) { + if (meaningAtPosition & 4 || (meaningAtPosition & 1 && hasValueSideModule(symbol))) { return ClassificationTypeNames.moduleName; } } return undefined; function hasValueSideModule(symbol) { return ts.forEach(symbol.declarations, function (declaration) { - return declaration.kind === 195 /* ModuleDeclaration */ && ts.getModuleInstanceState(declaration) == 1 /* Instantiated */; + return declaration.kind === 195 && ts.getModuleInstanceState(declaration) == 1; }); } } function processNode(node) { if (node && ts.textSpanIntersectsWith(span, node.getStart(), node.getWidth())) { - if (node.kind === 64 /* Identifier */ && node.getWidth() > 0) { + if (node.kind === 64 && node.getWidth() > 0) { var symbol = typeInfoResolver.getSymbolAtLocation(node); if (symbol) { var type = classifySymbol(symbol, getMeaningFromLocation(node)); @@ -26983,8 +27167,8 @@ var ts; function getSyntacticClassifications(fileName, span) { fileName = ts.normalizeSlashes(fileName); var sourceFile = getCurrentSourceFile(fileName); - var triviaScanner = ts.createScanner(2 /* Latest */, false, sourceFile.text); - var mergeConflictScanner = ts.createScanner(2 /* Latest */, false, sourceFile.text); + var triviaScanner = ts.createScanner(2, false, sourceFile.text); + var mergeConflictScanner = ts.createScanner(2, false, sourceFile.text); var result = []; processElement(sourceFile); return result; @@ -27010,17 +27194,17 @@ var ts; }); continue; } - if (kind === 6 /* ConflictMarkerTrivia */) { + if (kind === 6) { var text = sourceFile.text; var ch = text.charCodeAt(start); - if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) { + if (ch === 60 || ch === 62) { result.push({ textSpan: ts.createTextSpan(start, width), classificationType: ClassificationTypeNames.comment }); continue; } - ts.Debug.assert(ch === 61 /* equals */); + ts.Debug.assert(ch === 61); classifyDisabledMergeCode(text, start, end); } } @@ -27069,60 +27253,60 @@ var ts; if (ts.isKeyword(tokenKind)) { return ClassificationTypeNames.keyword; } - if (tokenKind === 24 /* LessThanToken */ || tokenKind === 25 /* GreaterThanToken */) { + if (tokenKind === 24 || tokenKind === 25) { if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) { return ClassificationTypeNames.punctuation; } } if (ts.isPunctuation(tokenKind)) { if (token) { - if (tokenKind === 52 /* EqualsToken */) { - if (token.parent.kind === 188 /* VariableDeclaration */ || token.parent.kind === 126 /* PropertyDeclaration */ || token.parent.kind === 124 /* Parameter */) { + if (tokenKind === 52) { + if (token.parent.kind === 188 || token.parent.kind === 126 || token.parent.kind === 124) { return ClassificationTypeNames.operator; } } - if (token.parent.kind === 163 /* BinaryExpression */ || token.parent.kind === 161 /* PrefixUnaryExpression */ || token.parent.kind === 162 /* PostfixUnaryExpression */ || token.parent.kind === 164 /* ConditionalExpression */) { + if (token.parent.kind === 163 || token.parent.kind === 161 || token.parent.kind === 162 || token.parent.kind === 164) { return ClassificationTypeNames.operator; } } return ClassificationTypeNames.punctuation; } - else if (tokenKind === 7 /* NumericLiteral */) { + else if (tokenKind === 7) { return ClassificationTypeNames.numericLiteral; } - else if (tokenKind === 8 /* StringLiteral */) { + else if (tokenKind === 8) { return ClassificationTypeNames.stringLiteral; } - else if (tokenKind === 9 /* RegularExpressionLiteral */) { + else if (tokenKind === 9) { return ClassificationTypeNames.stringLiteral; } else if (ts.isTemplateLiteralKind(tokenKind)) { return ClassificationTypeNames.stringLiteral; } - else if (tokenKind === 64 /* Identifier */) { + else if (tokenKind === 64) { if (token) { switch (token.parent.kind) { - case 191 /* ClassDeclaration */: + case 191: if (token.parent.name === token) { return ClassificationTypeNames.className; } return; - case 123 /* TypeParameter */: + case 123: if (token.parent.name === token) { return ClassificationTypeNames.typeParameterName; } return; - case 192 /* InterfaceDeclaration */: + case 192: if (token.parent.name === token) { return ClassificationTypeNames.interfaceName; } return; - case 194 /* EnumDeclaration */: + case 194: if (token.parent.name === token) { return ClassificationTypeNames.enumName; } return; - case 195 /* ModuleDeclaration */: + case 195: if (token.parent.name === token) { return ClassificationTypeNames.moduleName; } @@ -27147,13 +27331,13 @@ var ts; } } } - function getOutliningSpans(filename) { - filename = ts.normalizeSlashes(filename); - var sourceFile = getCurrentSourceFile(filename); + function getOutliningSpans(fileName) { + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getCurrentSourceFile(fileName); return ts.OutliningElementsCollector.collectElements(sourceFile); } - function getBraceMatchingAtPosition(filename, position) { - var sourceFile = getCurrentSourceFile(filename); + function getBraceMatchingAtPosition(fileName, position) { + var sourceFile = getCurrentSourceFile(fileName); var result = []; var token = ts.getTouchingToken(sourceFile, position); if (token.getStart(sourceFile) === position) { @@ -27162,7 +27346,6 @@ var ts; var parentElement = token.parent; var childNodes = parentElement.getChildren(sourceFile); for (var i = 0, n = childNodes.length; i < n; i++) { - 33; var current = childNodes[i]; if (current.kind === matchKind) { var range1 = ts.createTextSpan(token.getStart(sourceFile), token.getWidth(sourceFile)); @@ -27181,26 +27364,26 @@ var ts; return result; function getMatchingTokenKind(token) { switch (token.kind) { - case 14 /* OpenBraceToken */: return 15 /* CloseBraceToken */; - case 16 /* OpenParenToken */: return 17 /* CloseParenToken */; - case 18 /* OpenBracketToken */: return 19 /* CloseBracketToken */; - case 24 /* LessThanToken */: return 25 /* GreaterThanToken */; - case 15 /* CloseBraceToken */: return 14 /* OpenBraceToken */; - case 17 /* CloseParenToken */: return 16 /* OpenParenToken */; - case 19 /* CloseBracketToken */: return 18 /* OpenBracketToken */; - case 25 /* GreaterThanToken */: return 24 /* LessThanToken */; + case 14: return 15; + case 16: return 17; + case 18: return 19; + case 24: return 25; + case 15: return 14; + case 17: return 16; + case 19: return 18; + case 25: return 24; } return undefined; } } - function getIndentationAtPosition(filename, position, editorOptions) { - filename = ts.normalizeSlashes(filename); + function getIndentationAtPosition(fileName, position, editorOptions) { + fileName = ts.normalizeSlashes(fileName); var start = new Date().getTime(); - var sourceFile = getCurrentSourceFile(filename); - host.log("getIndentationAtPosition: getCurrentSourceFile: " + (new Date().getTime() - start)); + var sourceFile = getCurrentSourceFile(fileName); + log("getIndentationAtPosition: getCurrentSourceFile: " + (new Date().getTime() - start)); var start = new Date().getTime(); var result = ts.formatting.SmartIndenter.getIndentation(position, sourceFile, editorOptions); - host.log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start)); + log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start)); return result; } function getFormattingEditsForRange(fileName, start, end, options) { @@ -27227,10 +27410,10 @@ var ts; } return []; } - function getTodoComments(filename, descriptors) { + function getTodoComments(fileName, descriptors) { synchronizeHostData(); - filename = ts.normalizeSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = ts.normalizeSlashes(fileName); + var sourceFile = getValidSourceFile(fileName); cancellationToken.throwIfCancellationRequested(); var fileContents = sourceFile.text; cancellationToken.throwIfCancellationRequested(); @@ -27283,28 +27466,49 @@ var ts; return new RegExp(regExpString, "gim"); } function isLetterOrDigit(char) { - return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */); + return (char >= 97 && char <= 122) || (char >= 65 && char <= 90) || (char >= 48 && char <= 57); } } function getRenameInfo(fileName, position) { synchronizeHostData(); fileName = ts.normalizeSlashes(fileName); - var sourceFile = getSourceFile(fileName); + var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingWord(sourceFile, position); - if (node && node.kind === 64 /* Identifier */) { + if (node && node.kind === 64) { var symbol = typeInfoResolver.getSymbolAtLocation(node); - if (symbol && symbol.getDeclarations() && symbol.getDeclarations().length > 0) { - var kind = getSymbolKind(symbol, typeInfoResolver, node); - if (kind) { - return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, getSymbolModifiers(symbol), ts.createTextSpan(node.getStart(), node.getWidth())); + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + var defaultLibFile = ts.getDefaultLibFileName(host.getCompilationSettings()); + for (var i = 0; i < declarations.length; i++) { + var sourceFile = declarations[i].getSourceFile(); + if (sourceFile && endsWith(sourceFile.fileName, defaultLibFile)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library.key)); + } + } + var kind = getSymbolKind(symbol, typeInfoResolver, node); + if (kind) { + return { + canRename: true, + localizedErrorMessage: undefined, + displayName: symbol.name, + fullDisplayName: typeInfoResolver.getFullyQualifiedName(symbol), + kind: kind, + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: ts.createTextSpan(node.getStart(), node.getWidth()) + }; + } } } } return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key)); + function endsWith(string, value) { + return string.lastIndexOf(value) + value.length === string.length; + } function getRenameInfoError(localizedErrorMessage) { return { canRename: false, - localizedErrorMessage: ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key), + localizedErrorMessage: localizedErrorMessage, displayName: undefined, fullDisplayName: undefined, kind: undefined, @@ -27312,17 +27516,6 @@ var ts; 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, @@ -27353,37 +27546,38 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getEmitOutput: getEmitOutput, - getSourceFile: getCurrentSourceFile + getSourceFile: getCurrentSourceFile, + getProgram: getProgram }; } ts.createLanguageService = createLanguageService; - function createClassifier(host) { - var scanner = ts.createScanner(2 /* Latest */, false); + function createClassifier() { + var scanner = ts.createScanner(2, false); var noRegexTable = []; - noRegexTable[64 /* Identifier */] = true; - noRegexTable[8 /* StringLiteral */] = true; - noRegexTable[7 /* NumericLiteral */] = true; - noRegexTable[9 /* RegularExpressionLiteral */] = true; - noRegexTable[92 /* ThisKeyword */] = true; - noRegexTable[38 /* PlusPlusToken */] = true; - noRegexTable[39 /* MinusMinusToken */] = true; - noRegexTable[17 /* CloseParenToken */] = true; - noRegexTable[19 /* CloseBracketToken */] = true; - noRegexTable[15 /* CloseBraceToken */] = true; - noRegexTable[94 /* TrueKeyword */] = true; - noRegexTable[79 /* FalseKeyword */] = true; + noRegexTable[64] = true; + noRegexTable[8] = true; + noRegexTable[7] = true; + noRegexTable[9] = true; + noRegexTable[92] = true; + noRegexTable[38] = true; + noRegexTable[39] = true; + noRegexTable[17] = true; + noRegexTable[19] = true; + noRegexTable[15] = true; + noRegexTable[94] = true; + noRegexTable[79] = true; function isAccessibilityModifier(kind) { switch (kind) { - case 107 /* PublicKeyword */: - case 105 /* PrivateKeyword */: - case 106 /* ProtectedKeyword */: + case 107: + case 105: + case 106: return true; } return false; } function canFollow(keyword1, keyword2) { if (isAccessibilityModifier(keyword1)) { - if (keyword2 === 114 /* GetKeyword */ || keyword2 === 118 /* SetKeyword */ || keyword2 === 112 /* ConstructorKeyword */ || keyword2 === 108 /* StaticKeyword */) { + if (keyword2 === 114 || keyword2 === 118 || keyword2 === 112 || keyword2 === 108) { return true; } return false; @@ -27392,80 +27586,80 @@ var ts; } function getClassificationsForLine(text, lexState, classifyKeywordsInGenerics) { var offset = 0; - var token = 0 /* Unknown */; - var lastNonTriviaToken = 0 /* Unknown */; + var token = 0; + var lastNonTriviaToken = 0; switch (lexState) { - case 3 /* InDoubleQuoteStringLiteral */: + case 3: text = '"\\\n' + text; offset = 3; break; - case 2 /* InSingleQuoteStringLiteral */: + case 2: text = "'\\\n" + text; offset = 3; break; - case 1 /* InMultiLineCommentTrivia */: + case 1: text = "/*\n" + text; offset = 3; break; } scanner.setText(text); var result = { - finalLexState: 0 /* Start */, + finalLexState: 0, entries: [] }; var angleBracketStack = 0; do { token = scanner.scan(); if (!ts.isTrivia(token)) { - if ((token === 36 /* SlashToken */ || token === 56 /* SlashEqualsToken */) && !noRegexTable[lastNonTriviaToken]) { - if (scanner.reScanSlashToken() === 9 /* RegularExpressionLiteral */) { - token = 9 /* RegularExpressionLiteral */; + if ((token === 36 || token === 56) && !noRegexTable[lastNonTriviaToken]) { + if (scanner.reScanSlashToken() === 9) { + token = 9; } } - else if (lastNonTriviaToken === 20 /* DotToken */ && isKeyword(token)) { - token = 64 /* Identifier */; + else if (lastNonTriviaToken === 20 && isKeyword(token)) { + token = 64; } else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { - token = 64 /* Identifier */; + token = 64; } - else if (lastNonTriviaToken === 64 /* Identifier */ && token === 24 /* LessThanToken */) { + else if (lastNonTriviaToken === 64 && token === 24) { angleBracketStack++; } - else if (token === 25 /* GreaterThanToken */ && angleBracketStack > 0) { + else if (token === 25 && angleBracketStack > 0) { angleBracketStack--; } - else if (token === 110 /* AnyKeyword */ || token === 119 /* StringKeyword */ || token === 117 /* NumberKeyword */ || token === 111 /* BooleanKeyword */) { + else if (token === 110 || token === 119 || token === 117 || token === 111) { if (angleBracketStack > 0 && !classifyKeywordsInGenerics) { - token = 64 /* Identifier */; + token = 64; } } lastNonTriviaToken = token; } processToken(); - } while (token !== 1 /* EndOfFileToken */); + } while (token !== 1); return result; function processToken() { var start = scanner.getTokenPos(); var end = scanner.getTextPos(); addResult(end - start, classFromKind(token)); if (end >= text.length) { - if (token === 8 /* StringLiteral */) { + if (token === 8) { var tokenText = scanner.getTokenText(); if (scanner.isUnterminated()) { var lastCharIndex = tokenText.length - 1; var numBackslashes = 0; - while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92 /* backslash */) { + while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92) { numBackslashes++; } if (numBackslashes & 1) { var quoteChar = tokenText.charCodeAt(0); - result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; + result.finalLexState = quoteChar === 34 ? 3 : 2; } } } - else if (token === 3 /* MultiLineCommentTrivia */) { + else if (token === 3) { if (scanner.isUnterminated()) { - result.finalLexState = 1 /* InMultiLineCommentTrivia */; + result.finalLexState = 1; } } } @@ -27481,99 +27675,106 @@ var ts; } function isBinaryExpressionOperatorToken(token) { switch (token) { - case 35 /* AsteriskToken */: - case 36 /* SlashToken */: - case 37 /* PercentToken */: - case 33 /* PlusToken */: - case 34 /* MinusToken */: - case 40 /* LessThanLessThanToken */: - case 41 /* GreaterThanGreaterThanToken */: - case 42 /* GreaterThanGreaterThanGreaterThanToken */: - case 24 /* LessThanToken */: - case 25 /* GreaterThanToken */: - case 26 /* LessThanEqualsToken */: - case 27 /* GreaterThanEqualsToken */: - case 86 /* InstanceOfKeyword */: - case 85 /* InKeyword */: - case 28 /* EqualsEqualsToken */: - case 29 /* ExclamationEqualsToken */: - case 30 /* EqualsEqualsEqualsToken */: - case 31 /* ExclamationEqualsEqualsToken */: - case 43 /* AmpersandToken */: - case 45 /* CaretToken */: - case 44 /* BarToken */: - case 48 /* AmpersandAmpersandToken */: - case 49 /* BarBarToken */: - case 62 /* BarEqualsToken */: - case 61 /* AmpersandEqualsToken */: - case 63 /* CaretEqualsToken */: - case 58 /* LessThanLessThanEqualsToken */: - case 59 /* GreaterThanGreaterThanEqualsToken */: - case 60 /* GreaterThanGreaterThanGreaterThanEqualsToken */: - case 53 /* PlusEqualsToken */: - case 54 /* MinusEqualsToken */: - case 55 /* AsteriskEqualsToken */: - case 56 /* SlashEqualsToken */: - case 57 /* PercentEqualsToken */: - case 52 /* EqualsToken */: - case 23 /* CommaToken */: + case 35: + case 36: + case 37: + case 33: + case 34: + case 40: + case 41: + case 42: + case 24: + case 25: + case 26: + case 27: + case 86: + case 85: + case 28: + case 29: + case 30: + case 31: + case 43: + case 45: + case 44: + case 48: + case 49: + case 62: + case 61: + case 63: + case 58: + case 59: + case 60: + case 53: + case 54: + case 55: + case 56: + case 57: + case 52: + case 23: return true; default: return false; } } function isPrefixUnaryExpressionOperatorToken(token) { switch (token) { - case 33 /* PlusToken */: - case 34 /* MinusToken */: - case 47 /* TildeToken */: - case 46 /* ExclamationToken */: - case 38 /* PlusPlusToken */: - case 39 /* MinusMinusToken */: + case 33: + case 34: + case 47: + case 46: + case 38: + case 39: return true; default: return false; } } function isKeyword(token) { - return token >= 65 /* FirstKeyword */ && token <= 120 /* LastKeyword */; + return token >= 65 && token <= 120; } function classFromKind(token) { if (isKeyword(token)) { - return 1 /* Keyword */; + return 1; } else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { - return 2 /* Operator */; + return 2; } - else if (token >= 14 /* FirstPunctuation */ && token <= 63 /* LastPunctuation */) { - return 0 /* Punctuation */; + else if (token >= 14 && token <= 63) { + return 0; } switch (token) { - case 7 /* NumericLiteral */: - return 6 /* NumberLiteral */; - case 8 /* StringLiteral */: - return 7 /* StringLiteral */; - case 9 /* RegularExpressionLiteral */: - return 8 /* RegExpLiteral */; - case 6 /* ConflictMarkerTrivia */: - case 3 /* MultiLineCommentTrivia */: - case 2 /* SingleLineCommentTrivia */: - return 3 /* Comment */; - case 5 /* WhitespaceTrivia */: - return 4 /* Whitespace */; - case 64 /* Identifier */: + case 7: + return 6; + case 8: + return 7; + case 9: + return 8; + case 6: + case 3: + case 2: + return 3; + case 5: + return 4; + case 64: default: - return 5 /* Identifier */; + return 5; } } return { getClassificationsForLine: getClassificationsForLine }; } ts.createClassifier = createClassifier; + function getDefaultLibFilePath(options) { + if (typeof __dirname !== "undefined") { + return __dirname + ts.directorySeparator + ts.getDefaultLibFileName(options); + } + throw new Error("getDefaultLibFilePath is only supported when consumed as a node module. "); + } + ts.getDefaultLibFilePath = getDefaultLibFilePath; function initializeServices() { ts.objectAllocator = { getNodeConstructor: function (kind) { function Node() { } - var proto = kind === 207 /* SourceFile */ ? new SourceFileObject() : new NodeObject(); + var proto = kind === 207 ? new SourceFileObject() : new NodeObject(); proto.kind = kind; proto.pos = 0; proto.end = 0; @@ -27594,7 +27795,7 @@ var ts; var BreakpointResolver; (function (BreakpointResolver) { function spanInSourceFileAtLocation(sourceFile, position) { - if (sourceFile.flags & 1024 /* DeclarationFile */) { + if (sourceFile.flags & 1024) { return undefined; } var tokenAtLocation = ts.getTokenAtPosition(sourceFile, position); @@ -27627,123 +27828,123 @@ var ts; function spanInNode(node) { if (node) { if (ts.isExpression(node)) { - if (node.parent.kind === 175 /* DoStatement */) { + if (node.parent.kind === 175) { return spanInPreviousNode(node); } - if (node.parent.kind === 177 /* ForStatement */) { + if (node.parent.kind === 177) { return textSpan(node); } - if (node.parent.kind === 163 /* BinaryExpression */ && node.parent.operator === 23 /* CommaToken */) { + if (node.parent.kind === 163 && node.parent.operator === 23) { return textSpan(node); } - if (node.parent.kind == 157 /* ArrowFunction */ && node.parent.body == node) { + if (node.parent.kind == 157 && node.parent.body == node) { return textSpan(node); } } switch (node.kind) { - case 171 /* VariableStatement */: + case 171: return spanInVariableDeclaration(node.declarationList.declarations[0]); - case 188 /* VariableDeclaration */: - case 126 /* PropertyDeclaration */: - case 125 /* PropertySignature */: + case 188: + case 126: + case 125: return spanInVariableDeclaration(node); - case 124 /* Parameter */: + case 124: return spanInParameterDeclaration(node); - case 190 /* FunctionDeclaration */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 129 /* Constructor */: - case 156 /* FunctionExpression */: - case 157 /* ArrowFunction */: + case 190: + case 128: + case 127: + case 130: + case 131: + case 129: + case 156: + case 157: return spanInFunctionDeclaration(node); - case 170 /* Block */: + case 170: if (ts.isFunctionBlock(node)) { return spanInFunctionBlock(node); } - case 196 /* ModuleBlock */: + case 196: return spanInBlock(node); - case 203 /* CatchClause */: + case 203: return spanInBlock(node.block); - case 173 /* ExpressionStatement */: + case 173: return textSpan(node.expression); - case 181 /* ReturnStatement */: + case 181: return textSpan(node.getChildAt(0), node.expression); - case 176 /* WhileStatement */: + case 176: return textSpan(node, ts.findNextToken(node.expression, node)); - case 175 /* DoStatement */: + case 175: return spanInNode(node.statement); - case 187 /* DebuggerStatement */: + case 187: return textSpan(node.getChildAt(0)); - case 174 /* IfStatement */: + case 174: return textSpan(node, ts.findNextToken(node.expression, node)); - case 184 /* LabeledStatement */: + case 184: return spanInNode(node.statement); - case 180 /* BreakStatement */: - case 179 /* ContinueStatement */: + case 180: + case 179: return textSpan(node.getChildAt(0), node.label); - case 177 /* ForStatement */: + case 177: return spanInForStatement(node); - case 178 /* ForInStatement */: + case 178: return textSpan(node, ts.findNextToken(node.expression, node)); - case 183 /* SwitchStatement */: + case 183: return textSpan(node, ts.findNextToken(node.expression, node)); - case 200 /* CaseClause */: - case 201 /* DefaultClause */: + case 200: + case 201: return spanInNode(node.statements[0]); - case 186 /* TryStatement */: + case 186: return spanInBlock(node.tryBlock); - case 185 /* ThrowStatement */: + case 185: return textSpan(node, node.expression); - case 198 /* ExportAssignment */: + case 198: return textSpan(node, node.exportName); - case 197 /* ImportDeclaration */: + case 197: return textSpan(node, node.moduleReference); - case 195 /* ModuleDeclaration */: - if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + case 195: + if (ts.getModuleInstanceState(node) !== 1) { return undefined; } - case 191 /* ClassDeclaration */: - case 194 /* EnumDeclaration */: - case 206 /* EnumMember */: - case 151 /* CallExpression */: - case 152 /* NewExpression */: + case 191: + case 194: + case 206: + case 151: + case 152: return textSpan(node); - case 182 /* WithStatement */: + case 182: return spanInNode(node.statement); - case 192 /* InterfaceDeclaration */: - case 193 /* TypeAliasDeclaration */: + case 192: + case 193: return undefined; - case 22 /* SemicolonToken */: - case 1 /* EndOfFileToken */: + case 22: + case 1: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile)); - case 23 /* CommaToken */: + case 23: return spanInPreviousNode(node); - case 14 /* OpenBraceToken */: + case 14: return spanInOpenBraceToken(node); - case 15 /* CloseBraceToken */: + case 15: return spanInCloseBraceToken(node); - case 16 /* OpenParenToken */: + case 16: return spanInOpenParenToken(node); - case 17 /* CloseParenToken */: + case 17: return spanInCloseParenToken(node); - case 51 /* ColonToken */: + case 51: return spanInColonToken(node); - case 25 /* GreaterThanToken */: - case 24 /* LessThanToken */: + case 25: + case 24: return spanInGreaterThanOrLessThanToken(node); - case 99 /* WhileKeyword */: + case 99: return spanInWhileKeyword(node); - case 75 /* ElseKeyword */: - case 67 /* CatchKeyword */: - case 80 /* FinallyKeyword */: + case 75: + case 67: + case 80: return spanInNextNode(node); default: - if (node.parent.kind === 204 /* PropertyAssignment */ && node.parent.name === node) { + if (node.parent.kind === 204 && node.parent.name === node) { return spanInNode(node.parent.initializer); } - if (node.parent.kind === 154 /* TypeAssertionExpression */ && node.parent.type === node) { + if (node.parent.kind === 154 && node.parent.type === node) { return spanInNode(node.parent.expression); } if (ts.isAnyFunction(node.parent) && node.parent.type === node) { @@ -27753,13 +27954,13 @@ var ts; } } function spanInVariableDeclaration(variableDeclaration) { - if (variableDeclaration.parent.parent.kind === 178 /* ForInStatement */) { + if (variableDeclaration.parent.parent.kind === 178) { return spanInNode(variableDeclaration.parent.parent); } - var isParentVariableStatement = variableDeclaration.parent.parent.kind === 171 /* VariableStatement */; - var isDeclarationOfForStatement = variableDeclaration.parent.parent.kind === 177 /* ForStatement */ && ts.contains(variableDeclaration.parent.parent.initializer.declarations, variableDeclaration); + var isParentVariableStatement = variableDeclaration.parent.parent.kind === 171; + var isDeclarationOfForStatement = variableDeclaration.parent.parent.kind === 177 && ts.contains(variableDeclaration.parent.parent.initializer.declarations, variableDeclaration); var declarations = isParentVariableStatement ? variableDeclaration.parent.parent.declarationList.declarations : isDeclarationOfForStatement ? variableDeclaration.parent.parent.initializer.declarations : undefined; - if (variableDeclaration.initializer || (variableDeclaration.flags & 1 /* Export */)) { + if (variableDeclaration.initializer || (variableDeclaration.flags & 1)) { if (declarations && declarations[0] === variableDeclaration) { if (isParentVariableStatement) { return textSpan(variableDeclaration.parent, variableDeclaration); @@ -27779,7 +27980,7 @@ var ts; } } function canHaveSpanInParameterDeclaration(parameter) { - return !!parameter.initializer || parameter.dotDotDotToken !== undefined || !!(parameter.flags & 16 /* Public */) || !!(parameter.flags & 32 /* Private */); + return !!parameter.initializer || parameter.dotDotDotToken !== undefined || !!(parameter.flags & 16) || !!(parameter.flags & 32); } function spanInParameterDeclaration(parameter) { if (canHaveSpanInParameterDeclaration(parameter)) { @@ -27797,7 +27998,7 @@ var ts; } } function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { - return !!(functionDeclaration.flags & 1 /* Export */) || (functionDeclaration.parent.kind === 191 /* ClassDeclaration */ && functionDeclaration.kind !== 129 /* Constructor */); + return !!(functionDeclaration.flags & 1) || (functionDeclaration.parent.kind === 191 && functionDeclaration.kind !== 129); } function spanInFunctionDeclaration(functionDeclaration) { if (!functionDeclaration.body) { @@ -27817,22 +28018,22 @@ var ts; } function spanInBlock(block) { switch (block.parent.kind) { - case 195 /* ModuleDeclaration */: - if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) { + case 195: + if (ts.getModuleInstanceState(block.parent) !== 1) { return undefined; } - case 176 /* WhileStatement */: - case 174 /* IfStatement */: - case 178 /* ForInStatement */: + case 176: + case 174: + case 178: return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); - case 177 /* ForStatement */: + case 177: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); } return spanInNode(block.statements[0]); } function spanInForStatement(forStatement) { if (forStatement.initializer) { - if (forStatement.initializer.kind === 189 /* VariableDeclarationList */) { + if (forStatement.initializer.kind === 189) { var variableDeclarationList = forStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); @@ -27851,34 +28052,34 @@ var ts; } function spanInOpenBraceToken(node) { switch (node.parent.kind) { - case 194 /* EnumDeclaration */: + case 194: var enumDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); - case 191 /* ClassDeclaration */: + case 191: var classDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); - case 183 /* SwitchStatement */: + case 183: return spanInNodeIfStartsOnSameLine(node.parent, node.parent.clauses[0]); } return spanInNode(node.parent); } function spanInCloseBraceToken(node) { switch (node.parent.kind) { - case 196 /* ModuleBlock */: - if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) { + case 196: + if (ts.getModuleInstanceState(node.parent.parent) !== 1) { return undefined; } - case 194 /* EnumDeclaration */: - case 191 /* ClassDeclaration */: + case 194: + case 191: return textSpan(node); - case 170 /* Block */: + case 170: if (ts.isFunctionBlock(node.parent)) { return textSpan(node); } - case 203 /* CatchClause */: + case 203: return spanInNode(node.parent.statements[node.parent.statements.length - 1]); ; - case 183 /* SwitchStatement */: + case 183: var switchStatement = node.parent; var lastClause = switchStatement.clauses[switchStatement.clauses.length - 1]; if (lastClause) { @@ -27890,24 +28091,24 @@ var ts; } } function spanInOpenParenToken(node) { - if (node.parent.kind === 175 /* DoStatement */) { + if (node.parent.kind === 175) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInCloseParenToken(node) { switch (node.parent.kind) { - case 156 /* FunctionExpression */: - case 190 /* FunctionDeclaration */: - case 157 /* ArrowFunction */: - case 128 /* MethodDeclaration */: - case 127 /* MethodSignature */: - case 130 /* GetAccessor */: - case 131 /* SetAccessor */: - case 129 /* Constructor */: - case 176 /* WhileStatement */: - case 175 /* DoStatement */: - case 177 /* ForStatement */: + case 156: + case 190: + case 157: + case 128: + case 127: + case 130: + case 131: + case 129: + case 176: + case 175: + case 177: return spanInPreviousNode(node); default: return spanInNode(node.parent); @@ -27915,19 +28116,19 @@ var ts; return spanInNode(node.parent); } function spanInColonToken(node) { - if (ts.isAnyFunction(node.parent) || node.parent.kind === 204 /* PropertyAssignment */) { + if (ts.isAnyFunction(node.parent) || node.parent.kind === 204) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInGreaterThanOrLessThanToken(node) { - if (node.parent.kind === 154 /* TypeAssertionExpression */) { + if (node.parent.kind === 154) { return spanInNode(node.parent.expression); } return spanInNode(node.parent); } function spanInWhileKeyword(node) { - if (node.parent.kind === 175 /* DoStatement */) { + if (node.parent.kind === 175) { return textSpan(node, ts.findNextToken(node.parent.expression, node.parent)); } return spanInNode(node.parent); @@ -27954,12 +28155,6 @@ var ts; ScriptSnapshotShimAdapter.prototype.getLength = function () { return this.scriptSnapshotShim.getLength(); }; - ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { - if (this.lineStartPositions == null) { - this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); - } - return this.lineStartPositions; - }; ScriptSnapshotShimAdapter.prototype.getChangeRange = function (oldSnapshot) { var oldSnapshotShim = oldSnapshot; var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); @@ -27994,17 +28189,18 @@ var ts; }; LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { var encoded = this.shimHost.getScriptFileNames(); - return JSON.parse(encoded); + return this.files = JSON.parse(encoded); }; LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { - return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); + if (this.files && this.files.indexOf(fileName) < 0) { + return undefined; + } + var scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); + return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); }; LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { return this.shimHost.getScriptVersion(fileName); }; - LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { - return this.shimHost.getScriptIsOpen(fileName); - }; LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { @@ -28021,12 +28217,12 @@ var ts; LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () { return this.shimHost.getCancellationToken(); }; - LanguageServiceShimHostAdapter.prototype.getDefaultLibFilename = function (options) { - return this.shimHost.getDefaultLibFilename(JSON.stringify(options)); - }; LanguageServiceShimHostAdapter.prototype.getCurrentDirectory = function () { return this.shimHost.getCurrentDirectory(); }; + LanguageServiceShimHostAdapter.prototype.getDefaultLibFileName = function (options) { + return ""; + }; return LanguageServiceShimHostAdapter; })(); ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; @@ -28103,9 +28299,14 @@ var ts; return null; }); }; - LanguageServiceShimObject.realizeDiagnostic = function (diagnostic) { + LanguageServiceShimObject.prototype.realizeDiagnostics = function (diagnostics) { + var _this = this; + var newLine = this.getNewLine(); + return diagnostics.map(function (d) { return _this.realizeDiagnostic(d, newLine); }); + }; + LanguageServiceShimObject.prototype.realizeDiagnostic = function (diagnostic, newLine) { return { - message: diagnostic.messageText, + message: ts.flattenDiagnosticMessageText(diagnostic.messageText, newLine), start: diagnostic.start, length: diagnostic.length, category: ts.DiagnosticCategory[diagnostic.category].toLowerCase(), @@ -28126,25 +28327,28 @@ var ts; return classifications; }); }; + LanguageServiceShimObject.prototype.getNewLine = function () { + return this.host.getNewLine ? this.host.getNewLine() : "\r\n"; + }; LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) { var _this = this; return this.forwardJSONCall("getSyntacticDiagnostics('" + fileName + "')", function () { - var errors = _this.languageService.getSyntacticDiagnostics(fileName); - return errors.map(LanguageServiceShimObject.realizeDiagnostic); + var diagnostics = _this.languageService.getSyntacticDiagnostics(fileName); + return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) { var _this = this; return this.forwardJSONCall("getSemanticDiagnostics('" + fileName + "')", function () { - var errors = _this.languageService.getSemanticDiagnostics(fileName); - return errors.map(LanguageServiceShimObject.realizeDiagnostic); + var diagnostics = _this.languageService.getSemanticDiagnostics(fileName); + return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () { var _this = this; return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { - var errors = _this.languageService.getCompilerOptionsDiagnostics(); - return errors.map(LanguageServiceShimObject.realizeDiagnostic); + var diagnostics = _this.languageService.getCompilerOptionsDiagnostics(); + return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) { @@ -28289,6 +28493,7 @@ var ts; var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { var output = _this.languageService.getEmitOutput(fileName); + output.emitOutputStatus = output.emitSkipped ? 1 : 0; return output; }); }; @@ -28296,10 +28501,9 @@ var ts; })(ShimBase); var ClassifierShimObject = (function (_super) { __extends(ClassifierShimObject, _super); - function ClassifierShimObject(factory, logger) { + function ClassifierShimObject(factory) { _super.call(this, factory); - this.logger = logger; - this.classifier = ts.createClassifier(this.logger); + this.classifier = ts.createClassifier(); } ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) { var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); @@ -28333,14 +28537,14 @@ var ts; }; ts.forEach(result.referencedFiles, function (refFile) { convertResult.referencedFiles.push({ - path: ts.normalizePath(refFile.filename), + path: ts.normalizePath(refFile.fileName), position: refFile.pos, length: refFile.end - refFile.pos }); }); ts.forEach(result.importedFiles, function (importedFile) { convertResult.importedFiles.push({ - path: ts.normalizeSlashes(importedFile.filename), + path: ts.normalizeSlashes(importedFile.fileName), position: importedFile.pos, length: importedFile.end - importedFile.pos }); @@ -28376,7 +28580,7 @@ var ts; }; TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) { try { - return new ClassifierShimObject(this, logger); + return new ClassifierShimObject(this); } catch (err) { logInternalError(logger, err); diff --git a/bin/typescriptServices_internal.d.ts b/bin/typescriptServices_internal.d.ts index 82f5e606758..c6ba4f561f0 100644 --- a/bin/typescriptServices_internal.d.ts +++ b/bin/typescriptServices_internal.d.ts @@ -35,6 +35,7 @@ declare module ts { function concatenate(array1: T[], array2: T[]): T[]; function deduplicate(array: T[]): T[]; function sum(array: any[], prop: string): number; + function addRange(to: T[], from: T[]): void; /** * Returns the last element of an array if non-empty, undefined otherwise. */ @@ -67,9 +68,9 @@ declare module ts { function createCompilerDiagnostic(message: DiagnosticMessage, ...args: any[]): Diagnostic; function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; function concatenateDiagnosticMessageChains(headChain: DiagnosticMessageChain, tailChain: DiagnosticMessageChain): DiagnosticMessageChain; - function flattenDiagnosticChain(file: SourceFile, start: number, length: number, diagnosticChain: DiagnosticMessageChain, newLine: string): Diagnostic; function compareValues(a: T, b: T): Comparison; - function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): number; + function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison; + function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; function normalizeSlashes(path: string): string; function getRootLength(path: string): number; @@ -79,10 +80,10 @@ declare module ts { function isUrl(path: string): boolean; function isRootedDiskPath(path: string): boolean; function getNormalizedPathComponents(path: string, currentDirectory: string): string[]; - function getNormalizedAbsolutePath(filename: string, currentDirectory: string): string; + function getNormalizedAbsolutePath(fileName: string, currentDirectory: string): string; function getNormalizedPathFromPathComponents(pathComponents: string[]): string; function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, getCanonicalFileName: (fileName: string) => string, isAbsolutePathAnUrl: boolean): string; - function getBaseFilename(path: string): string; + function getBaseFileName(path: string): string; function combinePaths(path1: string, path2: string): string; function fileExtensionIs(path: string, extension: string): boolean; function removeFileExtension(path: string): string; @@ -92,6 +93,7 @@ declare module ts { * Note that this doesn't actually wrap the input in double quotes. */ function escapeString(s: string): string; + function getDefaultLibFileName(options: CompilerOptions): string; interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; @@ -147,11 +149,10 @@ declare module ts { } interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - isEmitBlocked(sourceFile?: SourceFile): boolean; getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; getNewLine(): string; - writeFile(filename: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; } function getSingleLineStringWriter(): StringSymbolWriter; function releaseStringWriter(writer: StringSymbolWriter): void; @@ -170,7 +171,7 @@ declare module ts { function unescapeIdentifier(identifier: string): string; function declarationNameToString(name: DeclarationName): string; function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): Diagnostic; - function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain, newLine: string): Diagnostic; + function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): Diagnostic; function getErrorSpanForNode(node: Node): Node; function isExternalModule(file: SourceFile): boolean; function isDeclarationFile(file: SourceFile): boolean; @@ -216,7 +217,6 @@ declare module ts { function isKeyword(token: SyntaxKind): boolean; function isTrivia(token: SyntaxKind): boolean; function isModifier(token: SyntaxKind): boolean; - function createEmitHostFromProgram(program: Program): EmitHost; function textSpanEnd(span: TextSpan): number; function textSpanIsEmpty(span: TextSpan): boolean; function textSpanContainsPosition(span: TextSpan, position: number): boolean; @@ -246,7 +246,7 @@ declare module ts { declare module ts { var optionDeclarations: CommandLineOption[]; function parseCommandLine(commandLine: string[]): ParsedCommandLine; - function readConfigFile(filename: string): any; + function readConfigFile(fileName: string): any; function parseConfigFile(json: any, basePath?: string): ParsedCommandLine; } declare module ts { diff --git a/bin/typescript_internal.d.ts b/bin/typescript_internal.d.ts index 2758ab3c212..b7def7258d9 100644 --- a/bin/typescript_internal.d.ts +++ b/bin/typescript_internal.d.ts @@ -35,6 +35,7 @@ declare module "typescript" { function concatenate(array1: T[], array2: T[]): T[]; function deduplicate(array: T[]): T[]; function sum(array: any[], prop: string): number; + function addRange(to: T[], from: T[]): void; /** * Returns the last element of an array if non-empty, undefined otherwise. */ @@ -67,9 +68,9 @@ declare module "typescript" { function createCompilerDiagnostic(message: DiagnosticMessage, ...args: any[]): Diagnostic; function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; function concatenateDiagnosticMessageChains(headChain: DiagnosticMessageChain, tailChain: DiagnosticMessageChain): DiagnosticMessageChain; - function flattenDiagnosticChain(file: SourceFile, start: number, length: number, diagnosticChain: DiagnosticMessageChain, newLine: string): Diagnostic; function compareValues(a: T, b: T): Comparison; - function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): number; + function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison; + function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; function normalizeSlashes(path: string): string; function getRootLength(path: string): number; @@ -79,10 +80,10 @@ declare module "typescript" { function isUrl(path: string): boolean; function isRootedDiskPath(path: string): boolean; function getNormalizedPathComponents(path: string, currentDirectory: string): string[]; - function getNormalizedAbsolutePath(filename: string, currentDirectory: string): string; + function getNormalizedAbsolutePath(fileName: string, currentDirectory: string): string; function getNormalizedPathFromPathComponents(pathComponents: string[]): string; function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, getCanonicalFileName: (fileName: string) => string, isAbsolutePathAnUrl: boolean): string; - function getBaseFilename(path: string): string; + function getBaseFileName(path: string): string; function combinePaths(path1: string, path2: string): string; function fileExtensionIs(path: string, extension: string): boolean; function removeFileExtension(path: string): string; @@ -92,6 +93,7 @@ declare module "typescript" { * Note that this doesn't actually wrap the input in double quotes. */ function escapeString(s: string): string; + function getDefaultLibFileName(options: CompilerOptions): string; interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; @@ -147,11 +149,10 @@ declare module "typescript" { } interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; - isEmitBlocked(sourceFile?: SourceFile): boolean; getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; getNewLine(): string; - writeFile(filename: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void): void; + writeFile: WriteFileCallback; } function getSingleLineStringWriter(): StringSymbolWriter; function releaseStringWriter(writer: StringSymbolWriter): void; @@ -170,7 +171,7 @@ declare module "typescript" { function unescapeIdentifier(identifier: string): string; function declarationNameToString(name: DeclarationName): string; function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): Diagnostic; - function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain, newLine: string): Diagnostic; + function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): Diagnostic; function getErrorSpanForNode(node: Node): Node; function isExternalModule(file: SourceFile): boolean; function isDeclarationFile(file: SourceFile): boolean; @@ -216,7 +217,6 @@ declare module "typescript" { function isKeyword(token: SyntaxKind): boolean; function isTrivia(token: SyntaxKind): boolean; function isModifier(token: SyntaxKind): boolean; - function createEmitHostFromProgram(program: Program): EmitHost; function textSpanEnd(span: TextSpan): number; function textSpanIsEmpty(span: TextSpan): boolean; function textSpanContainsPosition(span: TextSpan, position: number): boolean; @@ -246,7 +246,7 @@ declare module "typescript" { declare module "typescript" { var optionDeclarations: CommandLineOption[]; function parseCommandLine(commandLine: string[]): ParsedCommandLine; - function readConfigFile(filename: string): any; + function readConfigFile(fileName: string): any; function parseConfigFile(json: any, basePath?: string): ParsedCommandLine; } declare module "typescript" {